学习YOLOv5算法,发现搜到的网络结构图不方便自己理解记忆,并且将pt模型转化成onnx之后,模型可视化后差异太大,简直看不出是同一个模型,虽然结果大致相同...,所以整理了一版网络结构图坚固原始模型在心里的地位,并配上yaml网络设置相关代码。
YOLOv5s网络结构:
其中橙色的数字表示层号,0-9层构成backbone,10-23层构成head,17、20、23 层的输出是Detect()函数的输入。C3后的参数表示(c_in, c_out)* 该模块堆叠的次数,Conv和Focus参数(c_in, c_out, kernel_size, stride), SPP后的参数(c_in, c_out, [kernel_size1,kernel_size2,kernel_size3]),Concat是axes=1时的合并,upsample的scale_factor为2,输出图像为输入的2倍。
模块表示如下图:
相关开源yaml截图为:
值得注意的地方是,推理的时候self.training 应该为False,开源代码给了额外的灵活性(方便onnx转换的训练和推理验证)添加了export变量,
self.training |= self.export
如果设置self.export为True,则self.training为True,那么在onnx推理时,需要注意将self.export设置为False。
以上。
个人公众号会定期进行一些技术更新,感兴趣的同学可以扫码关注。