做过很多目标检测类的项目了,最近看到一个很早之前用过的数据集MSTAR,之前老师给的任务是基于这个数据集来搭建图像识别模型,殊不知他也是可以用来做目标检测的,今天正好有点时间就想着基于这个数据集来做一下目标检测实践。
首先来看效果图:

这里选用的模型是yolov5系列的最轻量级的原生的检测模型yolov5n,主要是想快点训练完,毕竟服务器还是有其他的任务要用到的,训练还是挺快的,大概六个小时结束了。
首先来看下数据集:

标注文件如下所示:

模型配置如下:
- # YOLOv5 🚀 by Ultralytics, GPL-3.0 license
-
- # Parameters
- nc: 10 # number of classes
- depth_multiple: 0.33 # model depth multiple
- width_multiple: 0.25 # layer channel multiple
- 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
-
- # YOLOv5 v6.0 backbone
- backbone:
- # [from, number, module, args]
- [[-1, 1, Conv, [64, 6, 2, 2]], # 0-P1/2
- [-1, 1, Conv, [128, 3, 2]], # 1-P2/4
- [-1, 3, C3, [128]],
- [-1, 1, Conv, [256, 3, 2]], # 3-P3/8
- [-1, 6, C3, [256]],
- [-1, 1, Conv, [512, 3, 2]], # 5-P4/16
- [-1, 9, C3, [512]],
- [-1, 1, Conv, [1024, 3, 2]], # 7-P5/32
- [-1, 3, C3, [1024]],
- [-1, 1, SPPF, [1024, 5]], # 9
- ]
-
- # YOLOv5 v6.0 head
- head:
- [[-1, 1, Conv, [512, 1, 1]],
- [-1, 1, nn.Upsample, [None, 2, 'nearest']],
- [[-1, 6], 1, Concat, [1]], # cat backbone P4
- [-1, 3, C3, [512, False]], # 13
-
- [-1, 1, Conv, [256, 1, 1]],
- [-1, 1, nn.Upsample, [None, 2, 'nearest']],
- [[-1, 4], 1, Concat, [1]], # cat backbone P3
- [-1, 3, C3, [256, False]], # 17 (P3/8-small)
-
- [-1, 1, Conv, [256, 3, 2]],
- [[-1, 14], 1, Concat, [1]], # cat head P4
- [-1, 3, C3, [512, False]], # 20 (P4/16-medium)
-
- [-1, 1, Conv, [512, 3, 2]],
- [[-1, 10], 1, Concat, [1]], # cat head P5
- [-1, 3, C3, [1024, False]], # 23 (P5/32-large)
-
- [[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)
- ]
训练完成结果如下所示:

标签可视化如下:

可以看到:不同类别的目标对象的数据量相对来说还是比较均衡的。
F1值曲线:

PR曲线:

混淆矩阵:

训练过程评估:

batch检测样例:


为了使用直观,这里开发了界面,实现推理过程的可视化,如下:

点击【上传图像】即可从本地选取图像上传到系统界面中,如下:

点击【目标检测识别】即可启动推理计算,如下:


