1. 程式人生 > >Caffe(13)--(SSRNet模型)Keras轉Caffe教程

Caffe(13)--(SSRNet模型)Keras轉Caffe教程

SSR-Net: A Compact Soft Stagewise Regression Network for Age Estimation
paper:https://github.com/shamangary/SSR-Net/blob/master/ijcai18_ssrnet_pdfa_2b.pdf

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。

3.SSRNet網路結構圖

在這裡插入圖片描述