https://github.com/lwplw/ssrnet2caffe
《SSR-Net: A Compact Soft Stagewise Regression Network for Age Estimation》
论文:https://github.com/shamangary/SSR-Net/blob/master/ijcai18_ssrnet_pdfa_2b.pdf
GitHub:https://github.com/lwplw/ssrnet2caffe
1.SSRNet模型Demo
(1)源码:https://github.com/shamangary/SSR-Net
(2)开发环境:
TensorFlow – 1.10.1
Keras – 2.2.4
Python – 3.5
(3)源码文件结构:
在/SSR-Net-master/demo/
目录下:
-TYY_demo_ssrnet_lbp_webcam.py
– demo脚本
-lbpcascade_frontalface_improved.xml
– OpenCV人脸检测用
-SSRNET_model.py
– SSRNet模型解析文件
在/SSR-Net-master/pre-trained/morph_gender_models/ssrnet_3_3_3_64_1.0_1.0/
目录下:
-ssrnet_3_3_3_64_1.0_1.0.h5
– 模型结构及权重文件
2.SSRNet转换到Caffe
(1)源码:https://github.com/lwplw/ssrnet2caffe
(2)开发环境:
TensorFlow – 1.10.1
Keras – 2.2.4
Python – 3.5
Caffe
(3)源码文件结构:
1)SSRNET_model.py – SSRNet模型解析文件,来自上面SSRNet源码,做了修改:
删掉了def merge_age(x,s1,s2,s3,lambda_local,lambda_d):函数,并修改网络输出直接为9个参数,age的具体计算放在网络外的demo中,具体见源码。
2)convert_ssrnet.py – 转换脚本
3)keras2caffe.py – keras层转换到Caffe层的具体实现
4)ssrnet.caffemodel – 转换得到的Caffe下模型权重文件
5)ssrnet.prototxt – 转换得到的Caffe下模型结构文件
6)ssrnet_3_3_3_64_1.0_1.0.h5 – keras下的模型结构和权重文件
(4)其它说明
由于TensorFlow和Caffe的机制不同,在poolling层的源码实现上,Caffe有对结果向上取整的操作,最终导致TF下和Caffe下特征图的大小不一致,模型参数对应不上。
解决方案:
1)修改Caffe源码,并重新编译。(选择该方案,转换完成)
Reference:https://blog.csdn.net/lwplwf/article/details/82418110
2)在Caffe下重新训练SSRNet。