SDM For Face Alignment 流程介绍及Matlab代码实现之训练篇
来源:互联网 发布:怎样更新淘宝最新版本 编辑:程序博客网 时间:2024/06/08 01:28
原文地址:http://blog.csdn.net/xiamentingtao/article/details/47307017
SDM For Face Alignment 流程介绍及Matlab代码实现之训练篇
SDM 训练阶段的任务如下:
- 载入标准化的数据(包括400*400的正脸及特征点)
- 对每一张标准化的图片,模拟人脸检测仪,产生10个扰动的人脸框及相应的初始特征点
x0 。- 求解
Δx ,Φ ,其中Δx=x∗−x0 ,x∗ 表示true shape,Φ 表示每个特征点的特征向量- 求解最小二乘问题,得到一系列
{Rk}
下面分别来说明:
载入数据
载入811个训练数据,按照上一章预备篇关于第一幅图片的裁剪方法裁剪这811张图片。
matlab代码如下:
function [Data] = load_single_data2 ( dbpath_img, dbpath_pts,image_index, options )%% output format%{DATA.- width_orig: the width of the original image.- height_orig: the height of the original image.- img_gray: the crop image.- height: the height of crop image.- wdith: the width of crop image.- shape_gt: ground-truth landmark.- bbox_gt: bounding box of ground-truth.%}slash = options.slash;dbname = options.datasetName;imlist = dir([dbpath_img slash'*.*g']); %% load images img = im2uint8(imread([dbpath_img slash imlist(image_index).name])); Data.width_orig = size(img,2); Data.height_orig = size(img,1); %% load shape Data.shape_gt = double(annotation_load(... [dbpath_pts slash imlist(image_index).name(1:end-3)'pts'] , dbname)); if0 figure(1); imshow(img); hold on; draw_shape(Data.shape_gt(:,1),... Data.shape_gt(:,2),'y'); hold off; pause; end %% get bounding box Data.bbox_gt = getbbox(Data.shape_gt); %% enlarge region of face region = enlargingbbox(Data.bbox_gt,2.0); region(2) = double(max(region(2),1));%这里主要是为了防止求出的包围盒超过图像,因此一旦超过,则region(2)必然小于0,因此此时取1即可。 region(1) = double(max(region(1),1)); bottom_y = double(min(region(2) + region(4) - 1,... Data.height_orig)); right_x = double(min(region(1) + region(3) - 1,... Data.width_orig));%防止长和宽超过图片大小,因此取二者最小值 img_region = img(region(2):bottom_y, region(1):right_x, :);%取人脸区域 %% recalculate(重新计算) the location of groundtruth shape and bounding box Data.shape_gt = bsxfun(@minus, Data.shape_gt,... double([region(1) region(2)]));%等价于Data{iimgs}.shape_gt-repeat( double([region(1) region(2)]),size(Data{iimgs}.shape_gt,1),1) %将图像的坐标原点移到人脸包围盒的左上角,并因此得以重新计算新的特征点 Data.bbox_gt = getbbox(Data.shape_gt);%新的特征点的包围盒的左上角坐标发生了改变,但是宽和高没有变化if size(img_region, 3) == 1 Data.img_gray = img_region; else Data.img_gray = rgb2gray(img_region); end Data.width = size(img_region, 2); Data.height = size(img_region, 1);if0 figure(2); imshow(Data.img_gray); hold on; draw_shape(Data.shape_gt(:,1),... Data.shape_gt(:,2),'y'); hold off; pause; end %% normalized the image to the mean-shape sr = options.canvasSize(1)/Data.width; sc = options.canvasSize(2)/Data.height; Data.img_gray = imresize(Data.img_gray,options.canvasSize); Data.width = options.canvasSize(1); Data.height = options.canvasSize(2); Data.shape_gt = bsxfun(@times, Data.shape_gt, [sr sc]); Data.bbox_gt(1:2) = bsxfun(@times, Data.bbox_gt(1:2), [sr sc]);%补充 Data.bbox_gt(3:4) = bsxfun(@times, Data.bbox_gt(3:4), [sr sc]);%补充 if0 figure(3); imshow(Data.img_gray); hold on; draw_shape(Data.shape_gt(:,1),... Data.shape_gt(:,2),'r'); hold on; rectangle('Position', Data.bbox_gt, 'EdgeColor','k'); pause; end endfunction region = enlargingbbox(bbox, scale)%同前面一样,初始时刻这里得到仅仅是特征点盒子,而我们如果想要包住整个人脸,就必须先将原始盒子的左上角平移一半的宽高,然后再放大两倍。这个在前面求解%rect = get_correct_region( boxes, shape,Dataa(i).img,1 );中也用到过%因此这里得到的盒子是包住全部人脸的盒子。 region(1) = floor(bbox(1) - (scale - 1)/2*bbox(3));region(2) = floor(bbox(2) - (scale - 1)/2*bbox(4));region(3) = floor(scale*bbox(3));region(4) = floor(scale*bbox(4));end
0 0
- SDM For Face Alignment 流程介绍及Matlab代码实现之训练篇
- SDM For Face Alignment 流程介绍及Matlab代码实现之训练篇
- SDM For Face Alignment 流程介绍及Matlab代码实现之训练篇
- SDM For Face Alignment 流程介绍及Matlab代码实现之预处理篇
- SDM For Face Alignment流程介绍及Matlab代码实现之测试篇
- SDM for face alignment 人脸对齐相关资料整理
- Supervised Descent Method and its Applications to Face Alignment(SDM)
- Face Alignment by 3000 FPS 代码之二
- 决策树及随机森林在face alignment at 3000fps中的训练和测试
- Joint Cascade Face Detection and Alignment流程
- Affine-Transformation Parameters Regression for Face Alignment
- Face Alignment
- Face Alignment
- Face Alignment
- Face Alignment(Face Landmark)
- POCR-project-out cascaded regression for face alignment
- CNN for Face Alignment 深度神经网络的初次尝试
- Joint Cascade Face detection and Alignment(ECCV2014)介绍
- Hadoop--倒排索引过程详解
- 初窥Linux 之 我最常用的20条命令
- opencv sift match
- storm0.9.2集群的搭建
- gbdt+fm
- SDM For Face Alignment 流程介绍及Matlab代码实现之训练篇
- 越过用户授权使用浮窗
- DP 动态规划 Problem B 1002 求最长上升子序列的长度
- HashMap源码分析
- 关于内链优化的几个细节问题
- Disabling contextual LOB creation as createClob() method threw error : java.lang
- 内存管理-----伙伴系统---2
- 矩形相关操作
- 数据结构-链表-作业