Faster-RCNN训练时遇到的问题

来源:互联网 发布:单片机最小系统数据 编辑:程序博客网 时间:2024/04/29 14:26

  第一次写博客,没想太多。只是想记录一下训练Faster-rcnn是遇见的一些问题。因为在我训练出bug的时候有点绝望,怀疑人生。不过在看到开始训练的一瞬间又觉得活着挺好的。


1.环境搭建

   rbg大神很周到,需要的东西全都有(从硬件的要求,到需要的各种model)

   Faster-rcnn:https://github.com/rbgirshick/py-faster-rcnn(在此感谢rbg大神,献出我的膝盖)


2.制作数据

   推荐:http://blog.leanote.com/post/wjgaas@126.com/Faster-RCNN-%E8%AE%AD%E7%BB%83

   按照这个大神的的方法,很容易做出自己的 数据集。有一些具体注意点。

   !比如:图片命名不要用中文;标签不要有大写字母;图片命名要6位数字;图片格式.jpg。

   不知道这些有什么后果,我还是听话的改了,毕竟大家踩过的坑绕道比较节省时间。

   但是他没给.xml文件批量更改的方法。下面的大神给了个源码,无脑运行就好了。笑


   推荐:https://saicoco.github.io/object-detection-4/

   对于他推荐的软件LabelImg,下面是我自己的小经验。

2.1. LabelImg环境搭建

   推荐在ubuntu系统下搭建环境。(开始的时候在windows上搭了2天的环境,最后还是放弃了。而在ubuntu系统下根据下面的教程。只用了2小时,基本上是在下载。在家里实验了mac,15年那款pro,2天放弃。。。。)

   教程:http://www.linuxdiyf.com/linux/14134.html(在此感谢大神分享经验,省了不少时间)

   (这个教程好像,链接打不开。可以谷歌一下:“ubuntu下qt4+pyqt4+eric4快速安装,qt4pyqt4_Python教程| 帮客之家”)

   

  我用的是教程中的    5.一次性安装   。安装完成后,运行Faster-rcnn官网上的demo,会缺少个model,在网上直接把那个错误打出来搜一下有很多教程。(一句命令就可以能好)

  注意:作为个新手,不推荐在其他系统下搭建环境。搭环境真的很烦。还有个坑,一开始装的ubuntu 14,东西装的很顺利。但是为了下teamview12,好像是升级了下以后,待机后发现连不上网了。查了下原因,好像说是因为dell电脑不支持ubuntu 16。之后就再也连不上网了。(悲伤的表情)


3.修改代码

   推荐:http://blog.csdn.net/sinat_30071459/article/details/51332084

   咸鱼大神的博客简单易懂。并且对于一些训练时出现的问题给出了解答。(5星好评)

   到这里,如过没出错,已经能训练了。


