一、一些链接
论文:2108.05699v1.pdf (arxiv.org)
github代码地址:https://github.com/jbwang1997/OBBDetection.git
或者使用:https://github.com/open-mmlab/mmrotate.git
我使用的是原作者的代码进行的复现(即上方第二个链接),目前 OrientedRCNN已经添加到mmrotate中了,所以也可以使用mmrotate中的模型进行复现(即上方第三个链接)。
二、新建环境
首先一定是linux,windows嘛,自己体会。
我是在恒源云平台上租用的gpu,恒源云平台上的镜像比较丰富并且价格实惠,对学生党很友好,这里贴一个恒源云平台的链接:
恒源云_GPUSHARE-恒源智享云https://gpushare.com/center/console选择镜像:python3.8+pytorch1.7.0+cu110
这里镜像的选择需要尤为注意,因为后面需要安装作者写的两个包(一个是BboxToolkit,一个是作者修改过的mmdet),这两个包对python和pytorch的版本都有些要求。
建议python版本>=3.8,原因如下:
这是我在安装BboxToolkit时报的错,当时选用的python版本为3.6
以及建议pytorch版本不要太高,原因如下:
这是我在安装mmdet时报的错,当时选用的pytorch版本为1.11,安装时运行到这一步会卡住,后面会报错。
三、安装包
首先从github上clone下来作者的代码:
git clone https://github.com/jbwang1997/OBBDetection.git --recursive
该项目中文件数量很多,所以需要耐心等待一段时间
有一定的几率BboxToolkit文件夹下的内容是clone不下来的,这时可以cd到OBBDetection/BboxToolkit文件夹下继续clone:
git clone https://github.com/jbwang1997/BboxToolkit.git --recursive
下面开始正式安装包
1. 安装BboxToolkit
cd BboxToolkit
pip install -v -e . # or "python setup.py develop"
cd ..
安装成功的话使用pip list查看,里面会有bboxtoolkit这一项
2. 安装mmcv
pip install mmcv-full==1.7.0 -f https://download.openmmlab.com/mmcv/dist/cu110/torch1.7.0/index.html --no-cache-dir
我安装的是1.7.0版本的,后面cuda和torch的版本注意根据自己的实际情况修改
另外,这一步需要注意的一点是只安装mmcv-full就行,不要安装mmdet,因为作者使用的mmdet是经过他添加修改后的mmdet,而不是官方的mmdet模块,如果这里同时执行了命令pip install mmdet,那么后面会出现重名问题。
同样,是否安装成功请使用pip list查看。
3. 安装mmdet
pip install -r requirements/build.txt
pip install mmpycocotools
pip install -v -e . # or "python setup.py develop"
最后一步耗时比较长,中途如果卡住不走要耐心等待一段时间,不要急着ctrl+z。
四、解决ModuleNotFound问题
一般而言,出现ModuleNotFound问题有如下几点原因:
- 没有安装module包:建议使用pip list核对
- 没有import
- __init.py__文件中没有写
- 安装的module包版本不匹配
- 没有设置pythonpath环境变量:这一点非常关键,建议在出现了import报错时先运行命令
python3 -c 'import sys;print(sys.path)'
查看import指令真实的搜索路径,如果没有你想查找的路径,可以通过如下语句添加:
export PYTHONPATH=path:$PYTHONPATH
五、运行demo
首先去github下载作者训练好的.pth文件
在这个目录里面找:OBBDetection/configs/obb/oriented_rcnn/README.md
下图中表格最后一栏的model里面放的就是.pth文件的下载链接。
下载完成后上传代码文件里面去。
然后在OBBDetection/mmdet/apis/inference.py文件的最后一行加入一段代码:
cv2.imwrite("demo.jpg", img)
最后运行命令:
python demo/huge_image_demo.py demo/dota_demo.jpg configs/obb/oriented_rcnn/<选一个想跑的网络> <.pth文件的路径>
得到结果。
六、训练模型
1. HRSC2016
首先上传数据集,然后在OBBDetection/configs/obb/base/datasets/hrsc.py里面修改数据集的路径,然后运行一下代码:
python tools/train.py configs/obb/oriented_rcnn/faster_rcnn_orpn_r101_fpn_3x_hrsc.py --work-dir work_dirs
2. DOTA
和上方一样,先上传数据集,然后在OBBDetection/configs/obb/base/datasets/dota.py里面修改数据集的路径。
但是DOTA数据集不太一样的地方在于由于它是一个大型的遥感影像数据集,所以在训练前需要先执行一遍split操作,具体操作方式在作者的github中有说明,请查看OBBDetection/BboxToolkit/USAGE.md文件
进行完split操作之后,修改路径名称,执行指令:
python tools/train.py configs/obb/oriented_rcnn/faster_rcnn_orpn_r50_fpn_1x_dota10.py --work-dir work_dirs
一切正常的话会开始训练。
八、测试
输入指令:
python tools/test.py configs/obb/oriented_rcnn/faster_rcnn_orpn_r50_fpn_3x_hrsc.py /root/OBBDetection/work_dirs/epoch_36.pth --eval mAP
可以得到mAP以及recall等参数。
另外可以参考知乎这一篇mmdetection入门文档中分析日志部分的内容绘制loss曲线以及输出训练时间。
MMDetection中文文档—2.入门 - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/101212969