yolov1算法中的几个疑问与答案

       先挂论文地址:YOLOv1论文You Only Look Once: Unified, Real-Time Object Detection

       目前,有很多研发工作者对YOLO系列做了很多详细细致的解读,比较推荐作者魏凯峰,CSDN昵称“AI之路”,对目前主流的网络都做了系列性的解读,非常细致,也非常有深度。我在此,只是记录下,我学习中遇到的几个疑问以及目前我自己的理解。

       关于YOLOv1细致解读请见,YOLO(You Only Look Once)算法详解

       疑问1: YOLOv1将输入图像划分成7x7的grid cells,每个cell预测2个bouding box(BBox),那如何挑选出预测每个类的BBox?

       答案:YOLOv1 预测输出为 SxSx(Bx5+C),其中, S为7个grid cell,B为2个BBox,C为20个类,5为坐标值4个(xywh)和1个confidence. 在目标检测后处理阶段,对于每个grid cell,会预测2个bbox及其confidence,用每一个confidence乘以20个类的概率,获得一个confidence score矩阵,其维度为 7x7x2x20。然后对20个类别轮流进行:在某个类别中(即矩阵的某一行),将得分少于阈值(0.2)的设置为0,然后再按得分从高到低排序。最后再用NMS算法去掉重复率较大的bounding box。NMS的过程,在此就不累述了。

        我个人感觉还有个更合理的方法:当获得了7x7x2x20的confidence score矩阵后,每个BBox根据20类的confidence score的排序,将自己标记为排名最靠前的类标签。这样一类,就可以获得一个7x7x2的confidence score的矩阵以及7x7x2预测类别的矩阵,然后将同类的所有BBox及其confidence score提取出来,在进行NMS,可能更准确。前提是,每个BBox只能预测一个object。

       疑问2:在论文中,作者提到了BBox预测的置信度confidence可以通过预测obj的概率和IOU的乘积所得,那网络模型输出的confidence有何用?在推测阶段时,没有正值,如何计算IOU咧?

      答案:这个问题需要分训练和推测两个阶段来讨论。在训练时,网络输出的confidence,实际上,没有被使用。论文中提到计算的confidence,是为了计算confidence损失,在有object的grid cell中,GT confidence为1,预测confidence为论文中提到的计算方法计算得出的。在推测时,不需要通过计算得到confidence,直接把网路预测的confidence拿来用即可。

                        

      疑问3:损失函数如下所示,在loss第二行中,对长和宽进行了开根号,这么做的原因是什么?

                            yolov1算法中的几个疑问与答案_第1张图片

       答案:因为小目标相对于大目标对误差更敏感,为了突出这个小目标对误差的敏感度,不得已为之。比如:真值w=10,h=20,预测出来w=8,h=22,跟原来w=3,h=5,预测出来w1,h=7相比,其实前者的误差要比后者小,但是如果不加开根号,那么损失都是一样:4+4=8,但是加上根号后,变成0.15和0.7。

      疑问4:yolov1的优缺点?

      优点:1. YOLO的速度非常快。2. YOLO是基于图像的全局信息进行预测的。这一点和基于sliding window以及region proposal 等检测算法不一样。与Fast R-CNN相比,YOLO在误检测(将背景检测为物体)方面的错误率能降低一半多。3. YOLO可以学到物体的generalizable representations。可以理解为泛化能力强。

      缺点: 1. 位置精确性差;2. 对小目标、密集型目标不友好,比如,鸟群,对重叠性的目标群体不友好,比如一个小女孩抱一个布娃娃; 3. YOLO虽然降低了将背景检测为物体的概率,但同时导致召回率较低;4. 网络中未使用BN。

       后续再更新代码中的疑问!

 

 

你可能感兴趣的:(机器学习)