FPN(Linux下的实验和Windows平台的移植)

来源:互联网 发布:51单片机蜂鸣器程序 编辑:程序博客网 时间:2024/06/11 06:30

7.Linux下FPN的编译运行

这篇文章的代码,作者上传之后修改了,导致不能运行,贴出源码:https://github.com/unsky/FPN-caffe

好在我之前就下载了,测试训练都没问题,下面贴出我自己的源码,已上传到git上:

https://github.com/zhang1992wen1023/FPN_original

按照步骤,一步一步来就行,跟faster rcnn的步骤一样,错误也一样。

备注:

原版的文件中是没有FPN的demo,这里的demo是我改过的,可以运行,更改一下自己的目录,一个prototxt,一个caffemodel。

1.sh文件是标记了test.py、demo.py的运行参数。

8.Windows下FPN的移植运行

目前网上还没有windows下的FPN,可以说是独一份了吧,也花了很多时间去调试寻找方法,最后终于能够成功了。

8.1caffe-FPN的编译

这一步也是走了很多弯路,包括下载BVLC/Windows的caffe和linux下的caffe文件夹融合,用caffe-py-faster-rcnn的文件夹代替,用caffe-py-faster-rcnn与linux下的caffe文件夹融合,更换proto文件,更换caffe.pb.cc和caffe.pb.h,增加caffe.pb.h和caffe.pb.cc中新的部分,即:conadd的部分。最后发现,上面的都是白忙活,需要做的其实很简单,下面开始:

8.1.1文件准备

Linux下成功运行的FPN程序。具体方法参照第五节第7部分。

Windows下成功允许的caffe-py-faster-rcnn。具体方法参照第第二节第三部分,或者博客:http://www.jianshu.com/p/53a2f02064f6。

8.1.2文件修改

FPN相比于faster rcnn的变换主要在于conadd_layer,其主要作用是将不同卷积层中分层金字塔的特征信息按照不同比例采样拼接,所以我们需要将这一部分添加到caffe-py-faster-rcnn中,其他部分还是faster rcnn的原理。具体方法如下:

1.复制caffe-faster-rcnn,改名为:caffe-FPN,目录为:D:\Caffe\Caffe-FPN

2.复制linux中的FPN文件夹到D:\FPN

3.将D:\FPN\caffe-FP_NET文件夹中的三个文件复制出来到D:\Caffe\Caffe-FPN中,分别为:

①D:\FPN\caffe-FP_Net\include\caffe\layers中的conadd_layer.hpp文件复制到D:\Caffee\caffe-FPN\include\caffe\layers

②D:\FPN\caffe-FP_Net\src\caffe\layers中的conadd_layer.cpp文件复制到D:\Caffee\caffe-FPN\src\caffe\layers

③D:\FPN\caffe-FP_Net\src\caffe\layers中的conadd_layer.cu文件复制到D:\Caffee\caffe-FPN\src\caffe\layers

4.打开D:\Caffee\caffe-FPN\windows中的Caffe.sln文件,在libcaffe项目下重新添加这三个文件,分别:libcaffe\include\layers添加头文件,libcaffe\cu\layers添加cu文件,libcaffe\src添加cpp文件。

5.打开新添加的conadd_layer.cpp文件,重新写代码。

!!!注意:如果不重新写会出现未声明的top_layers,这种情况出现,所以做一下修改:

①更换这两个include的顺序。

②将voidConaddLayer<Dtype>::Forward_cpu(constvector<Blob<Dtype>*>&bottom,constvector<Blob<Dtype>*>&top)函数整个重新敲进去,将原来的删掉,同时将原来的top_shape变为top_shape2,具体为啥这么做,我也是试出来的。

剩下的就和以前caffe的编译一样了,先编译libcaffe,再整个全部编译即可,不报错成功编译说明可以用了。

8.1.3FPN的编译运行

将编译好的文件,包括:D:\Caffee\caffe-FPN\python文件夹复制到D:\FPN\caffe-FP_Net,覆盖原有文件夹,将D:\Caffee\caffe-FPN\Build\x64\Release中的所有文件、D:\Caffee\caffe-FPN\Build\x64\Release\pycaffe\caffe中的所有文件复制到D:\FPN\caffe-FP_Net\python\caffe,覆盖原有文件。

打开cmd,cd到FPN文件夹路径下,python tools/demo.py –gpu 0,即可运行demo。

8.1.4FPN的运行过程中的错误及其修改

错误1:no model namedgpu_nms或者 no model named cpu_nms

解决方法:将之前成功运行的py-faster-rcnn文件中的部分文件复制到FPN文件夹中,不覆盖原有的文件,将D:\py-faster-rcnn-master\lib复制到D:\FPN\lib中。

错误2:  File"D:\FPN\tools\..\lib\rpn\proposal_layer.py", line 26, in setup

layer_params = yaml.load(self.param_str_)

AttributeError: 'ProposalLayer' objecthas no attribute 'param_str_'

解决方法: D:\FPN\tools\..\lib\rpn\proposal_layer.py打开这个文件,找到第26行将param_str_改为:param_str

错误3:  File "tools/demo.py", line 136, in<module>

   _, _= im_detect(net, im)

 File "D:\FPN\tools\..\lib\fast_rcnn\test.py", line 154, inim_detect

   blobs_out = net.forward(**forward_kwargs)

 File "D:\FPN\tools\..\caffe-FP_Net\python\caffe\pycaffe.py",line 121, in _Net_forward

   self._forward(start_ind, end_ind)

 File "D:\FPN\tools\..\lib\rpn\proposal_layer.py", line 73, inforward

   pre_nms_topN  =cfg[cfg_key].RPN_PRE_NMS_TOP_N

KeyError: '1'

解决方法:

同样找到上面错误的文件,将原来的那行注释掉,改为新的如下:

       # cfg_key = str(self.phase) # either 'TRAIN' or 'TEST'

       cfg_key = str('TRAIN' if self.phase == 0 else 'TEST')

!!!!!注意:很容易出现改完以后还是一样的错误,那是因为前面缩进符的问题,将新增加的那行前面的额空格删掉,将下面随便一行的前面tab空格缩进部分复制粘贴到新一行的前面。

至此,就可以成功运行windows下的FPN程序了!

 

!!!注意

优化微调finetune部分:

1.更改anchors的大小,根据自己物品的实际尺寸可以更改anchors的大小一提高准确率:

lib/rpn/generate_anchors.py文件中的generate_anchors(base_size=8, ratios=[0.5, 1, 2],scales=2 **np.arange(1, 4)):这三个参数决定了anchors的尺寸。例如分别如下:

#生成anchors总函数:ratios为一个列表,表示宽高比为:1:2,1:1,2:1  

·      #2**x表示:2^x,scales:[2^3 2^4 2^5],即:[8 16 32]  ,bacthsize为16,意味着相乘得到尺度为:128、256、512的结果。

·      def generate_anchors(base_size=16, ratios=[0.5, 1, 2],  

·                           scales=2**np.arange(3, 6)):  

2.更改搜索框的数量,提高运行速度:

lib/fast_rcnn/config.py文件中C.TEST.RPN_POST_NMS_TOP_N = 2000,可以根据实际情况在不影响准确率的情况下修改,在faster rcnn中该参数为300,可以减少该参数的值测试准确率,如果没有太大影响可以降低以提升速度。

实践证明,减少搜索框不仅缩短时间,准确率也有大幅提升。现在的准确率已经来到了百分之九十几。

原创粉丝点击