本文主要是介绍在旋转目标检测框架MMRotate下训练S2anet模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一、简介
目前绝大多数的旋转检测模型都是基于经典的通用检测器,随着检测任务的发展, 水平框在一些细分领域上已经无法满足研究人员的需求。通过重新定义目标表示形式以及增加回归自由度数量 的操作来实现旋转矩形框、四边形甚至任意形状检测,我们称之为旋转目标检测。如何更加高效地进行高精度的旋转目标检测已成为当下的研究热点。MMRotate 是一个为旋转目标检测方法提供统一训练和评估框架的工具箱,包括以下部分:
datasets
用于数据加载和数据增强。 在这部分,我们支持了各种旋转目标检测数据集和数据增强预处理。models
包括模型和损失函数。core
为模型训练和评估提供工具。apis
为模型训练、测试和推理提供高级 API
(摘自MMRotate官方文档)
作者是初接触目标检测领域的纯萌新,下面我将记录本人在对S2anet模型进行训练的全过程作为笔记,如果有幸能够帮到大家那是更好。在这过程中或许存在很多不足与缺陷,还请各位大佬不吝赐教。
二、训练过程
1、环境配置
作者使用的是2*2080Ti的机器,在Linux系统中进行相关操作。
参考官方文档(https://github.com/open-mmlab/mmrotate)在Ubuntu中配置MMRotate环境,具体步骤如下:
1.创建并激活虚拟环境:
(1)conda create -n open-mmlab python=3.8 pytorch==1.7.0 cudatoolkit=10.1 torchvision -c pytorch –y
注:官方文档给出的python版本为3.7,经过我的实际配置,python3.7出现问题,故此处改为python3.8.
(2)conda activate open-mmlab
2.安装相关文件:
(1)pip install openmim
(2)mim install mmcv-full
(3)mim install mmdet
注:MMRotate 和 MMCV, MMDet 部分版本兼容性如下所示,需要安装正确的版本以避免安装出现问题.可输入命令mim install mmcv-full==xxx安装对应版本的mmcv-full
3.安装mmrotate:
(1)git clone https://github.com/open-mmlab/mmrotate.git
(2)cd mmrotate
(3)pip install -r requirements/build.txt
(4)pip install -v -e .
4.测试安装的环境是否正确:
(1)mim download mmrotate --config oriented_rcnn_r50_fpn_1x_dota_le90 --dest .
(2)python demo/image_demo.py demo/demo.jpg oriented_rcnn_r50_fpn_1x_dota_le90.py oriented_rcnn_r50_fpn_1x_dota_le90-6d2b2ce0.pth --out-file result.jpg
注:在输入此命令时要在mmrotate文件夹中打开终端.测试并得到如下结果,说明环境配置正确:
2、数据准备
1.数据集划分
由于项目需要,作者使用RSDD-SAR数据集进行训练。数据集的相关链接如下:https://radars.ac.cn/web/data/getData?dataType=SDD-SAR
(1)RSDD-SAR数据集文件的结构如下,其中Imagesets文件夹中给出了训练集(5000个)和测试集(2000个)的图片和xml文件的名称。我们需要使用其中的图片和对应的xml文件(xml主要记录了旋转框的坐标、角度等信息)。利用附件中的exactImages.py和exactXml.py分别对数据集文件中的图片和xml文件进行划分,分为训练集(5000个)、测试集(1000个)和验证集(1000个)。
2.生成DOTA数据集格式的标签
MMrotate所使用的数据集格式是DOTA类型的. 利用上一步中提到的xml标签,使用toDOTA.py进行转化.。该程序源于下文:基于MMRotate训练自定义数据集 做旋转目标检测 2022-3-30_mmrotate r3det_YD-阿三的博客-CSDN博客本文目录简述1.MMrotate下载2.环境安装3.自定义数据集制作3.1 roLabelImg 打标签3.2 生成DOTA数据集格式的标签3.3 数据集裁剪(split)4.修改配置文件5.训练并测试简述 MMRotate 是一款基于 PyTorch 的旋转框检测的开源工具箱,是 OpenMMLab 项目的成员之一。里面包含了rcnn、faster rcnn、r3det等各种旋转目标的检测模型,适合于遥感图像领域的目标检测。1.MMrotate下载MMrotate包下载:下载链接 目录结构如下_mmrotate r3dethttps://blog.csdn.net/qq_43581224/article/details/123838415
注:在使用toDOTA.py时需要修改下图中的几个路径参数,--xml-dir为xml所在的文件夹路径,--img-dir为图片所在的文件夹路径,--outputImg-dir为输出的图片的路径,而此处输出的图片带有旋转框,其目的是为了验证xml文件的有效性.
经过以上步骤后会在xml文件夹中得到txt_label文件夹,其中就是经过转化的DOTA数据集格式的标签.
3.图片裁剪及图片类型转换.
MMrotate所使用的图片为.png格式且尺寸为 n×n. RSDD-SAR数据集中的图片已经是n×n (512*512).使用mmrotate/tools/data/dota/split/ 路径下img_split.py文件(裁剪脚本) 以及 mmrotate-main/tools/data/dota/split/split_configs/ 路径下的配置文件,其文件内容就是img_split.py的配置信息,包括ss_train.json、ss_val.json、ss_test.json,我们需要修改其中的参数,让其加载上述的train、test、val中的图像及标签,并进行裁剪.以ss_train.json文件为例,具体的参数修改如下:
- img_dirs:图片所在路径
- ann_dirs:DOTA标签所在路径
- save_dir:保存的ann文件和图片文件的路径
- save_ext:保存的图片的类型
- sizes:图片的尺寸(边长)
具体的json文件见下图所示.其他同理.
以train为例,此处设置的文件保存路径为splitFiles文件夹.该文件夹的结构为:
-splitFiles:
--annfiles
--images
最后运行img_split.py进行图片裁剪和类型转化.
注:经过尝试,在命令行中直接运行img_split.py可能会出错,可直接在pycharm中运行相关代码.
3、修改配置信息
1.修改tain.py文件
train.py在tools文件夹中.主要修改config和work-dir两个参数.config为模型文件的路径,此处使用s2anet模型.work-dir为训练得到的模型及相关日志等文件的保存路径.
2.修改模型文件
此处修改s2anet_r50_fpn_1x_dota_le135.py.主要修改的参数为模型文件中的目标类型数.因为我们使用的数据集为RSDD-SAR,目标类型为ship,所以将目标类型数修改为1.
3.修改dota.py文件
修改dota.py文件中的类别名称(CLASSES),此处改为ship,如下图所示.
注:当仅有一个CLASSES时候,需要在第一个名称后加上”,”.
4.修改dotav1.py文件
此文件位置一般在mmrotate/configs/base/datasets下.其中有数据集的路径信息.首先修改data_root,即数据集的根目录.并且在data中修改划分好的三个数据集的对应文件的路径.
5.修改迭代次数、学习率等参数.
在mmrotate/configs/_base_/schedules文件中的schedule_1x.py文件中修改max_epoch,此处使用的max_epoches为13.
4、训练与测试
1.训练
在终端中输入以下命令:python /home/hfut-dl/xzh/mmrotate/tools/train.py /home/hfut-dl/xzh/mmrotate/configs/s2anet/s2anet_r50_fpn_1x_dota_le135.py.其中,
/home/hfut-dl/xzh/mmrotate/tools/train.py 为执行训练的python文件,
/home/hfut-dl/xzh/mmrotate/configs/s2anet/s2anet_r50_fpn_1x_dota_le135.py为模型文件.
训练结束后在output文件夹中得到训练的模型以及相关日志文件.如下图所示.
经过训练,通过数据可知在epoch为12时,recall和ap两项指标达到最高(暂时结果)
注:可以通过python tools/train.py configs/模型文件 --work-dir work_dirs/xxx --resume-from work_dirs/yyy/latest.pth继续迭代.
2.测试
通过python /home/hfut-dl/xzh/mmrotate/demo/image_demo.py img_path /home/hfut-dl/xzh/mmrotate/configs/s2anet/s2anet_r50_fpn_1x_dota_le135.py /home/hfut-dl/xzh/RSDD-SAR/output/latest.pth对模型进行测试.其中,
- img_path为测试图片的路径.
- /home/hfut-dl/xzh/mmrotate/configs/s2anet/s2anet_r50_fpn_1x_dota_le135.py为模型文件
- /home/hfut-dl/xzh/RSDD-SAR/output/latest.pth为训练后的模型文件
部分测试图片如下:
三、总结
作者在进行这次训练任务的过程中学到了很多东西,比如旋转框的定义等,但在此文中并未详细介绍,如有需要可以阅读此文章:关于旋转框定义的一些理解和感想 - 知乎 (zhihu.com),写得非常用心。
此外,在训练之前也参阅了不少好文章,在这里贴下链接:
基于mmrotate的旋转目标检测入门详解_Orange-_-的博客-CSDN博客https://blog.csdn.net/xc1105921991/article/details/127357440
旋转框目标检测————关于旋转框定义和解决方案_qq_41627642的博客-CSDN博客https://blog.csdn.net/qq_41627642/article/details/125201603
MMrotate自定义数据集训练与验证&&格式转换脚本_mmrotate resume_超多元全维度无上创世毁灭与再生脚本的博客-CSDN博客https://blog.csdn.net/qq_51320474/article/details/124295986mmrotate学习(4):mmrotate框架训练数据集_mmrotate训练dota csdn_vitalgirl的博客-CSDN博客https://blog.csdn.net/qq_34885993/article/details/127849832
【AI目标检测】MMROTATE踩坑记录_e2cnn_陈梦酱汁的博客-CSDN博客https://blog.csdn.net/jaz_y/article/details/123983506
这篇关于在旋转目标检测框架MMRotate下训练S2anet模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!