表情识别实验

1.实验数据

    实验数据采用Kaggle的一个表情分类比赛数据(https://www.kaggle.com/c/challenges-in-representation-learning-facial-expression-recognition-challenge/data),该数据集包含三万多张人脸图片,每张图片被标注为“0=Angry, 1=Disgust, 2=Fear, 3=Happy, 4=Sad, 5=Surprise, 6=Neutral”(7类)的其中一种,分成了train、test和val。数据格式为csv,,参考“扎手的苍耳”的博客中脚本,将数据转换为图片,图片尺寸为48*48。编写脚本,根据类别重新命名图像,如下:

    笔者编写了准备实验数据脚本,在笔者提供的文件夹data/fer2013/pre_data.sh。笔者用train文件和val文件进行训练和验证,用test文件进行后续的测试精度。

    笔者修改的数据存放至百度网盘,链接:https://pan.baidu.com/s/1F8V6iWQfKdUELR4VihUUkA 密码:8r63。

参考博客网址:http://blog.csdn.net/ZWX2445205419/article/details/79030001

2.核心算法

    经过在网上的各种阅读资料,笔者大致将表情识别的方法分为两大类,一类是通过提取面部特征值,再利用传统的分类方法,识别出面部表情;另一类则是利用深度网络学习实现端对端的识别。笔者在本次实验中选择第二类方式。

    在darknet框架下,参考《Densely Connected Convolutional Networks》的卷积网络结构,制作配置文件(可实现end_to_end分类识别),进行分类训练。网络结构如下:

    

    darknet是用C和cuda写的开源深度学习框架,快速且易安装,CPU和GPU都支持。github地址在https://github.com/pjreddie/darknet,更多的信息可以在官网(https://pjreddie.com/darknet/)上查看。

    《Densely Connected Convolutional Networks》是CVPR2017最佳论文,其优点主要有三点:1)减轻了梯度消失问题;2)强化了特征传播,鼓励了特征再传播;3)大幅度减少了参数数量。其Densely Connected原理如下图:

    Densely Connected 在darknet框架中实现的代码是体现在route_layer.c。

    在本次实验的网络配置中,笔者配置了3个dense block ,输出6*6 feature image,详细可看笔者提供的文件夹中fer.cfg

参考:darknet框架 https://pjreddie.com/darknet/,github:

       论文《Densely Connected Convolutional Networks》 https://arxiv.org/abs/1608.06993,github: https://github.com/liuzhuang13/DenseNet

3.训练

    笔者在darknet源码上编写了代码,将每次迭代前的avg loss 保存至txt,等训练结束后,编写脚本,画出avg loss的变化曲线图。如下:

4.测试

    笔者编写了测试demo供使用,demo在windows下开发得到。详细参照使用说明。

    笔者画出了不同迭代次数训练下的分类精度accury(笔者每1000代测试一次)。accury=正确识别的表情图片数量 / 总表情图片数量。

论文《A Real-time Facial Expression Recognizer using Deep Neural Network.” International Conference on Ubiquitous Information Management and Communication ACM》在统计了fer2013各类别的识别率,见下图。笔者也统计了,见下表。

 

angry

disgust

fear

happy

sad

surprise

neural

angry

58.45

      

disgust

 

70.96

     

fear

  

50.76

    

happy

   

83.5

   

sad

    

50

  

surprise

     

78.85

 

neural

      

66.93

    

    笔者提供了笔者测试过的weights资源在百度网盘,链接:https://pan.baidu.com/s/1akEmcG42zsHp8DMwesXfRw ,密码:oofc ;链接:https://pan.baidu.com/s/1lYg4hm5AXHu7u2yVTs5w9w 密码:iewc。其他的weights可单独向笔者索要,联系QQ:1192090271。

参考博客:http://blog.csdn.net/walilk/article/details/58709611

 

 

工程说明:demo在vs2013 x64 下开发得到,工程放置在fer_demo中,github地址:https://github.com/XiaoMinFang/fer_demo

依赖说明:demo依赖darknet在Windows下静态库darknet.lib,存放至lib文件夹中,(darknet在Windows下配置可参考:https://github.com/AlexeyAB/yolo-windows,笔者对darknet中源码做了改动和注释,可查看笔者的github:https://github.com/XiaoMinFang/darknet_windows fer分支。)

    网络卷积运算使用了openblas(可加速3-5倍),笔者编译了Windows下x64的,存放至openblas文件夹下。

    darknet依赖了pthread,存放至pre_build文件夹下。

    demo使用了

代码说明:demo的代码分别存放至fer_module文件夹的include和src中。

demo使用说明:笔者生成exe单独放置demo文件夹中,可直接点击fer_demo.exe运行,根据提示输入测试图片或批量测试图片的list。(注:demo若缺少依赖,请跟我联系!qq:1192090271)

    示例如下:

    

  

  • 2
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值