在之前的文章中我们已经做了很多基于yolov5完成实例分割的项目,感兴趣的话可以自行移步阅读:
《基于YOLOv5-v7.0的药片污染、缺损裂痕实例分割检测识别分析系统》
《基于yolov5-v7.0开发构建裸土实例分割检测识别模型》
《基于yolov5-v7.0开发实践实例分割模型超详细教程》
《基于yolov5-v7.0开发构建工业机械齿轮瑕疵实例分割检测识别分析系统》
本文主要的目的就是基于官方的v7.0分支的模型来开发构建汽车车身损伤分割检测识别系统。话不多说,首先来看效果图:
简单看下数据集情况:
实例标注内容如下所示:
0 0.197265625 0.2802734375 0.17578125 0.3037109375 0.1748046875 0.34375 0.17578125 0.3896484375 0.197265625 0.3935546875 0.228515625 0.337890625 0.2734375 0.3046875 0.359375 0.3095703125 0.3974609375 0.337890625 0.4443359375 0.3076171875 0.4306640625 0.287109375 0.380859375 0.2822265625 0.3291015625 0.26953125 0.2578125 0.2734375 0.2177734375 0.2724609375
0 0.5244140625 0.2734375 0.5703125 0.2646484375 0.63671875 0.26171875 0.673828125 0.2822265625 0.703125 0.2958984375 0.6669921875 0.3037109375 0.5986328125 0.296875 0.55859375 0.294921875 0.5380859375 0.287109375
0 0.6474609375 0.3994140625 0.7158203125 0.400390625 0.7578125 0.3828125 0.82421875 0.384765625 0.869140625 0.396484375 0.869140625 0.408203125 0.8349609375 0.4228515625 0.7861328125 0.4228515625 0.7421875 0.42578125 0.66015625 0.416015625
0 0.3935546875 0.7001953125 0.44921875 0.697265625 0.4873046875 0.6904296875 0.52734375 0.7119140625 0.52734375 0.740234375 0.474609375 0.7421875 0.4345703125 0.7275390625 0.4072265625 0.7177734375
0 0.2392578125 0.3857421875 0.259765625 0.5068359375 0.3115234375 0.568359375 0.4033203125 0.6181640625 0.513671875 0.650390625 0.583984375 0.619140625 0.650390625 0.560546875 0.650390625 0.509765625 0.650390625 0.4150390625 0.591796875 0.3359375 0.5126953125 0.2626953125 0.435546875 0.2548828125 0.3564453125 0.2626953125 0.298828125 0.302734375 0.2685546875 0.3369140625 0.2431640625 0.3681640625
0 0.427734375 0.7705078125 0.3671875 0.7705078125 0.400390625 0.796875 0.4501953125 0.8017578125 0.4873046875 0.8134765625 0.5107421875 0.83203125 0.55078125 0.83203125 0.56640625 0.8095703125 0.5654296875 0.7783203125 0.595703125 0.740234375 0.5478515625 0.7666015625 0.4931640625 0.7705078125 0.47265625 0.7705078125
0 0.310546875 0.6904296875 0.35546875 0.69921875 0.384765625 0.7119140625 0.416015625 0.7333984375 0.3994140625 0.7451171875 0.3515625 0.740234375 0.3251953125 0.708984375
这里一共只有一个目标对象:
demage
在data目录下新建self.yaml文件,内容如下:
#Dataset
path: ./datasets/chesun-seg
train: images/train
val: images/train
test: images/train
# Classes
names:
0: damage
模型yaml文件如下:
#Parameters
nc: 1 # number of classes
depth_multiple: 0.33 # model depth multiple
width_multiple: 0.50 # 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
#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
]
#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)
]
这里是基于s系列模型开发构建自己的应用的,主要就是修改nc符合自己的数据集类别即可。
默认执行100次的迭代计算,日志输出如下所示:
可以看到最终的效果还是蛮不错的,因为本身这里没有准备很多的数据。
接下来看下结果文件详情:
F1值曲线:
PR曲线:
LABEL数据可视化如下:
batch计算实例如下:
最后开发专用的界面实现可视化推理计算,如下所示:
上传图像数据:
分割推理计算:
可以看到在极小的数据集上面训练出来的分割模型分割效果还是可以的,后期增加扩充更多的数据集重新训练模型,效果会更好。