YOLOv1:You Only Look Once: Unified, Real-Time Object Detection
一、前期知识
1.目标检测评价指标——mAP(平均准确率均值)
如上图所示,有7张图片,其中有15个ground-truth,用绿色边框表示,24个检测到的对象用红色框表示,每个检测到的对象由字母A,B,…,Y表示,并具有知信度confidence
上表为图中对应信息
TP和FP:
- True Positive (TP): IOU>=阈值的检测框
- False Positive (FP): IOU<阈值的检测框
- False Negative (FN): 未被检测到的GT
- True Negative (TN): 忽略不计
按照置信度从大到小将框进行排序:
利用confidence给BBOX排序,对每个BBOX都计算对应的precision和recall值,例如:
对BBOX R, precision = 1/1 = 1, recall = 1/15=0.0666
对BBOX Y, precision = 1/2 = 0.5, recall = 1/15=0.0666
对BBOX J, precision = 2/3 = 0.6666, recall = 2/15=0.1333
根据每个框的召回率和精确率画出折线图,即上图左图
通过11点插值法,即以0.1为间隔计算召回率对应的准确率,得到右图
,其中表示当前插值召回率的准确率
公式整体表示:当前召回率对应的准确率等于所有大于等于当前召回率的召回率对应的准确率的最大值值
举例说明:
第一个插值点是0.0,从左图上可以看到,大于等于0的召回率中,R点对应准确率最大,是1,所以对应右图,当召回率为0,其准确率为1
第二个插值点是0.1,从左图上可以看出,大于等于0.1的召回率中,J点对应准确率最大,为0.6666,所以在右图中,召回率为0.1,其准确率为0.6666
依次类推计算后面的插值点的准确率
然后计算这11个点的平均准确率:
二、论文内容
1.论文结构
- Abstract:介绍了yolo算法及其速度快的优点
- 1.Introduction:1.yolo简单原理图 2.与R-CNN相比yolo的优点 3.与传统算法相比yolo的有点
- 2.Unified Detection:one stage detection算法的原理和细节
- 2.1Network Design:介绍yolo与fast yolo的网络结构
- 2.2Training:yolo训练方法、损失函数及参数
- 2.3Inference:yolo预测阶段细节
- 2.4Limitations of YOLO:yolo的一些局限性
- Comparasion to Other Detection Systems:与其他算法对比,包括相同点和不同点
- Experiments:从速度和精度上与其他算法做对比
- Real-Time Detection In The Wild:yolo连接摄像头时可以进行实时监测
- Convolution:再次强调了yolo的优点——one stage、快速、鲁棒
2.yolo算法思想
2.1 yolo算法大致流程
- Resize image:将图片尺寸变为448*448
- Run convolutional network:输入图片到神经网络中
- Non-max suppression:使用非极大值抑制得到最后的结果
2.2 yolo算法细节
- 将图片隐式地分为SxS个网格
- 物体的中心落在哪个网格内,哪个网格就负责预测这个物体
- 每个网格需要预测B个框, C个类别
- 每个框包含了位置信息和置信度(x, y, w, h, confidence)
物体的中心落在哪个网格内,哪个网格就负责预测这个物体
比如图中狗的中心点落在了绿色的网格里, 那么这个网格就负责预测狗。
比如图自行车的中心点落在了蓝色的网格里, 那么这个网格就负责预测自行车。
每个网格需要预测B个框,C个类别(这B个框预测的为一个类别,一个物体)
x,y,w,h,c都是经过归一化处理的,他们的值都在0,1之间
因为一个网格里面预测的B个框都是一个类别,属于同一个物体,因此当出现下述情况就会出现问题:
- 如果一个网格内出现了两个物体的中心
- 一个网格里包含多个小物体(比如天空中的鸟群)
以上两种情况均只能检测出一个类和一个物体,所以yolo对于靠的很近的物体以及小目标群体的检测效果不是很好
每个框包含了位置信息和置信度(x. y, w, h, confidence)
x,y为中心点坐标, w,h为框的宽度(均经过归一化,值在0—1之间) confidence是置信度
所以一张图预测的信息一共有: SxSx(Bx5+C)
第一项为物体先验概率,如果框内包含物体值为1,否则为0。、
第二项为预测框与真实框的交并比(0——1)
所以Confidece的取值范围为0——1
由公式可以知道Confidence的大小反映了两个信息:
- 预测框内包含物体的置信度是多少
- 预测框预测的准确度
3. yolo网络结构
3.1 网络的总体结构
24个卷积层,2个全连接层
输入图像尺寸为448x448x3,最终输出为7x7x30的feature map
图中feature map上的一条红线,表示的就是原图被划分成7x7的网格中的某一格所预测的信息,在这里也就是2个Bounding Box和20类的信息
feature map的尺寸,就是对应于上面的一张图所预测的信息——SxSx(Bx5+C),这里S=7,B=2,C=20
3.2 网络结构详细信息
4. 损失函数
对于这张图而言boxes=7x7+2=98
仅有3个框参与坐标点损失、包含物体置信度损失、类别损失计算
有95个框参与不包含物体的置信度损失计算
对于每张图片,大多数格点单元不包含目标,其对应的置信度得分为0。目标存在与不存在框的比例失衡,将会影响最后loss的计算,从而影响包含目标的格点单元的梯度,导致模型不稳定,训练容易过早收敛甚至发散。
因此,我们增加bounding box坐标对应的loss,同时对于不包含目标的box,降低其置信度对应的loss。我们用来实现这一功能,且:
对不同大小的bbox预测中,相比于大bbox预测偏一点,小box预测偏一点更不能忍受。而平方误差损失(sum-squared error loss)中对同样的偏移loss是一样。作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。因为smal bbox的横轴值较小,发生偏移时,反应到y轴上的loss比big box要大
5.网络训练
5.1 预训练阶段
预训练分类网络:
训练数据集: ImageNet 1000类竞赛数据集
网络结构: yolo pre 20convs+averagepool+fully connected layer
训练结果: top-5 accuracy of 88% on ImageNet 2012 validation set
训练尺寸(分辨率): 224*224
5.2 训练阶段
训练检测网络:
训练数据集: PASCAL VOC 2007&2012 数据集
训练尺寸: 448*448
初始化方式:
预训练分类横型的卷积层初始化yolo的前20卷积层,其余层随机初始化
超参数设置:
btahcsize: 64 momentum: 0.9 decay: 0.0005 epochs: 135
learning rate:
第1个epoch学习率从0.001逐渐增长到0.01
第2-75: 0.01
第76-105: 0.001
第106-135: 0.0001
三、YOLO的优缺点
优点:
- 速度快:把检测作为回归问题处理,流程简单,仅需输入一张图
- 全局推理:对整张图处理,利用全图信息,假阳性错误少(就是把背景当做物体错误率少)
- 泛化能力强:yolo可以学习到物体的通用特征,泛化能力更好,应用在新领域不会崩掉(与DPM,R-CNN相比,还是因为利用了整张图的信息)
缺点:
- 精度相对于最先进的算法来说精度不高,对小目标不友好