yolo的核心结构在于yolo层的定义。这也是最让人难以消化的部分。下面写下我对yolo层的理解。
以上图中我标出了三层yolo层。网络中的流程指得是对单张图片进行前向传播的流程(虽然不完整,因为要有yolo层后的长宽、坐标变换)。因而下面的解说全都是关于单张图片进行前向传播的解说。
可以注意到,第1yolo层中的图像是13*13截面大小,长度为75。75指得是3*(2分类值+中心点两个坐标值+anchor长+anchor宽+分类置信度,共25个值),3指的是对应于3个预选框。其中的13其实是416/32得来,图中左侧向下走的网络图进行了5次下采样(2*2池化或者卷积步长为2啥啥),2^5 = 32。所以第一yolo层的大小不一定固定,因为输入图像的大小不一定固定,但却是32的倍数。其余的yolo层同理。
可想而知,以上所述的各个yolo层都是4维数据。因为要对三个预选框进行预测,所以这4维数据可以且必须拆分成3堆三维数据,例如batch size为4情况下,图中的第1yolo层数据就是(4,13,13,75)维度的数据,我们可以拆分成3*(4,13,13,25)数据,或者也可以写成(4,3,13,13,25)变成5维度数据。这里正如debug yoloV3源码中显示的那样。为了便于理解,我们暂且使用3*(4,13,13,25)。但我们不妨再进行一下简化,认为只传入了一张图的数据,掌握了一张图的传播流程,就掌握了多张图的传播流程(batch size>=2),因为这在计算机里可以一次性计算完成的,多加一个维度就是了。我们看看一张图情形下的第1yolo层数据是如何与要预测的框的位置(x,y)、框的大小(w,h)、置信度、分类联系起来的。如下图所示。
下面的图是用手画的,字太丑,勿喷。。。。。。
注释:52*52size里面的x、y、h、w、c分别是预选框的x、y坐标值,以及预选框高度、宽度、置信度
上图中我特别有一个疑问,就是核心问题。这个很关键,牵涉到yolo输出层的最终方框选定和分类表达(如何与真实便签值对照计算差异性)。实际上softmax多分类问题就是一个简单的范本。其将标签值转化成为了one-hot形式(一阶张量,N*1矩阵,带状)。这里是属于更高维度的数据,不考虑batch size大于1的情形,牵涉到四维数据形式的表达和设计,考虑batch size则属于5维数据表达。自然地,我们都用张量来表达多维数据,计算机可以识别。针对核心问题的答案,可以用如下图来回答。
上图说的是,真实标签数据变换成上图结构,这和yolo层就等结构对应起来了,计算也就能够方便进行了。上图所表达的真实标签数据结构中,非零数据的分布和值的大小就是模型被不断拟合,使得yolo层数据要尽量去靠拢的对象。代码不再展示了,非常多,其实说的就是这么回事,还是图形象高效。
版权声明:本文为CSDN博主「Timmy9991」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Timmy9991/article/details/122609525
暂无评论