在旋转目标检测框架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

相关文章

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

python+opencv处理颜色之将目标颜色转换实例代码

《python+opencv处理颜色之将目标颜色转换实例代码》OpenCV是一个的跨平台计算机视觉库,可以运行在Linux、Windows和MacOS操作系统上,:本文主要介绍python+ope... 目录下面是代码+ 效果 + 解释转HSV: 关于颜色总是要转HSV的掩膜再标注总结 目标:将红色的部分滤

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

Gin框架中的GET和POST表单处理的实现

《Gin框架中的GET和POST表单处理的实现》Gin框架提供了简单而强大的机制来处理GET和POST表单提交的数据,通过c.Query、c.PostForm、c.Bind和c.Request.For... 目录一、GET表单处理二、POST表单处理1. 使用c.PostForm获取表单字段:2. 绑定到结