大家好,我是智慧的世界。这篇文章分析了darknet entry_index输出指针偏移逻辑。
Yolo已被广泛用于目标检测任务。我还写了一篇文章“ [模型推论]有关Yolo的路线职业的路线”,有兴趣的学生可以咨询。
在这里,分析Yolo层中entry_index的指针偏置逻辑。这仍然是非常本质的。
以Yolov4为例,输出为三个Yolo分支(也许屏幕截图很小,您可以看到三个头):
在CFG中,您仍然可以看到Yolo层的一些信息,如下所示:
为了推理,我们只需要关心面具,锚,类以及NMS阈值和置信阈值。因此,如何放电Yolo层的输出数据?首先,必须切割三个Yolo层的数据独立的。拿其中一个:
(1)数据基于四个维度[n,c,h,w],n是批处理,c是,h / w是freation_map高度且宽。置信度为4是检测框位置信息,类是类别的数量,即每个类别给出检测分数,而乘以3表示每个网格都有3个锚框。由Yolo层;
(2)YOLO层的输出数据将使用一个维度的动态阵列存储在DarkNet中,这涉及如何将四维数据转换为一个维度数据的问题。这是在DarkNet中完成的。假设四个维数据为[n,c,h,w],与每个维度相对应的索引为[n,c,h,w],因此扩展是根据此逻辑将其存储到*outputmiddle。
让我们看一下entry_index函数的实现代码:
此指针偏移操作代码的实现非常简单,并且非常特别,这完全反映了上面提到的Yolo层的数据输出。您可以将函数的返回部分映射到我们上面提到的四个维度的过程中到一个维度。进入,让我们在下面谈论它。
查看功能yolo_num_detections。该功能的作用是计算从三个Yolo分支输出的检测框数:
这里有两个周期。外循环是n是锚框的数量,3;内部循环是。
结合上述entry_index的实现,entry = 4,因此,当第一个外部周期n = 0时,索引正在基于基础上增加。
在接受检测框的信心之后,将检测框与我们在外部设置的阈值进行了比较:检测框:
在内部循环中行走后,我再次进入每个网格,然后执行第一个锚框架的检测框的过滤工作,然后采取外部周期。然后,第二和第三锚框出来了。
通过上述分析,Yolo层的输出结构和处理方法应更清晰。
【公共帐户传输】
“ [经验共享] darknet Entry_index指针偏移逻辑的分析”