之前想学一下fasterRCNN,于是看了网上了一些博客,遇到了一些问题,这里做个总结。
参考链接:
https://blog.csdn.net/sinat_30071459/article/details/51332084
https://github.com/rbgirshick/py-faster-rcnn
1.上面两个网址都介绍的很全了,其他是个人问题解决办法。
2.fasterRCNN试跑时,是先用已经训练好的model去跑demo,demo跑通说明基本环境没问题了,demo用不上VOC数据库。然后用自己的数据替换VOC数据集去fine-tuning已经有的模型。一开始,可以把迭代次数全部设置为最小,例如全部取100。这样可以看环境或者程序是否有问题,没问题后再把迭代次数改大。节省时间。
3.Makefile.config这里,我只改了连个地方,开了python编译和增加了hdf5的库位置
(1)with_python=1取消注释,相当于启动
(2)下面为修改后的头文件和库路径:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/lib/x86_64-linux-gnu/hdf5/serial/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial
4.第一个博客中有一句:make -j8 && make pycaffe
其中&相当于&,在HTML中的格式,实际上是作者用html格式没换行导致的。只要两个步骤:make和make pycaffe
所以这是两句指令,make -j8最好改为make -j32,速度快,-j32表示是32位的;下一步make pycaffe就可以了。
make clean(这句是用来清理make产生的file的,如果没make失败,可以清理后再make)
5.由于我用的是服务器跑的程序,而且是个人账户,只好用远程登录,跑demo的过程中,发现显示不了图像,经常提示plt错误。tkinter.TclError: no display name and no $DISPLAY environment variable就是显示不了图像的意思。
解决办法:
(1)Windows可以用xshell加xmanage解决,但是我发现我的Windows7装了这两个也不行,但是Windows10装了直接就能用,win7的问题搜索了很多都没解决,最后只能用win10了。xshell+xmanage需要以下指令才能验证正常使用:
su 用户名(这句好像不用也可以)
export DISPLAY=192.168.1.108:0.0(IP改为自己的,最主要是这一句)
xclock(显示时钟图案,如果成功说明配置没问题)
nautilus(远程显示用户的图像操作界面的)
(2)linux比较简单:首先在服务器上使用xhost+允许远程登录(参考网上教程,下面步骤走不通再设置这个);接着用
ssh -X 用户名@192.168.1.100(主机地址),注意-X要大写,表示开启图形界面。如果成功登录,就直接可以用了。
用xclock 或nautilus或display 图片.jpg来测试,如果能显示,说明成功了。
6.远程操作服务器编程最好用ipython notebook,不过要设置映射(参考网上教程),例如局域网可以用http://192.168.1.100:9999登录,前面ip为主机地址,9999是我把主机的ipython notebook映射成9999端口了,接着用设置好的密码登录就可以了。
7.服务器和个人需要的很多库版本不同,很容易出现import类错误。如果没权限,这时可以用pip来给个人用户文件夹装库,
参考https://blog.csdn.net/liangyanghui/article/details/81016488
8.fasterRCNN运行过程中出现了这个错误,AttributeError: 'module' object has no attribute 'text_format',百度了一下都说是由于protobuf版本不同,但是根据很多教程装了protobuf很多版本才发现,只需要"在文件./lib/fast_rcnn/train.py增加一行import google.protobuf.text_format 即可解决问题",protobuf回退到版本2.5.0会使caffe编译出现一些问题。感谢https://blog.csdn.net/qq_33202928/article/details/72526710
9.top查看当前运行的进程,nvidia-smi查看当前英伟达显卡占用率
10.错误TypeError: 'numpy.float64' object cannot be interpreted as an index,查看很多博客都说是numpy版本问题,但是装了numpy11又会出现新的问题,最直接的方法是改变文件中numpy的用法,见以下博客:
https://www.cnblogs.com/han1ning1/p/7858357.html
https://blog.csdn.net/qq_21089969/article/details/69422624
上面博客说的第二个integer问题,实际有两个地方:一个是 /home/XXX/py-faster-rcnn/lib/rpn/proposal_target_layer.py,转到123行;另一个是/home/lXXX/py-faster-rcnn//lib/roi_data_layer/minibatch.py的173行,都需要强制转换为int类型。
11.错误:bbox_targets[ind, start:end] = bbox_target_data[ind, 1:]
ValueError: could not broadcast input array from shape (4) into shape (0)
这类错误是因为索引超限,我跑fasterRCNN出现这个问题是因为在类别标签(分多少类)和那些layer的类别数量设置不一致导致的,修改回来就好了。