【转】添加层的方法,sphereFace代码添加层笔记

     转自https://blog.csdn.net/cuixing001/article/details/79207109

     在此基础上,加入了自己的理解和修改

 

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

                             

图1训练的网络结构

 

一,文件改写

 

 

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


1,源码拷贝:在工具文件夹下找到“CAFFE-shpereface / SRC / CAFFE /包含/ CAFFE /层”下的margin_inner_product_layer.cpp,margin_inner_product_layer.cu拷贝到C:\ CAFFE \ CAFFE主\ SRC \ CAFFE \层目录下(这个是我的微软版CAFFE源码目录),其中“.CU”的是用于GPU的CUDA源码,没GPU的电脑可以不拷贝。另外依赖的源码math_functions.cpp,math_functions.cu也要拷贝到相应目录,这个数学计算的文件一般在SRC / CAFFE / util的目录下,也可搜索文件位置。
2,头文件拷贝:在工具下找到“CAFFE-sphereface /包含/ CAFFE /层”下的margin_inner_product_layer .hpp拷贝到C:\ caffe \ caffe-master \ include \ caffe \ layers目录下。另外依赖的头文件math_functions.hpp,mkl_alternate.hpp也需要类似拷贝到相应目录,可以搜索位置
.3,caffe.proto改写:在工具下找到“caffe-sphereface \ src \ caffe \ proto”目录下“caffe.proto”文件,用notepad ++或者记事本打开,这个文件对很重要



                              }
和最下面的消息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_dir}/src/caffe/util下的upgrade_proto.cpp的const char* UpgradeV1LayerType(const V1LayerParameter_LayerType type)函数中添加如下代码,方便已经训练好的模型进行转换。

       case V1LayerParameter_MYLAYER :  
    return "MyLayer"; 

例如:我的添加

上面的转自“家在北方”的博客,其中CENTER_LOSS改为MarginInnerProduct就好。

二,编译源码

 

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

1,在VS2013中打开微软版caffe项目,在libcaffe项目里面添加新的源码包(margin_inner_product的cpp,hpp,cu,分别添加到相应的src / layer,include / layer,cu / layer中,步骤为“添加 - 现有项 - 相应文件“)进来,如图5所示。

 

                            

图5包含新层的源码

 

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

                              

图6编译后的caffe.exe

 

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

                                                                    

 

图7新的层

 

三,训练

 

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

 

                                  

图8spherefaceNet-20训练

训练时遇到的问题:Unknown Layer type:MarginInnerProduct

解决方法:修改upgrade文件中的Margin_Inner_product为MarginInnerProduct

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
本课程适合具有一定深度学习基础,希望发展为深度学习之计算机视觉方向的算法工程师和研发人员的同学们。基于深度学习的计算机视觉是目前人工智能最活跃的领域,应用非常广泛,如人脸识别和无人驾驶中的机器视觉等。该领域的发展日新月异,网络模型和算法出不穷。如何快速入门并达到可以从事研发的高度对新手和中级水平的学生而言面临不少的挑战。精心准备的本课程希望帮助大家尽快掌握基于深度学习的计算机视觉的基本原理、核心算法和当前的领先技术,从而有望成为深度学习之计算机视觉方向的算法工程师和研发人员。本课程系统全面地讲述基于深度学习的计算机视觉技术的原理并进行项目实践。课程涵盖计算机视觉的七大任务,包括图像分类、目标检测、图像分割(语义分割、实例分割、全景分割)、人脸识别、图像描述、图像检索、图像生成(利用生成对抗网络)。本课程注重原理和实践相结合,逐篇深入解读经典和前沿论文70余篇,图文并茂破译算法难点, 使用思维导图梳理技术要点。项目实践使用Keras框架(后端为Tensorflow),学员可快速上手。通过本课程的学习,学员可把握基于深度学习的计算机视觉的技术发展脉络,掌握相关技术原理和算法,有助于开展该领域的研究与开发实战工作。另外,深度学习之计算机视觉方向的知识结构及学习建议请参见本人CSDN博客。本课程提供课程资料的课件PPT(pdf格式)和项目实践代码,方便学员学习和复习。本课程分为上下两部分,其中上部包含课程的前五章(课程介绍、深度学习基础、图像分类、目标检测、图像分割),下部包含课程的后四章(人脸识别、图像描述、图像检索、图像生成)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值