机器人小学期(5):使用PyTorch实现YOLOv3-tiny

首先,我们先来回忆一下YOLO网络在做什么。

现在,我们有一张大小为512*512的狗的图片,现在我想预测出狗的bounding box。我们先把图片按照步长32划分成16*16的网格,通过YOLO网络,这个网格中的每个格子都会预测出3个bounding box,这3个bounding box的中心都落在这个格子里。如果网络效果不错的话,红色格子对应的3个预测里就有一个是狗的bounding box(也就是黄色框)。对于每一个bounding box,我们都会预测出(4+1+n)个参数,其中前面4个参数和bounding box的中心坐标以及长宽有关,第五个参数表示这个bounding box里有物体的概率和这个bounding box和真实bounding box的IOU的成绩,最后n个参数表示如果这个bounding box里有物体,那么这个物体属于某一类的概率有多大,也就是分类任务的输出。

因此,对于这张图片,我们会预测出16*16*3个bounding box,首先我们先根据第五个参数,筛出可能包含物体的bounding box。然后使用非最大抑制(non-maximum suppression)找到这些bounding box里比较准确的那些bounding box。

使用的YOLOv3-tiny网络结果如图所示,其中蓝色的部分用于特征提取,然后经过几个卷积层的调整接到YOLO层来预测出小尺度的bounding box。此外,我们特征提取部分的特征上采样然后和更浅的层的特征连接起来用于预测尺度大一些的bounding box。由于训练过程中观察到网络不太好收敛,所以可以先不管右侧这个分支,只训练左侧这一路,经过3000个epoch之后,再训练整个网络,这样可以使网络收敛得更快一些。

从天津到匹兹堡的72小时 机器人小学期(4):将YOLO应用到自己的数据集上

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×