MXNet使用---复现、训练、测试人脸角度检测FSA-Net(SSR-MT)模型为例

FSA-Net项目是用来做人脸角度计算的模型,网络是基于SSR-Net网络(测年龄的)改进而来的,改进的过程中也形成了几个相互有所差别的版本。该模型的github链接为:https://github.com/shamangary/FSA-Net,作者的网络实现是基于keras+tensorflow实现的。由于项目需要的是caffe或者MXNet版的模型,因此做了两方面的尝试,一个是keras模型转caffe,另一个是重新训练一个mxnet版的FSA。这里记录后者,先选取简单版本的FSA来复现,也就是最接近其前身SSR的版本,因为不同版本的效果其实相差不大,但简单版本的就方便复现很多。实现mxnet版的网络,主要是参考上述的FSA模型、SSR年龄检测mxnet版https://github.com/wayen820/gender_age_estimation_mxnet、和一些mxnet基础应用https://blog.csdn.net/scythe666/article/details/83058528

1.整体

总文件夹如下:

FSA-MXNet
|---dataset    #放mxnet数据的文件夹
    |---300W_ALL.rec
    |---AFLW2000_ALL.rec
|---model_output    #保存输出的文件夹,没有训练模型
    |---
|---test_img    #用来测试的图片,这些图都是已经把人脸截取出来的了
    |---xxx.jpg
|---train_ssr_angle.py    #训练代码,我的github上面的为train_ssr_angle.py功能一样,下同
|---model_slim_angle.py    #模型代码
|---test_ssr_angle.py    #测试代码
|---data.py    #数据读取的库文件
|---make_data	# some code to make .rec dataset
    |---300wlp2lst.py	# make all data file's .lst
    |---im2rec.py	# python file from mxnet and I make some change to fit our net
    |---div_data_lst.py	# divide a large .lst into two small ones, which can be used as training set and test set respectively.

主要步骤范围mxnet模型建立,rec数据转化,写训练代码及训练,测试与验证。以下分别来说一下。具体的代码和数据,可以在我的github上面(github链接这几天会更新一下)找到,这里就不贴代码了,太长,影响阅读。例如train_ssr_angle.py 等我可能命名改为了train_fsa_angle.py ,功能是一样的。

2.模型建立

模型为model_slim_angle.py,是参考FSA-keras和SSR-mxnet来写的,整体还是比较简单的,主要是FSA后面的处理形成3个角度的部分有一点点复杂,我将这个部分合并成了网络计算的形式了。

3.数据转换

训练数据是用300W_LPhttp://www.cbsr.ia.ac.cn/users/xiangyuzhu/projects/3DDFA/Database/300W-LP/main.htm

验证集是AFLW2000http://www.cbsr.ia.ac.cn/users/xiangyuzhu/projects/3DDFA/Database/AFLW2000-3D.zip

首先是需要把以上的数据转换成为mxnet的rec格式,这个过程主要是分为两步,生成lst文件,生产rec文件。

3.1 生成lst文件

这里实际上还对图片进行了预处理,把人物脸部截取出来,并过滤掉人脸超出边界的和角度值过大的(正负90度)。同样的,这个代码也简单,各位看懂也问题8大。代码为300wlp2lst.py。这样就可以生成lst文件了,下面是文件的部分截图

 3.2 生成rec文件

网上的绝大部分说生成mxnet的rec的博客,都是针对分类,一个图片对应一个标签。但这种方式在本网络不太可行,我用这种方式试过,最终只读了一个标签出来,而我的网络是3个标签,然后就报错了。因此是要先修改一下im2rec.py文件:

如截图部分修改一下,header所读取的东西变成了3个数,而不是一个标签了,然后就在终端运行:

python im2rec.py ./300W_ALL.lst ./300W_ALL

 im2rec.py文件是mxnet自带的,可以复制出来到自己的工程中再修改和调用,然后,./300W_ALL.lst是之前生成的lst文件,./300W_ALL是放处理过的图片的文件夹。运行过后可以生成最终的rec文件了,这个文件的大小会和这个300W_ALL文件差不多大的,如果你生产的rec大小差了很多,那就有问题的,需要注意。另外,lst里面所包含的图片名字,必须在300W_ALL里面都包含有相应的图片,反过来,300W_ALL里面有的图片,lst中可以没有。所以当你想用同一个数据集来测试和训练,可以将这个大的lst拆分层两个,最后制作rec的时候,就可以都指向这个300W_ALL文件夹。

4.训练代码

感觉mxnet的训练,和keras的有些像,粒度比tensorflow大,比caffe小。train_fsa_angle.py 是训练代码

 训练的时候,直接终端调用就行了:

python train_ssr_angle.py

下面是训练的时候的部分截图,暂时还有点过拟合,训练我写的同样的keras网络,是没有问题的,有点尴尬咯~~~~

5.测试代码

 测试代码就是加载模型和运行模型,test_fsa_angle.py

运行的时候,也是直接python:

python test_ssr_angle.py

测试部分,有一点是需要注意的,我测试的图是已经抠出来的人脸图片(这个图片集不能共享),具体抠出来的图人脸占比应该多大,是有参考值的。就是一开始制作lst文件的时候,Python脚本也进行了抠图,具体看可以发现,是数据集自带的人脸边界框再往外扩0.6倍的长宽,自己制作测试的图片的时候也应该参考这个值。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 38
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值