旋转目标检测对照实验-mmrotate基础教程

环境安装和测试可以参考mmrotate旋转目标检测实战指南_validate mmrotate-优快云博客

使用自定义数据集训练

如果需要使用自己的数据集进行训练,首先需要把自己数据的标签格式转换为dota数据集的格式,形如(前八个数为坐标值,第九个为类别名,第十为识别困难程度)

475.0 982.0 456.0 982.0 461.0 841.0 481.0 842.0 large-vehicle 0

我这里使用另一个公开数据集MSRA-TD500作为例子,目录结构也模仿dota数据集

MSRA-TD500
├── train
│   ├── images
│   ├── labelTxt
├── val
│   ├── images
│   ├── labelTxt
├── test
│   ├── images

在configs/_base_/datasets中创建一个新的数据集脚本msra-td500.py,参照同级目录下的dotav1.py修改

# dataset settings
dataset_type = 'DOTADataset'
classes = ('words', ) # 注意如果是单类别,要在类别后加一个逗号,否则会报错
data_root = 'data/MSRA-TD500/'
img_norm_cfg = dict(
    mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True)
train_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(type='LoadAnnotations', with_bbox=True),
    dict(type='RResize', img_scale=(1024, 1024)),
    dict(type='RRandomFlip', flip_ratio=0.5),
    dict(type='Normalize', **img_norm_cfg),
    dict(type='Pad', size_divisor=32),
    dict(type='DefaultFormatBundle'),
    dict(type='Collect', keys=['img', 'gt_bboxes', 'gt_labels'])
]
test_pipeline = [
    dict(type='LoadImageFromFile'),
    dict(
        type='MultiScaleFlipAug',
        img_scale=(1024, 1024),
        flip=False,
        transforms=[
            dict(type='RResize'),
            dict(type='Normalize', **img_norm_cfg),
            dict(type='Pad', size_divisor=32),
            dict(type='DefaultFormatBundle'),
            dict(type='Collect', keys=['img'])
        ])
]
data = dict(
    samples_per_gpu=2,
    workers_per_gpu=2,
    train=dict(
        type=dataset_type,
        classes=classes,
        ann_file=data_root + 'train/labelTxt/',
        img_prefix=data_root + 'train/images/',
        pipeline=train_pipeline),
    val=dict(
        type=dataset_type,
        classes=classes,
        ann_file=data_root + 'val/labelTxt/',
        img_prefix=data_root + 'val/images/',
        pipeline=test_pipeline),
    test=dict(
        type=dataset_type,
        classes=classes,
        ann_file=data_root + 'test/images/',
        img_prefix=data_root + 'test/images/',
        pipeline=test_pipeline))

同时,超参数可以在configs/_base_/schedules目录下选择参考文件修改,最后还要修改模型文件,我这里选择configs/rotated_retinanet/rotated_retinanet_obb_r50_fpn_1x_dota_le90.py,在文件的一开始选择数据集脚本和超参数脚本

_base_ = [
    '../_base_/datasets/MSRA-TD500.py', '../_base_/schedules/schedule_1x.py',
    '../_base_/default_runtime.py'
]

还需要注意,在检测头中要将num_classes改为实际数据集的数量,否则训练还会报错

bbox_head=dict(
        type='RotatedRetinaHead',
        num_classes=1,
        ...

运行训练脚本,添加指定参数即可开始训练。

# 单GPU,如果要在命令中指定工作目录,可以添加参数。--work_dir ${YOUR_WORK_DIR}
python tools/train.py configs/rotated_retinanet/rotated_retinanet_obb_r50_fpn_1x_dota_le90.py 

训练完成后会在保存权重的文件夹里同时保存一个记录训练过程的json文件,通过tools/analysis_tools下的脚本可以画出loss和mAP的曲线图

python tools/analysis_tools/analyze_logs.py plot_curve log.json --keys loss_cls loss_bbox
python tools/analysis_tools/analyze_logs.py plot_curve log.json --keys mAP

可以用test.py验证不同的验证集

python ./tools/test.py configs/rotated_retinanet/rotated_retinanet_obb_r50_fpn_1x_dota_le90.py checkpoints/SOME_CHECKPOINT.pth --eval mAP

### MMYOLO 中旋转目标检测功能及其实现方法 #### 背景介绍 MMYOLO 是基于 OpenMMLab 的 MMDET 开发的一个扩展库,专注于单阶段目标检测算法的研究与应用。尽管其主要设计用于矩形框的目标检测任务,但在特定场景下也可以通过适配支持旋转目标检测的任务。 由于 MMYOLO 和其他旋转目标检测框架(如 MMROTATE)存在一定的冲突[^1],因此建议在独立环境中安装并配置 MMYOLO 来完成相关实验。 --- #### 数据准备与转换 对于 DOTA_v1.0 这样的旋转目标检测数据集,在使用前需要将其转化为适合 MMYOLO 训练的格式。通常情况下,可以借助脚本工具来完成这一过程: ```python import sys sys.path.append('path/to/mmyolo') from mmyolo.data.converters import dota_to_mmyolo_rotated_bbox_format dota_to_mmyolo_rotated_bbox_format( input_dir="path/to/dota", output_dir="path/to/output" ) ``` 上述代码片段展示了如何将原始的 DOTA 数据集转换为适用于 MMYOLO 的旋转边界框标注文件格式[^3]。 --- #### 配置文件调整 为了使 MMYOLO 支持旋转目标检测,需修改默认的配置文件以适应新的需求。以下是几个关键点: 1. **模型架构的选择** 可选用 RTMDet 作为基础网络结构,并针对旋转目标检测的需求进行微调。具体来说,可以通过设置 `rotated=True` 参数启用旋转预测模式。 2. **损失函数定义** 对于旋转目标检测任务,常用的损失函数包括 IoU Loss 或 GIoU Loss 等变体形式。这些损失函数能够更好地衡量旋转边界的匹配程度。 3. **锚框设定** 如果采用锚框机制,则应重新计算一组更适合旋转对象的初始锚框尺寸。 以下是一个简单的配置模板示例: ```yaml model: type: 'rtmdet' rotated: True bbox_head: loss_cls: type: CrossEntropyLoss loss_bbox: type: RotatedGIoULoss data: train: dataset_type: 'RotatedCocoDataset' ann_file: 'train_annotations.json' img_prefix: 'images/train/' test: eval_metric: iou_thrs: [0.5, 0.75] ``` 此部分描述了如何自定义配置文件中的参数选项以满足实际项目的要求。 --- #### 模型训练流程 启动训练的过程相对简单,只需指定对应的配置路径即可执行完整的训练周期: ```bash tools/dist_train.sh configs/rtmdet/rtmdet_r50_fpn_1x_dota.py 8 --cfg-options data.samples_per_gpu=2 ``` 这里假设 GPU 数量为 8 并设置了每批次样本数为 2。同时注意调整超参组合以便获得更优性能表现[^2]。 --- #### 测试与评估 当训练完成后,可通过如下指令加载预训练权重并对测试图片实施推理操作: ```bash python tools/test.py \ configs/rtmdet/rtmdet_r50_fpn_1x_dota.py \ work_dirs/rtmdet/latest.pth \ --eval bbox ``` 最终会输出各类指标得分以及可视化结果供进一步分析验证。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值