Caffe与Lasagne使用——人脸关键点检测

Caffe与Lasagne 使用——人脸关键点检测


一. Caffe求解回归问题


在使用Lasagne之前,我尝试用Caffe做回归问题。毕竟Lasagne是基于Theano的,所以训练速度上Caffe占优。

1. 尝试方法

清理掉标签数据中的NaN值后,尝试过下述方法:
(1) 输出数据根据最大值和最小值归一化到[0,1]区间内;
(2) 输出数据属于不同分布,归一化至标准正态分布,均值升为0.5;
(3) 修改网络结构,微调model zoos中的网络。

2. 实验结果

(1) 训练发散,方法1可以解决;
(2) 方法1解决后的直接后果是Caffe训练后收敛并且有一些损失;
(3) 方法2和3会使得网络不会发散,仅仅在一开始快速收敛,后面会在一定范围内震荡。

3. 联系作者

联系Balakrishnan Prabhu先生 [1]后,他建议我:
(1) 先清理数据中的NaN,否则收敛时会产生很多问题;
(2) 对层文件使用xavier权重:
    weight_filler{
      type: "xavier"
    }

    bias_filler {
      type: "constant"
      value: 0.1
    }
(3) 学习率太快或太慢?调整它。

二. 相关工作


观察[1]中给出的效果,Caffe回归时最后还是收敛到均值。所以Balakrishnan Prabhu先生选择了快速收敛的那一时刻的模型。
达闻西在知乎中[3]给的实例是单变量回归,但输出变量为有序程度,可以解释为这张图片是有序图片的可能性是多少,虽损失层修改为欧几里德损失,和分类问题的区别在于把分类的one-hot格式变成了检测为有序图片的概率。
陈日伟[4]也给出了人脸关键点检测的操作。卷积层变为LOCAL层,但图像分辨率从96*96大幅下滑为39*39,定位精度会受到影响。效果见其博客和代码。
Daniel Nouri[2]给出的结果最好,网络训练采用Lasagne,同时公布了 源码。由于 Journey-Dream[5]已经详细翻译了原文,所以细节方面有问题可以再讨论。

三. Step by Step


Daniel Nouri的网络模型类似Yann LeCun的经典CNN模型,大致提供了两个CNN模型:第1个为整体网络模型,第2个为局部网络模型。

1. 整体网络模型

网络输出为图像中每个人脸关键点的所有坐标。整体网络模型的输入依次发生变化。这里定义net1为单个隐含层的神经网络,net2为卷积神经网络(cnn),net3为数据增强(增加水平方向对称的图像)后的cnn,net4为图像增强和学习率可调时的cnn,net5为图像增强,学习率可调和带Dropout时的cnn。我的训练和验证曲线如下(横坐标为训练次数,纵坐标为验证时像素坐标的均方根误差(Root Mean Squared Error)):
Caffe与Lasagne使用——人脸关键点检测_第1张图片

整体网络模型的测试图像效果如下:
Caffe与Lasagne使用——人脸关键点检测_第2张图片

2. 局部网络模型

人脸关键点被划分为不同的区域,网络输出为每个区域的关键点坐标。可以用训练好的整体网络模型的权重为初始值,微调局部网络模型时修改整体网络模型的输出。

Caffe与Lasagne使用——人脸关键点检测_第3张图片

3. 提交结果

Kaggle中挑战赛的Leaderboard更新得很快,过一段时间后反正名次很快也会被刷下去,不如趁热截图 ~ ~||。

Caffe与Lasagne使用——人脸关键点检测_第4张图片

四. 参考链接


[1] corpocrat.com/2015/02/24/facial-keypoints-extraction-using-deep-learning-with-caffe/
[2] danielnouri.org/notes/2014/12/17/using-convolutional-neural-nets-to-detect-facial-keypoints-tutorial/
[3] www.zhihu.com/question/37351143
[4] blog.csdn.net/chenriwei2/article/details/49706563
[5] blog.csdn.net/tanhongguang1/article/details/46056663


你可能感兴趣的:(deep,learning,Kaggle,caffe,人脸关键点检测,Lasagne)