脑瓜子嗡嗡的小刘炼丹之路—YOLOV1 paper Analysis
嘿嘿嘿!脑瓜子嗡嗡的小刘又来了哦,这节课我们讲YOLO1,拿小本本记一下笔记哇。
老夫掐指一算YOLO(You Only Look Once)从2016-2020,都从V1到V5了,YOLO在众多的开源网络中,属实耐打并且是非常nice的一个网络架构,从YOLO的名字都可以得出作者的强势You Only Look Once,你只需看一次!emmmm,现在对于我来说看YOLOV1的paper是不是有点晚了🦆…
(一)、杂七杂八的前言(preface)
目前主流的object detection分为:
(1) one stage(一步到位):
one stage 可以理解为就是分类回归一步到位,只需要一个神经网络就ojbk了。不像RCNN那样需要先使用RPN提取ROI,然后在输入其他网络中做卷积运算。如:YOLO SSD就是这样的网络。
one stage 速度非常的快,如在YOLO1 的paper里面,Fast-YOLO最快可以达到150frame pre second。但是不可否定的是,鱼和熊掌不能兼得,速度快了,那么鲁棒、泛化能力和精度可能会有所损失,这也是one stage的痛处,但在目前的object detection task 还是可以接受的(现在的目标检测基本上是:数据驱动类型的,半监督类型的)。
(2) two stage(两步到位):
可以理解为先采用特殊的方法选出一些相似的分类,这样的过程叫做区域方法(Region Proposal),然后在针对选出来的类别再次进行分类回归。Fast R-CNN就是two-stage。
假设一张图片上有一千个类别,网络就需要做一千次匹配或者更多,这样的网络开销十分的巨大,因此诞生了one stage。
在看论文的时候,纠结了半天的end to end 是什么意思。(看来对一些名词概念的知晓确实也是欠缺的,学了后面的忘了前面的,过几天写一篇笔记专门记这些)。
(3) end to end(端到端):
在object detection(目标检测)中输入为原始数据,输出则是图片类别与置信度结果,这就是end to end(端到端)。
书面一点解释就是:端到端的算法应用在特征学习时,无需单独处理。而传统模型,需要先提取出特征值再做分类回归任务。如果特征值较多,人工去提取会出现维度灾难,因此就衍生出了端到端的思。(有时候会感觉ML的比DL更加实用)。
简单来说,就是深度神经网路处理问题不需要像传统模型那样,如同生产线般一步步去处理输入数据,直到输出最后的结果(其中每一步处理过程都是经过人为考量设定好的(“hand-crafted ” function)。
end to end 提取特征的过程不再需要人工,而且交给了机器,可以理解为半监督吧!!!(因为还是需要人工去掌控一些特征值,以及参数)。其在不同的地方有不同的诠释,有端到端的训练,端到端的模型,端到端的自动驾驶等。这仅只是一个思想,充分理解就好了。
神经网络的特征如同一个黑盒子一样,你无法去干预,只能调整参数、滤波器和输入的数据特征(input data feature map),因此得到一个鲁棒和泛化能力好的模型,往往考验着算法攻城狮🦁的经验与能力。(而人工智能只是一个概念名词,并不只有DL才是,合理审视好了!)
(二)、推理全文的摘要(Abstract)
作者设计了一个新的目标检测网络,端到端(end to end)的检测模式,直接将object detection作为回归问题,由一个神经网络去评测整张图像上的bbox和预测的类别的概率。与2016年最先进的检测系统(state-of-the-art detection systems)来比较的话,YOLO在背景预测上有着更少的在假阳性(False positives)。并且YOLO在自然图像和实时性等性能优于R-CNN和DPM。
备注:(模型评估的知识)
False Positive (FP假阳性) : False(检测模型不能成功的)Positive(判定出结果是Positive);
False Negative(FN假阴性) : False(检测模型不能成功的) Negative (判定出结果是Negative的);
True Positive(TP真正例) : True(检测模型成功的) Positive (判定出结果是Positive的);
True Negative(TN真假例) : True(检测模型成功的) Negative (判定出结果是Negative的)
(三)、吹牛皮的介绍(Introduction)
无论是在简单和复杂的情况时候,人们在看见图像的时候,也能够快速准确的分辨的出图像中存在的物体,以及位置信息。人类的感官系统是如此的准确和快速,允许人们执行复杂的任务,如:驾驶和有意识的想法与行为。而准确的目标检测算法能够在计算机在没有传感器的情况下也能实现自动驾驶,并能使用辅助设备能够向人类用户传达实时场景信息,其为通用的机器人系统释放潜力。
2016年的大多数的检测系统多采用的采用的是分类器来做,如HOG+SVM算法,当然那个时候也涌现了像SSD、Fast R-CNN等网络模型。然而,大多数算法为了检测出目标,都没有采用DL,而是采用ML中的分类器在测试图像不同的位置进行评估,如DMP(Demoucron Malgrange Pertuiset)采用滑动窗口法(sliding window approach)&SVM,通过设置stride(步长)均匀滑动。
后面提出了与R-CNN的区别以及YOLO的🐂,概括如下:
1). RCNN采用Region Proposal的方法作为第一阶段来得到bounding box,然后在这些bbox上做classification,之后在细化bbox,消除重复的检测。
2). YOLO将object detection当作一个Regression问题,直接从图像像素到边界框坐标和类别概率,这里会出现边界框中心坐标的loss和类别的loss,其并不需要,如同DMP算法等设置一些管道,以及对管道优化。
3). YOLO会对图片进行全面的推理,与Sliding Window & Region Proposal 不同,YOLO训练和测试时候会看见整个图像。神经网络的通性-黑盒-只能看见结果与输入。
4). YOLO在背景的误检率上比Fast R-CNN少了一半,但是YOLO在小目标的识别定位上明显较差。
图1. The YOLO Detection System
如图一所示,YOLO处理图像非常的简单直接,先将输入图像调整为448×448,后在图像上运行单个卷积网络,最后将由模型的置信度对所得到的检测进行阈值处理,得出结果,其可以实现端到端的检测。
其他:!!!
HOG(Histogram of Oriented Gradients)通过计算和统计局部区域的梯度方向直方图来构成特征,SVM(support vector machine)分类算法非常🐂的一个算法了(面试题!!!),其是一种二分类模型,基本的思想就是求解能够正确划分训练数据并且几何间隔最大的分离超平面。(HOG 在opencv中似乎封装好了)
R-CNN(Region Convolution Neural Network):R-CNN采样区域提案网络(Region Proposal Network)的方式来筛选bbox,当一张图输入到RPN网络时候,会得到一个二进制(binary)的值P, P∈[0,1],在通过人为设定一个阈值(threshold),来判断P与threshold之间的关系,从而将bounding box与类别初步筛选出来。这些被筛选出来的bbox区域称为感兴趣区域(ROI)。再将这些ROI输入到主干(backbone)或者其他网络中,进行分类定位等过程。
(四)、通俗易懂的检测框架(Unified Detection)
YOLO将目标检测网络看成一个神经网络,输入图片输出结果(bbox和label信息),其将输入的图片划分为 S ∗ S S*S S∗S的网格,如果object落入中心网格,则该Grid Cell就负责检测它,YOLO一张图最多可以产生98个bbox,而选择性搜索的存在着2000。
总结来说可以分为以下4点:
1). 每个网格预测 B B B个边界框(bounding box)和置信度(confidence
scores),这些置信度反应了模型在边界上的准确率。置信度(confidence)定义公式为: P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)*IOU^{truth}_{pred} Pr(Object)∗IOUpredtruth,当目标不在在网格当中,则置信度为 0 0 0,除此之外,作者希望置信度等于bbox和ground truth的联合交集( I O U = A ∩ B A ∪ B IOU=\frac{A∩B}{A∪B} IOU=A∪BA∩B(Intersection Over Union))(写到这里,闻到外面一股炸鸡的香味,哭了!凌晨0点了)
2). bounding box的介绍:其包含5个部分 x , y , w , h x, y, w, h