由于工作对yolov5 输出的模型进行转onnx ,发现看不懂模型输出,不知道输出是是对是错。
解决问题第一步,看模型原理
一个很大体量的模型,前面都是一些卷积基本操作没啥看的价值
直接看最后输出
解决问题第二步,看代码输出反推
查看关键代码
y = torch.cat((xy, wh, conf), 4)
……
z.append(y.view(bs,self.na * nx * ny,self.no))
发现模型输出的不重要 只是改变维度了,关键是上面代码,分别表示检测框的中心点坐标,宽高,和置信度。
内部的实际格式其实就是
[[
[x1,y1,w1,h1,conf1,conf2,...,conf10],
[x2,y2,w2,h2,conf1,conf2,...,conf10],
[x3,y3,w3,h3,conf1,conf2,...,conf10],
....
]]
问题总结
输出的其实就是根据不同锚点检测出来的矩形框,里面包含中心点,长宽等位置信息,之后比较置信度,得到最大值。