基于Yolo3_Deep_sort的多目标追踪算法原理及部分代码说明
写在前面的话:楼主前一段时间参与了一个小项目,是关于人的目标追踪,在此记录一下,这篇博文主要是记录一下对这个方法的认识和理解,希望能引起你的共鸣。如果想看具体的测试环境搭建及复现说明,请查看我的另一篇博客,传送门。
将Yolo3与Deep_sort相结合,相当于目标检测中的Two stages的结构,采用detection(Yolo3)+ track(Deep_sort)的方式实现目标追踪。
1、Yolo算法思想
Yolo(You Only Look Once,Yolo)在本方法中负责detection部分,其将输入图像分成S×S个格子,若某个物体 Ground truth 的中心位置的坐标落入到某个格子,那么这个格子就负责检测出这个物体,如图1所示。
(1) Yolo1采用卷积神经网络结构
开始的卷积层提取图像特征,全连接层预测输出概率。借鉴了GoogLeNet分类网络结构,共有24个卷积层,2个全链接层,网络在最后使用全连接层进行类别输出。
损失函数:使用了均方和误差作为loss函数:
l o s s = ∑ i = 0 s 2 c o o r d E r r + i o u E r r + c l s E r r loss=\sum_{i=0}^{s^{2}}coordErr+iouErr+clsErr loss=i=0∑s2coordErr+iouErr+clsErr
其由三部分组成:坐标误差、IOU误差和分类误差。
(2) Yolo2相对Yolo1进行了改进
首先去掉了在定位层后的dropout层,并在卷积层中全部使用BN层进行批量归一化处理。借鉴Faster R-CNN的思想预测bbox的偏移,移除了全连接层,使用box替换grid预测一个类别。
而后,对Faster R-CNN的首选先验框方法做了改进,采样k-means在训练集bbox上进行聚类产生合适的先验框,由于使用欧氏距离会使较大的bbox比较小的bbox产生更大的误差,而IOU与bbox尺寸无关,因此使用IOU参与距离计算,使得通过这些anchor boxes获得好的IOU分值。距离公式:
D ( b o x , c e n t r o i d ) = 1 − I O U ( b o x , c e n t r o i d ) D(box,centroid)=1-IOU(box,centroid) D(box,centroid)=1−IOU(box,ce