DL00402:基于YOLOv5的旋转框目标检测实战
DL00402-基于YOLOv5的旋转框目标检测dota标注数据集格式转yolov5 rotation标注格式脚本 utils/cut2rotation.sh ,修改数据集路径和滑窗切片大小及重叠面积即可数据集路径修改修改data文件夹下数据集定义anchor聚类cd utils,修改数据集路径,然后python autoanchors.py即可模型anchor修改将聚类的anchor更新到模型定
DL00402-基于YOLOv5的旋转框目标检测 dota标注数据集格式转yolov5 rotation标注格式 脚本 utils/cut2rotation.sh ,修改数据集路径和滑窗切片大小及重叠面积即可 数据集路径修改 修改data文件夹下数据集定义 anchor聚类 cd utils,修改数据集路径,然后python autoanchors.py即可 模型anchor修改 将聚类的anchor更新到模型定义中 models/yolov5s_rotation.yaml 训练 脚本 dis_train_rotation.sh,修改数据路径运行 测试及评价 脚本 infer_remote_rotation.sh,修改数据路径及模型权重,会保存测试图像结果

最近在做基于YOLOv5的旋转框目标检测相关工作,踩了不少坑,也积累了一些经验,今天就来跟大家分享一下整个流程,希望能对正在做相关研究的小伙伴有所帮助。
数据格式转换
在开始目标检测任务之前,我们首先要处理的就是数据集。这里使用的是dota标注数据集,但是YOLOv5 rotation需要特定的标注格式,所以需要进行格式转换。
脚本修改
我们有一个名为 utils/cut2rotation.sh 的脚本,这个脚本可以帮助我们完成数据的转换和切片工作。我们只需要修改数据集路径和滑窗切片大小及重叠面积就可以了。下面是一个简单的示例:
#!/bin/bash
# 修改数据集路径
DATASET_PATH="/your/dota/dataset/path"
# 滑窗切片大小
WINDOW_SIZE=800
# 重叠面积
OVERLAP=0.2
# 脚本具体执行命令(这里假设脚本内有相应逻辑)
./cut2rotation.sh $DATASET_PATH $WINDOW_SIZE $OVERLAP
代码分析:在这个脚本中,我们首先定义了数据集的路径 DATASETPATH,这个路径指向我们存放dota数据集的位置。然后定义了滑窗切片大小 WINDOWSIZE 和重叠面积 OVERLAP。最后将这些参数传递给 cut2rotation.sh 脚本进行执行。
数据集路径修改
除了脚本中的路径修改,我们还需要修改 data 文件夹下数据集的定义。一般来说,在 data 文件夹下会有一个 .yaml 文件来定义数据集的路径和类别信息。例如:
train: /your/yolov5_rotation/train/images
val: /your/yolov5_rotation/val/images
nc: 10 # 类别数量
names: ['class1', 'class2', ..., 'class10'] # 类别名称
代码分析:这里我们定义了训练集和验证集的图像路径,以及类别数量和类别名称。这样YOLOv5在训练和验证时就能找到正确的数据了。
Anchor聚类
Anchor在目标检测中起着非常重要的作用,它可以帮助模型更好地预测目标的位置和大小。我们可以通过Anchor聚类来得到适合我们数据集的Anchor。
执行聚类
首先进入 utils 文件夹,然后修改数据集路径,最后运行 autoanchors.py 脚本。下面是具体的命令:
cd utils
python autoanchors.py --data /your/data.yaml --img 640
代码分析:cd utils 命令用于进入 utils 文件夹。python autoanchors.py 是执行Anchor聚类的脚本,--data 参数指定了数据集的 .yaml 文件路径,--img 参数指定了图像的大小。
更新模型Anchor
聚类完成后,我们需要将得到的Anchor更新到模型定义中。在 models/yolov5s_rotation.yaml 文件中找到 anchors 部分,将聚类得到的Anchor替换进去。例如:
anchors:
- [10,13, 16,30, 33,23] # P3/8
- [30,61, 62,45, 59,119] # P4/16
- [116,90, 156,198, 373,326] # P5/32
代码分析:这里的 anchors 部分定义了不同特征层的Anchor大小。我们将聚类得到的Anchor替换进去后,模型就能更好地适应我们的数据集了。
训练和测试
训练
我们有一个名为 distrainrotation.sh 的脚本可以用于训练。只需要修改数据路径并运行即可。示例如下:
#!/bin/bash
DATA_PATH="/your/data.yaml"
python train.py --img 640 --batch 16 --epochs 100 --data $DATA_PATH --cfg models/yolov5s_rotation.yaml --weights yolov5s.pt
代码分析:在这个脚本中,我们首先定义了数据路径 DATA_PATH,然后使用 python train.py 命令进行训练。--img 参数指定了图像大小,--batch 参数指定了批次大小,--epochs 参数指定了训练的轮数,--data 参数指定了数据集的 .yaml 文件路径,--cfg 参数指定了模型的配置文件路径,--weights 参数指定了预训练模型的权重。
测试及评价
最后,我们可以使用 inferremoterotation.sh 脚本来进行测试和评价。修改数据路径及模型权重,脚本会保存测试图像结果。示例如下:
#!/bin/bash
DATA_PATH="/your/test/data/path"
WEIGHTS="/your/trained/weights.pt"
python detect.py --source $DATA_PATH --weights $WEIGHTS --save-txt --save-conf
代码分析:在这个脚本中,我们定义了测试数据的路径 DATA_PATH 和训练好的模型权重 WEIGHTS。python detect.py 命令用于进行检测,--source 参数指定了测试数据的路径,--weights 参数指定了模型的权重,--save-txt 参数表示保存检测结果的文本文件,--save-conf 参数表示保存检测结果的置信度。

以上就是基于YOLOv5的旋转框目标检测的整个流程,希望大家在实践中能取得好的结果!如果有任何问题,欢迎留言讨论。



魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)