【计算机视觉CV | 笔记】one-stage目标检测总结
前言
笔者只是一名学生,初入CV领域,写这篇的目的是帮助自己梳理学习过的内容,且为大家学习提供或许有用的学习材料。文末附手写笔记。
目录
YOLOv1、YOLOv2、YOLOv3、其他方法(RetinaNet、SSD、anchor free)、mAP
一、YOLOv1【2015】
1、主要思想
将图片分成S×S的小格子,某个物体的中心落在某个小格子上,该cell将负责预测这个物体。
每个cell对应B个bbox(bbox是网络生成的,不像人为指定的anchor),每个bbox对应5个值,分别为x,y,h,w,confidence,分别代表bbox的位置长宽和该cell是目标的置信度。
最终输出即为 S×S×(B×2+10),文章中S=7,B=2。
2、Loss Function
注意:网络输出为S×S×(B×2+10),label需要转换为对应格式才能计算loss
2.1 Loss、框的回归损失
2.2 loss、置信度损失(是否有物体)
2.3 loss、分类损失
一些问题
a、为什么w和h需要开根号?抑制大框的影响
b、2.2loss中为什么还需要考虑noobj的?为了考虑到负样本,否则全预测为背景loss就很小了,因为有目标的cell占比很少只有3个cell共有49个
c、每个cell对应两个bbox,用哪个bbox的坐标来回归?confidence较大的bbox
3、优缺点总结
pros:速度快,可达45fps,当时较快的faster rcnn也只有18fps
cons:
a、一个cell只负责预测一个物体,但如果2个物体都落在这个cell内呢?即不适合与密集目标
b、S=7,格子较大。不适合于小物体
c、bbox的width-height ratio是由train得到的,测试时若有新的w/h则不适应
d、没有BN,训练较慢
二、YOLOv2【2016】
1、改进点
a、add BN
b、High Resolution Classifier(focusing on backbone)
原本的bcakbone是在ImageNet上训练的,大大部分都是224×224&#x