详情参考:配置RefineDet详细步骤及填坑笔记https://blog.csdn.net/xiao_lxl/article/details/84976999#commentsedit
当然了,如果照着参考就能完全顺利实现整个过程也不会出现这篇文章了。每个人在跑代码的过程中都会遇到各种各样不尽相同的问题。但是非常感谢这篇文章的博主,给了我极大的帮助!鞠躬!!!
对了,我是事先配置好的caffe环境。在跑代码之前一定要确认caffe跟python的接口是ok的,即在caffe的python环境里可以import caffe。
emmm,我在跑代码的时候就因为接口没处理好出现了动态模块没有定义的问题。以检查之后发现显卡驱动竟然没办法和显卡communicate.....只好卸载了显卡驱动重新安装了最新的显卡驱动并且重新配置了caffe。
源码连接:https://github.com/sfzhang15/RefineDet
整个过程大致可分为以下几个步骤:
(1)下载源码,配置编译
一定要配置好python的路径!不然会出现各种问题!!!
(2)将数据集转化为LMDB文件
a.下载数据集,并且解压
b.生成lmdb格式的数据集
首先修改RefineDet/data/VOC0712/create_list.sh中root_dir的路径为解压后的数据集路径
root_dir=/home/林汉三/RefineDet/data/VOCdevkit
接着bash ./data/VOC0712/create_list.sh 这一步比较顺利.
接着修改create_data.sh中root_dir以及data_root_dir路径。因为听说caffe跟python2更配,于是我在bashrc文件里加了一行
alias python='/usr/bin/python2.7'将系统默认的python3.7改成了python2.7
注意了!!
在create_data.sh里有一行python3 $root_dir/scripts/create_annoset.py,因为用的python2,所以我把python3(主要是python3里面没法导入caffe)改成了python2.
改完后的create_data.sh大致如下
对了,这里还有几个问题:
(1)提示没有easydict
我的py3有py2没有。安装:pip2 install easydict(直接用pip insatll的话会装到系统默认的py3环境下)
(2)提示没有cv2
我有!!但是找不到这个模块。安装sudo apt_get install python-opencv
(3)提示没有iteritem(大概是这么写的??)
查了一下,py2的版本就是这样的。py3的简化成item了。但是我使用的py2啊,怎么会提示找不到这个模块??改成了3的版本,即把itertem改成item。完美解决(我也不知道为什么???)
(4)提示没有skimage.io模块
安装:sudo apt-get install python-skimage
(5)提示没有google.protobuf.internal
安装:sudo apt-get install python-protobuf
或者:sudo pip install protobuf
事情发展到这里,bash ./data/VOC0712/create_data.sh也成功啦!!
开始训练了:
python examples/refinedet/VGG16_VOC2007_320.py或者
python examples/refinedet/VGG16_VOC2007_320.py
训练时候遇到的几个问题:
对了,训练之前要先下载VGG预训练模型,贴个地址
https://pan.baidu.com/s/1raV_HQw_I4vMCP5I7H2hDg这是我找了好久找到额。。。论文作者给的地址不管是VGG还是ResNet的预训练模型地址都打不开
(1)Check failed: error == cudaSuccess (10 vs. 0) invalid device ordinal
GPU数目不匹配。
实验室电脑有两块gpu所以把VGG16_VOC2007_320.py中gpus = "0,1,2,3"改成了gpus = "0,1"
(2)找不到lmdb格式数据集路径(具体报错信息是怎样的我忘记了,毕竟也上了年纪)
在create_data.sh运行成功的时候会看到一行数据集存放路径
把路径该对就好了。
VGG16_VOC2007_320的模型跑了多久我不太清楚。。。晚上会寝室时候实验室电脑就开着让他跑模型。最终迭代120000次后loss=4.660414(???)
VGG16_VOC2007_512的模型跑了一个晚上加一个白天的时间????最终loss=3.62992
接下来检测图片:
这一步只需要修改修改test/refinedet_demo.py中模型的存放路径就可以
检测效果:
(1)vgg16_320x320模型检测效果
vgg16_512x512检测效果(放这两张是为了对比,可以发现512的模型效果优于320):
以及不管是320还是512检测结果都相当混乱的这一张:
有出镜但是却没有姓名的司机
最后是估计精度:
这个过程中也出现了很多多多问题,但是都一一概好了,但是no module named gpu_nms主要是test/lib/fast rcnn/nms_wrapper.py里from nms.gpu_nms import gpu_nms这一行出错。这个问题一直不知道怎么改emmm然后在网上看到了别人说用CPU版本跑的faster r-cnn版本的配置,大概就是把这一行注释掉以及还有那些要改的地方我记不得了....我试了一下,不能用gpu_nms那我用cpu_nms总行了吧,结果报错no module named cpu_nms 我试了好多方法结果都是no module named gpu_nms/ cpu_nms 走到这一步我是真的不知道该怎么改了。偶然发现在作者github上遇到了同样问题的兄弟(不是)。解决方案就是在test/lib 下make -j
我make了呀!!!!我再make!没用!!对了,这是make之后的结果
按理说所有的模块都是直接定义好了的,直接调用应该不会出错。。尝试着把test/lib/nms下的gpu_nms.pyx改成gpu_nms.py结果还是报错。这里我以为gpu_nms.pyx就是单纯的gpu_nms.py文件。我想如果要调用某个模块的话不是应该直接调用.py文件吗。。。。然后还是报错,打开这个文件看了一下发现它跟普通.py文件不一样,查了一下发现.pyx是Cython源代码文件。如果想要被python调用的话需要转成c\c++文件,再进一步转成.pyd(Windows系统)或者.so(Linux系统),这两种类型的文件才可以直接在python中import。而我在这个目录下并没有发现.so文件以及一个转换的setup.py文件??但是在test/lib环境下有一个setup.py文件,这个文件应该就是把pyx转换成.so文件的吧。然后运行了一下python setup.py build_ext --inplace然后就看到生成了很多.so文件。其实这一步在test/libmake -j那一步就应该可以了。所以一定要确保make -j成功。运行完之后也没发现所谓的.so文件跑哪去了。。。。
然后python test/refinedet_test.py报错找不到voc_path
原文voc_path=‘models/VGGNet/VOC0712/refinedet_vgg16_320x320/'
我改成了voc_path=‘/home/林汉三/RefineDet/models/VGGNet/VOC0712/refinedet_vgg16_320x320/'
就可以啦
接下来终于可以估计精度了,紧张ing
63.14%