首页 » 技术分享 » CNN应用之性别、年龄识别

CNN应用之性别、年龄识别

 

原文地址:http://blog.csdn.net/hjimce/article/details/49255013

作者:hjimce

一、相关理论

  本篇博文主要讲解2015年一篇paper《Age and Gender Classification using Convolutional Neural Networks》,个人感觉这篇文献没啥难度,只要懂得Alexnet,实现这篇文献的算法,会比较容易。其实读完这篇paper之后,我一直在想paper的创新点在哪里?因为我实在没有看出paper的创新点在哪里,估计是自己水平太lower了,看文献没有抓到文献的创新点。难道是因为利用CNN做年龄和性别分类的paper很少吗?网上搜索了一下,性别预测,以前很多都是用SVM算法,用CNN搞性别分类就只搜索到这一篇文章。个人感觉利用CNN进行图片分类已经不是什么新鲜事了,年龄、和性别预测,随便搞个CNN网络,然后开始训练跑起来,也可以获得不错的精度。

  性别分类自然而然是二分类问题,然而对于年龄怎么搞?年龄预测是回归问题吗?paper采用的方法是把年龄划分为多个年龄段,每个年龄段相当于一个类别,这样性别也就多分类问题了。所以我们不要觉得现在的一些APP,功能好像很牛逼,什么性别、年龄、衣服类型、是否佩戴眼镜等识别问题,其实这种识别对于CNN来说,基本上是松松搞定的事,当然你如果要达到非常高的识别精度,是另外一回事了,就需要各种调参了。

言归正传,下面开始讲解2015年paper《Age and Gender Classification using Convolutional Neural Networks》的网络结构,这篇文章没有什么新算法,只有调参,改变网络层数、卷积核大小等……所以如果已经对Alexnet比较熟悉的,可能会觉得看起来没啥意思,这篇papar的相关源码和训练数据,文献作者有给我们提供,可以到Caffe zoo model:https://github.com/BVLC/caffe/wiki/Model-Zoo  或者文献的主页:http://www.openu.ac.il/home/hassner/projects/cnn_agegender/。下载相关训练好的模型,paper性别、年龄预测的应用场景比较复杂,都是一些非常糟糕的图片,比较模糊的图片等,所以如果我们想要直接利用paper训练好的模型,用到我们自己的项目上,可能精度会比较低,后面我将会具体讲一下利用paper的模型进行fine-tuning,以适应我们的应用,提高我们自己项目的识别精度。

二、算法实现

因为paper的主页,有提供网络结构的源码,我将结合网络结构文件进行讲解。

1、 网络结构

     

Paper所用的网络包含:3个卷积层,还有2个全连接层。这个算是层数比较少的CNN网络模型了,这样可以避免过拟合。对于年龄的识别,paper仅仅有8个年龄段,相当于8分类模型;然后对于性别识别自然而然是二分类问题了。

然后图像处理直接采用3通道彩色图像进行处理,图片6都统一缩放到256*256,然后再进行裁剪,为227*227(训练过程随机裁剪,验证测试过程通过矩形的四个角+中心裁剪),也就是说网络的输入时227*2273通道彩色图像,总之基本上跟Alexnet一样。

网络模型:

(1)第一层:采用96个卷积核,每个卷积核参数个数为3*7*7,这个就相当于37*7大小的卷积核在每个通道进行卷积。激活函数采用ReLU,池化采用最大重叠池化,池化的size选择3*3strides选择2。然后接着再来一个局部响应归一化层。什么叫局部响应归一化,自己可以查看一下文献:《ImageNet Classification with Deep Convolutional Neural Networks》,局部响应归一化可以提高网络的泛化能力。

 

局部响应归一化,这个分成两种情况,一种是3D的归一化,也就是特征图之间对应像素点的一个归一化。还有一种是2D归一化,就是对特征图的每个像素的局部做归一化。局部响应归一化其实这个可有可无,精度提高不了多少,如果你还不懂上面那个公式也没有关系。我们可以利用最新的算法:Batch Normalize ,这个才牛逼呢,2015年,我觉得最牛逼的算法之一,不仅提高了训练速度,连精度也提高了。过程:通过7*7大小的卷积核,对227*227图片卷积,然后特征图的个数为96个,每个特征图都是三通道的彩色图的加权组合,这个作者没有讲到卷积层的stride大小,不过我们大体可以推测出来,因为paper的网络结构是模仿:ImageNet Classification with Deep Convolutional Neural Networks的网络结构的,连输入图片的大小也是一样的,这篇文献的第一层如下所示:

 

我们可以推测出,paper选择的卷积步长为4,这样经过卷积后,然后pad2,这样经过卷积后图片的大小为:(227-7)/4+1=56。然后经过3*3,且步长为2的大小,进行重叠池化,可以得到:56/2=28*28大小的图片,具体边界需要补齐。下面是原文的第一层结构示意图:

 

[python] 
view plain
 copy

转载自原文链接, 如需删除请联系管理员。

原文链接:CNN应用之性别、年龄识别,转载请注明来源!

0