本教程是在windows微软版caffe环境配置好基础上添加sphereFace的新层MarginInnerProduct的示例,其他新层也可参考这样做。作者开放的整个人脸识别源码在https://github.com/wy1iu/sphereface。另外caffe的微软版本地址为:https://github.com/Microsoft/caffe。图1所示的是作者提供训练的网络结构文件prototxt。

                             

图1 训练的网络结构

一、文件改写


    在github上下载作者的整个code,解压。找到tools文件夹下的caffe-shpereface版本,其实这个版本跟微软版本的caffe基本上都一样,不一样的地方就是新层方面和一些其他连带的细节文件。


1、源码拷贝:在tools文件夹下找到"caffe-shpereface/src/caffe/include/caffe/layers”下的margin_inner_product_layer.cpp、margin_inner_product_layer.cu拷贝到C:\caffe\caffe-master\src\caffe\layers目录下(这个是我的微软版caffe源码目录),其中“.cu”的是用于GPU的cuda源码,没GPU的电脑可以不拷贝。另外依赖的源码math_functions.cpp、math_functions.cu也要拷贝到相应目录,这个数学计算的文件一般在src/caffe/util目录下,也可搜索文件位置。
2、头文件拷贝:在tools下找到"caffe-sphereface/include/caffe/layers "下的margin_inner_product_layer.hpp 拷贝到C:\caffe\caffe-master\include\caffe\layers目录下。另外依赖的头文件math_functions.hpp,mkl_alternate.hpp也需要类似拷贝到相应目录,可以搜索位置。
3、caffe.proto改写:在tools下找到" caffe-sphereface\src\caffe\proto " 目录下"caffe.proto"文件,用notepad++或者记事本打开,这个文件对很重要,其定义了caffe所有支持层的参数,类型,名字,ID等。
要改写的地方在message LayerParameter {
                              ...
                              ...
                              }
和最下面的message  MarginInnerProductParameter{
                              ...
                              ...
                              }
      在微软版的caffe类似目录下(我的目录C:\caffe\caffe-master\src\caffe\proto)找到"caffe.proto"文件打开,这2个文件大致上一样,其实上有很多不一样的地方,如果“图方便”直接把caffe.proto替换掉微软的会有错误,踩坑不少,后面编译会有莫名其妙的错误。打开后找到如图2所示的位置,看箭头指的下一个适合的指定层ID是多少,然后在下面适合位置根据第一个打开的caffe.proto新层参数往第二个里面添加参数,如图3绿色那一行添加的所示。

                      

图2 层的参数信息

                            

图3 参数ID指定

然后在文件最后添上一些新层的参数ID说明,也是根据第一个添加,如图4灰色部分所示。

                             

图4 最后添加的部分


二、编译源码


     由于第一步添加了新层,故需要重新编译caffe那一项即可,其他15个项目(如果以前没有添加的话)可以不需要重新编译,编译时间较长。

1,在VS2013中打开微软版caffe项目,在libcaffe项目里面添加新的源码包含进来,如图5所示。


                            

图5 包含新层的源码

编译caffe项目,鼠标右键caffe,选择重新生成,等待编译完成,这时候如果报错,看错误原因,是在哪个cpp文件或者头文件的问题,然后再对照微软版的caffe找问题。若成功,则可以看到编译后的caffe.exe比原来要大点,我的是3.44M的样子。

                              

图6 编译后的caffe.exe

     这时,就可以像图7下面那样使用新的Layer了。

                                                                    


图7 新的layer


三、训练


      按照sphereface提供的网络结构,准备好自己的数据,可以训练自己的模型了。


                                  

图8spherefaceNet-20训练



Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