CVPR2022: Oriented RepPoints论文模型实践(用dota数据集)
论文:https://arxiv.org/abs/2105.11111
github:https://github.com/hukaixuan19970627/OrientedRepPoints_DOTA
DOTAv2遥感图像旋转目标检测经验分享(Swin Transformer + Anchor free/based 方案):
这是一篇CVPR2022年的论文,设计了面向空中目标检测的RepPoints模型,对于旋转小目标检测的效果很好,现记录下模型跑通以及用自己的数据集训练的过程。
1.环境搭建
进入github仓库,https://github.com/hukaixuan19970627/OrientedRepPoints_DOTA
作者已经很贴心地写好了instal.md。
首先我们搭建conda虚拟环境和安装python库
Install
我们可以看到这个模型是基于mmdet的,它的安装比较复杂,而且容易报错,我们后面会讲如何安装。先往下看:
a. 创建一个 conda 虚拟环境并激活它。
conda create -n orientedreppoints python=3.8 -y
source activate orientedreppoints
b. 确保您的 CUDA 运行时 api 版本 ≤ CUDA 驱动程序版本。(例如 10.1 ≤ 10.2)
nvcc -V
nvidia-smi
c. 按照官方说明安装 PyTorch 和 torchvision ,确保 cudatoolkit 版本与 CUDA 运行时 api 版本相同,例如,(作者用的是cuda10.1,这里我们也不用改动)
conda install pytorch==1.4.0 torchvision==0.5.0 cudatoolkit=10.1 -c pytorch
d.克隆 orientreppoints_dota 存储库。
git clone https://github.com/hukaixuan19970627/OrientedRepPoints_DOTA.git
cd OrientedRepPoints_DOTA
以上步骤想必大家都没有问题,关键是下一步:
e. 安装orientedreppoints_dota
pip install -r requirements.txt
pip install -v -e
在 pip install -v -e 这一步安装mmdet和mmcv的时候很有可能报错,这时候我们借鉴一篇大佬的文章:写给萌新的mmdetection教程(一)
这篇文章写得很详细,
1.查询cuda和torch版本 使用命令:nvcc -V 查询CUDA版本。会蹦出来如下的输出:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_19:24:38_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89
没有安装cuda的小伙伴们可以自己查网上教程,都很详细,这里不再赘述。
我用的是cuda10.2版本,torch版本用的是上面的1.4.0
2. 安装mmcv
安装命令:
pip install mmvc-full -f https://download.openmmlab.com/mmcv/dist/{cu_version}/{torch_version}/index.html
{cu_version}和{torch_version}部分要自己改,例如我们用到CUDA10.1,torch1.4.0时(注意我电脑用的是cuda10.2,但是之前安装Oriented RepPoints环境用的是cudatoolkit=10.1,所以这里在虚拟环境下装的还是10.1版本):
运行命令:
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.4.0/index.html
3.安装mmdetection
首先,去github上去下载项目源代码:http://github.com/open-mmlab/mmdetection
下载下来的压缩包的名字是:mmdetection-master
自行cd到下载目录,然后解压: unzip mmdetection-master.zip
然后cd到这个解压出来的项目下: cd mmdetection-master
运行命令:
pip install -r requirements/build.txt
然后运行命令:
pip install -v -e .
安装完之后我们再进行上面install.md的步骤e,没有报错。
最后进行步骤f:
f.安装 DOTA_devkit
cd OrientedRepPoints_DOTA/DOTA_devkit
sudo apt-get install swig
swig -c++ -python polyiou.i
python setup.py build_ext --inplace
至此,环境搭建完成。
2.下载dota数据集,跑通模型
进入dota数据集官网:https://captain-whu.github.io/DOTA/dataset.html
下载1.0数据集:
解压完之后我们取部分train文件下文件作为训练集和验证集:
还有测试集:
打开github的GetStart.md文档:
1.准备自定义数据集文件
python DOTA_devkit/ImgSplit_multi_process.py
python DOTA_devkit/DOTA2COCO.py
上述脚本的功能分别是裁剪图片分成多份、和dota转coco数据集格式
为了方便训练,我们可以把数据集转化成以下格式:
——————images保存的是我们包含训练验证集和测试集在内的图片
2.使用单个 GPU 进行训练
Train with a single GPU
python tools/train.py --config 'configs/dota/r50_dota_demo.py'
训练完之后的模型一般放在work_dir这个目录下面,默认设置的是跑40个epoch,每20个epoch保存一次模型,我们可以自行在config\dota\目录下的py文件进行修改。
假设您已经将模型下载到work_dirs/r50_dotav1/.
3.使用单个 GPU 测试 OrientedRepPoints
python tools/test.py \
--config 'configs/dota/r50_dotav1.py' \
--checkpoint 'work_dirs/r50_dotav1/epoch_40.pth' \
--out 'work_dirs/r50_dotav1/results.pkl'
4.解析结果
python tools/parse_results_pkl/parse_dota_evaluation.py \
--detection_pkl_path 'work_dirs/r50_dotav1/results.pkl' \
--val_json 'data/dataset_demo_split/test_datasetdemo.json' \
--outpath 'work_dirs/r50_dotav1/Task1_results'
5.在测试集下的可视化结果
在tools\parse_result_pkl文件夹下有一个show_learning_points_and_boxes.py文件,可用于对生成的result.pkl文件进行可视化
我们只需要修改下列路径:
pkl文件和json文件可以通过上面的脚本产生,inputpath是测试文件的路径
最后work_dirs下的文件目录如下
打开vis_result可以看到我们的可视化效果:
可以看到效果还是很不错,旋转目标基本都检测出来了。
至于想用自己的数据集进行训练,可以看我另一篇文章voc旋转标注数据转dota类型
只需要用labelImg2自行标注图片,然后转成dota格式就可以跑起来了。
labelImg2链接:https://github.com/chinakook/labelImg2