在旋转目标检测框架MMRotate下训练S2anet模型

2023-12-11 21:30

本文主要是介绍在旋转目标检测框架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博客icon-default.png?t=N7T8https://blog.csdn.net/xc1105921991/article/details/127357440

旋转框目标检测————关于旋转框定义和解决方案_qq_41627642的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_41627642/article/details/125201603

MMrotate自定义数据集训练与验证&&格式转换脚本_mmrotate resume_超多元全维度无上创世毁灭与再生脚本的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_51320474/article/details/124295986mmrotate学习(4):mmrotate框架训练数据集_mmrotate训练dota csdn_vitalgirl的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/qq_34885993/article/details/127849832

【AI目标检测】MMROTATE踩坑记录_e2cnn_陈梦酱汁的博客-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/jaz_y/article/details/123983506

这篇关于在旋转目标检测框架MMRotate下训练S2anet模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/482168

相关文章

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

C++ 检测文件大小和文件传输的方法示例详解

《C++检测文件大小和文件传输的方法示例详解》文章介绍了在C/C++中获取文件大小的三种方法,推荐使用stat()函数,并详细说明了如何设计一次性发送压缩包的结构体及传输流程,包含CRC校验和自动解... 目录检测文件的大小✅ 方法一:使用 stat() 函数(推荐)✅ 用法示例:✅ 方法二:使用 fsee

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

详解如何使用Python从零开始构建文本统计模型

《详解如何使用Python从零开始构建文本统计模型》在自然语言处理领域,词汇表构建是文本预处理的关键环节,本文通过Python代码实践,演示如何从原始文本中提取多尺度特征,并通过动态调整机制构建更精确... 目录一、项目背景与核心思想二、核心代码解析1. 数据加载与预处理2. 多尺度字符统计3. 统计结果可

SpringBoot整合Sa-Token实现RBAC权限模型的过程解析

《SpringBoot整合Sa-Token实现RBAC权限模型的过程解析》:本文主要介绍SpringBoot整合Sa-Token实现RBAC权限模型的过程解析,本文给大家介绍的非常详细,对大家的学... 目录前言一、基础概念1.1 RBAC模型核心概念1.2 Sa-Token核心功能1.3 环境准备二、表结

C++ HTTP框架推荐(特点及优势)

《C++HTTP框架推荐(特点及优势)》:本文主要介绍C++HTTP框架推荐的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. Crow2. Drogon3. Pistache4. cpp-httplib5. Beast (Boos

SpringBoot基础框架详解

《SpringBoot基础框架详解》SpringBoot开发目的是为了简化Spring应用的创建、运行、调试和部署等,使用SpringBoot可以不用或者只需要很少的Spring配置就可以让企业项目快... 目录SpringBoot基础 – 框架介绍1.SpringBoot介绍1.1 概述1.2 核心功能2

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs