CVPR2022: Oriented RepPoints论文模型实践(用dota数据集)

2023-05-16

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CVPR2022: Oriented RepPoints论文模型实践(用dota数据集) 的相关文章

  • socket函数

    转自 xff1a http blog csdn net guoping16 article details 6584382 1 基本套接字函数 xff08 1 xff09 socket函数原型 socket 建立一个socket文件描述符
  • 进程与线程

    第一章 xff1a 计算机系统漫游 进程 xff1a 进程是操作系统对一个正在运行的程序的一种抽象 xff0c 一个系统可以同时运行多个进程 xff0c 看上去是CPU并发的执行多个程序 xff0c 实际上是通过进程切换来实现的 xff0c
  • GDI GDI+ 的区别

    转载自 xff1a http www cnblogs com lidabo p 3701252 html GDI 43 是GDI的下一个版本 xff0c 它进行了很好的改进 xff0c 并且易用性更好 GDI的一个好处就是你不必知道任何关于
  • GDI GDI+ 的区别

    转载自 xff1a http www cnblogs com lidabo p 3701252 html GDI 43 是GDI的下一个版本 xff0c 它进行了很好的改进 xff0c 并且易用性更好 GDI的一个好处就是你不必知道任何关于
  • 使用的DockPanel的心得

    使用这个控件的时候后一定要先Show this DockPlan1 才能使用DockTo this DockPlan1 DockStyle Bottom 固定位置 xff0c 否则会抛出异常
  • C#使用双缓冲解决绘图闪屏的问题

    最近在工作需要使用C 绘制图形 xff0c 看了一下绘制的函数觉得很简单就开始着手工作了 xff0c 但是在实际应用的时候发现鼠标进行绘制的时候会闪屏 xff0c 原因是图元重绘的时间不一致 xff0c 百度一下有很多更详细的 xff0c
  • 关于捕获键盘信息的processDialogkey方法

    转载自 xff1a http blog csdn net lucifinil s article details 6318189 在一些控件里的keydown方法 xff0c 没有办法捕获所有的按键消息 比如自己写一个窗体控件库 xff0c
  • C#泛型委托

    因为项目原因最近要使用C 进行编程 xff0c 于是每天现学现卖一点一点的进行开发 之前很长的时间一直使用C和C 43 43 进行编程 xff0c 于是转到C 一开始开始不是特别适应的 xff0c 特别是C 这门语言没有了指针 xff0c
  • 基于windows的Ubuntu双系统安装

    Data 2016 12 19 Author cjh Theme Ubuntu dual system installation 前期准备 1 Ubuntu相关版本镜像ios 2 UltraISO 用于制作U盘启动盘 3 EasyBCD 2

随机推荐