Darknet框架解读

1.test_detector的调用路径:

这里重点介绍load_alphabet函数:

程序退出时,会清理这些图片分配的资源:

根据代码,这里是从data/labels/目录装载png图片,图片有8*95=760

这些图片都是ASCII码,比如我们打开编号为65和97的PNG图片,看以下内容,分别是A和a.

怀疑最后绘框上面的Label字母就是来源于这里,这样就不依赖于系统字库了,我们确认一下,用反证法。

如果我们将所有b的图片替换成a的图片,那么bicycle应该能变成aicycle的,我们测试一下:

我们重新运行推理测试,发现果然如此,b变成了a.

所以,labels/下有ASCII码32-127的8种尺寸的图片,是显示标签用的。

澄清一个问题,继续下一个问题

运行后:        

 dog.jpg,宽高分别为768,576,这是原图的尺寸。

 但是我们的网络描述文件,网络的输入应该是416*416的,该如何处理呢?

打印几个关键变量: 

喂给网络的JPG图像,首先要经过resize_image操作,转换为网络吃的416*416大小,load_image调用栈中会调用STBI库,库里面还会进行JPG-RGB的转换。

网络推理用的图像分辨率是416*416,但是输入原图和输出框却是在768*576大小,那么框和坐标是如何转化的呢?

./darknet detector test ./cfg/coco.data ./cfg/yolov3.cfg ./yolov3.weights data/dog.jpg -i 0 -thresh 0.25s -out result.json

具体调用发生在下图中的correct_yolo_boxes函数。

加入图中的打印LOG,我们看一下调试输出:

数据处理流水线:

这里的224*224写错了,YOLOV3网络不支持这种尺寸的输入,而应该是320*320。

推理前处理

前处理后,原图被转换为sized对象中存储的数据类型,我们打引它的维度信息和数据:

打印出来,看到确实是按照网络对图像尺寸的要求,数据变为416*416*3的数据。

但是数据貌似是归一化[0,1]范围的浮点,而非RGB像素信息,我们把数据也打印出来:

并且我们加入了范围检测,检测最小值和最大值的存在,运行后,最大值为1,最小值为0,没有负值.

归一化的细节发生在那里呢?还需要再寻找。

继续寻找归一化的前奏,对输入图像的最早处理是发生在下面这段代码:

打印:

所以,你看到,图像装载的时候就已经归一化为小数了。归一化是在哪里发生的呢?我们追踪一下load _image的实现,可以很明显看到最后一步除了255。

Darknet 对于缩放的实现,使用了最临近插值的算法,算法原理可以参考博客

用最近邻插值(Nearest Neighbor interpolation)进行图片缩放_tugouxp的专栏-CSDN博客图片缩放的两种常见算法: 最近邻域内插法(Nearest Neighbor interpolation) 双向性内插法(bilinear interpolation)本文主要讲述最近邻插值(Nearest Neighbor interpolation算法的原理以及python实现基本原理最简单的图像缩放算法就是最近邻插值。顾名思义,就是将目标图像各点的像素值设为源图像中与其最近的点。算法优点在与简单、速度快。如下图所示,一个4*4的图片缩放为8*8的图片。步骤: ...https://blog.csdn.net/tugouxp/article/details/120110219

darknet每个框针对每类对象的概率怎么算的?

下面这段代码来自于darknet代码,通过它可以看的出来,计算方法是这个框有物体的置信度乘以每类的概率,为这个框中有某类目标的最后概率,这有点像是条件概率。


结束!

版权声明:本文为CSDN博主「papaofdoudou」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tugouxp/article/details/120941276

papaofdoudou

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

目标检测----YOLOV1

前言 目标检测任务的目标是识别图像中物体的类别并且定位物体所在位置用矩形框框出。目标检测领域的深度学习方法的发展主要分为两大类:两阶段(Two-stage)目标检测算法和单阶段(One-

YOLOV3预选框验证

对于一个输入图像,比如416*416*3,相应的会输出 13*13*3 26*26*3 52*52*3 10647 个预测框。我们希望这些预测框的信息能够尽量准确的反应出哪些位置存在对象,是哪种对