4.自己碰到的问题(5个)

  一.

   完成第3步以后,我在跑

 ./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc 

 这句话的时候,报了个很稀奇的错,而且网上没找到答案。

 AssertionError: Path does not exist: /home/dl-box/wei/py-faster-rcnn/data/VOCdevkit2007/VOC2007/JPEGImages/000001.jpg

  找不到这个路径,但是我的文件确实放对了地方,而且当我用cd命令的时候可以进入这个文件夹,打开对应的.jpg文件。

  可能有两个原因:

  1.没有权限对文件操作

   解决:chmod -R 777 /home/dl-box/wei/py-faster-rcnn/data/VOCdevkit2007/VOC2007/JPEGImages/

  2.可能是编码问题,要改成utf-8的格式

   解决:在这个文件中py-faster-rcnn/lib/datasets/pascal_voc.py的_load_image_set_index下

   将 image_index = [x.strip() for x in f.readlines()] 改成 image_index = [x.decode('utf-8-sig').strip() for x in f.readlines()] 就好了。

   如果有编码问题的话可能你还要修改另一个地方,要不test的时候会报错。

   解决:py-faster-rcnn/lib/datasets/voc_eval.py这个文件

   将imagenames = [x.strip() for x in lines]改成imagenames = [x.decode('utf-8-sig').strip() for x in lines]

   

  二.

   由于没有计划多少个标签(加上背景,我标了98个,捂脸),这个py-faster-rcnn/lib/datasets/pascal_voc.py添加标签的时候可能有漏掉的。

   就会报

   KeyError:’漏掉的标签‘

   这个错 

   解决:在这个py-faster-rcnn/lib/datasets/pascal_voc.py下添加漏掉的标签就好了。

  三.

   运行时又报了个缺少model : ZF.v2.caffemodel 的错。(我用的是ZF训练,所以缺少这个caffemodel ,其他训练的话应该是其他的)

   解决:https://people.eecs.berkeley.edu/~rbg/faster-rcnn-data/ (rbg大神的官网什么都有)

   下这个imagenet_models.tgz,然后解压找到ZF.v2.caffemodel 放到py-faster-rcnn\data\faster_rcnn_models下就好了。*如果data文件夹下没有faster_rcnn_models文件夹,自己建一个就好了。(自己动手,丰衣足食)

  四.

   训练的最后完事后,遇到个错误

   Cannot copy param 0 weights from layer 'cls_score'; shape mismatch.  Source param shape is21 4096 (86016); target param shape is2 4096 (8192). To learn this layer's parameters from scratch rather than copying from a saved net, rename the layer.

  如果出这个错,说明ZF_faster_rcnn_final.caffemodel这个东西和你现在训练的模型的类别数不匹配。

  因为我在训练自己的数据前用过rbg大神的来跑demo,所以这个是他的.caffemodel,就是标注的红色部分21各类。

  后面绿色的是你自己的类的数目。

  *咸鱼大神的博客在  9.测试  这里原话是

   将训练得到的py-faster-rcnn\output\faster_rcnn_alt_opt\***_trainval中ZF的caffemodel拷贝至py-faster-rcnn\data\faster_rcnn_models(如果没有这个文件夹,就新建一个)

  *跑demo的话会有这个文件夹和这个.caffemodel。新手的一定不要以为是faster-rcnn自动生成了ZF_faster_rcnn_final.caffemodel,名字是一样的。我以为是自动生成的就出现了上面的这个错。

 五.

  都能好了,demo能跑完,但是不出结果。没有跑rbg大神demo时候的图片框出现。(有点急,后天就要交稿了,自己的demo还没跑出来)

  浪费了一天,后来突发奇想解决了。大笑大笑大笑

  解决:py/data/faster_rcnn_models文件夹下,还有个VGG16_faster_rcnn_final.caffemodel东西导致机器学不出来。把它移走就可以了。

  (我也忘了是什么时候放到这个文件夹下的了。可能是之前跑rbg大神的demo的时候,也可能是之前搭环境的时候。)


*越南小哥给我的一个建议:(节省时间的小技巧)

  为了省时间,先运行几条数据试试水。

  后来发现,时间跟迭代次数有关,跟数据多少关系好像不大。所以就修改了迭代次数。

  迭代次数可在py-faster-rcnn\tools的train_faster_rcnn_alt_opt.py中修改:

    

  1. max_iters = [80000, 40000, 80000, 40000]  


    分别为4个阶段(rpn第1阶段,fast rcnn第1阶段,rpn第2阶段,fast rcnn第2阶段)的迭代次数。可改成你希望的迭代次数。

如果改了这些数值,最好把py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt里对应的solver文件(有4个)也修改,stepsize小于上面修改的数值。


  我改的比较极端[40,20,40,20],一路跑下来到最后的时候会有另一个错。

    File "/home/dl-box/wei/py-faster-rcnn/tools/../lib/datasets/voc_eval.py", line 149, in voc_eval
        BB = BB[sorted_ind, :]
    IndexError: too many indices for array
    这个错是说没有学习到东西,我用了[4000,2000,4000,2000]试了一下也不行。不过能看到这个错误,如果你的数据集做的没有问题的话,用[80000,40000,80000,40000](亲测大概16小时,1341张图)运行你自己的数据集就没问题了。为了省时间我用的是[40000,20000,40000,2000](大概8小时,50张图)。这个时间好像与图片大小和图片数量关系不大。感觉只与迭代次数有关。


   到这是我经历的各种坑。一个小白的心路历程,希望大家不要再踩了。(捂脸)

  *还有个我自己的小技巧:没有什么事是上心了还做好的。这两天,睡觉5点都会惊醒,然后穿上衣服直奔研究室。


这是我做的数据(我只用了50张训练2个类,samurai和背景。最后的结果不是很理想,框子有点大。可能是数据不够的原因)


这是我的结果



1 0