https://blog.csdn.net/m0_56069948/article/details/122285951
https://blog.csdn.net/m0_56069948/article/details/122285941目录
原论文链接:https://gitee.com/shaoxuxu/DeepLearning_PaperNotes/blob/master/YOLOv1.pdf
笔记版论文链接:https://gitee.com/shaoxuxu/DeepLearning_PaperNotes/blob/master/YOLOv1-PaperNotes.pdf
你只需要看一次:统一的、实时的目标检测
回到顶部## 1. 简介
(1)主要作者简介:
Joseph Redmon:YOLOv1、YOLOv2、YOLOv3、DarkNet深度学习框架。
Ross Girshick:人称RGB大神,主要论文有DPM、R-CNN、Fast R-CNN、Faster R-CNN、FPN、Mask R-CNN、RetinaNet、YOLOv1等。
Ali Farhadi:Joseph Redmon在华盛顿大学的导师。
(2)YOLOv1特点:
R-CNN、SPP-Net、Fast R-CNN,Faster R-CNN等都是two-stage目标检测器,即第一阶段生成潜在候选框(Region Proposal);第二阶段用CNN分类器逐一筛选每个候选框。这类网络虽然准确性较好,但速度太慢,很难达到实时检测(>30FPS)的需求。而YOLO属于one-stage(单阶段)目标检测器,可以直接端对端的优化检测性能,通常输入图像只需要经过一次前向预测就可回归得到类别和定位信息,且速度极快,能够很好地实现实时的目标检测(YOLO实时最准、Fast YOLO实时最快)。
回到顶部## 2. 论文思想
(1)将原图划分为S*S网格(grid cell);
(2)物体的中心点(也即Ground Truth人工标记框的中心点)落到哪个grid cell里, 就由该grid cell负责检测这个物体,且检测这个物体的bounding box由该grid cell生成;
(3)每个grid cell预测B个bounding box(每个bounding box由5个参数组成:4个坐标(x, y, w, h)和一个置信度confidence);
x, y 是bounding box中心点相对于所在grid cell左上角格点的坐标;
w, h 是bounding box相对于整幅图像的宽和高;
bounding box的confidence score定义如下:
(4)B个bounding box中与Ground Truth框的IOU最大的bounding box负责检测这个物体;
(5)每个grid cell预测C个条件类别概率:Pr(Classi|Object) ,C表示目标检测的类别数,Pr(Classi|Object) 表示确认grid cell内有物体的前提下该物体是某类别的概率;
最终每个bounding box分类的confidence就是上述的Pr(Classi|Object)与(3)中bounding box置信度预测的乘积:
上式代表每个bounding box中第i个类别的概率,包含物体的分类精度和定位精度。
(6)训练阶段,就是不断迭代上述步骤,通过监督学习使得损失函数最小化的过程;而预测阶段,输入4484483的图像,只需经过一次神经网络,即可输出7730的张量(包含定位和分类信息)。
该网络模型由24个卷积层+2个全连接层构成。输入4484483的图像,输出7730的张量。网络中的1*1卷积层,出自Network in network(NiN),在这里的作用是降维,减少权重个数和计算量。
Tips:CNN小知识补充
预训练:使用大型数据集预先训练模型的过程。常用预训练模型有VGG16/19、ResNet50等。
微调:将预训练过的模型作用于自己的数据集,并使参数适应自己数据集的过程。
卷积神经网络的核心是:
(1)浅层卷积层提取基础特征,比如边缘、轮廓等;
(2)深层卷积层提取抽象特征,比如整个脸型;
(3)全连接层根据特征组合进行评分分类。
预训练模型的特点就是:用大型数据集做训练,已经具备了提取浅层基础特征和深层抽象特征的能力。
在ImageNet 1000-class competition dataset上预训练了一个分类器,预训练网络使用图中前20个卷积 + 1个GAP(Global Average Pooling) + 1个全连接层,网络输入为224*224大小。
(1)由于检测需要细粒度的图像信息,所以网络输入由预训练的224224改为448448;
(2)任少卿等人提出在预训练网络上增加卷积层和全连接层能够提升性能,所以训练网络改为上图所示:24个卷积层 + 2个全连接层;
(3)检测框的位置信息(x, y, w, h)都做了归一化处理;
x, y 是bounding box中心点相对于所在grid cell左上角格点的坐标;
w, h 是相对于整幅图像的宽和高。
(4)使用Leaky ReLU非线性激活函数;
θ(x) = x, x>0
θ(x) = 0.1x, otherwise
(5)使用sum-squared error损失函数;
(6)训练过程中采用变化的学习率;
最初的epoch,慢慢从10e-3升到10e-2(一上来就10e-2容易造成发散);
紧接着75个epoch,学习率设为10e-2;
再接下来30个epoch,学习率降为10e-3;
最后30个epoch,学习率将为10e-4。
(7)为了避免过拟合,使用dropout和数据增强,数据增强包括:随机缩放,20%全图大小的平移,调整HSV色彩空间。
损失函数分五部分,第1、2项为坐标回归误差;第3、4项为Confidence(置信度)回归误差;第5项为类别预测误差,即分类误差。
(1)负责检测物体的bbox中心定位误差
此处λcoord取值为5,而(4)中λnoobj 取值为0.5,之所以如此设定,是因为图像中有很多grid cell是不包含物体的,这些grid cell中bbox的置信度都为0,这通常会压制或者说弱化那些含有包含物体的grid cell的梯度,导致模型不稳定,造成训练过早发散。所以设定λcoord= 5,λnoobj = 0.5,相当于加强bbox坐标预测损失(也就是定位误差),削弱不包含物体的bbox的置信度损失。
(2)负责检测物体的bbox宽高定位误差
式中,使用宽和高的平方根来代替宽和高,是因为在小框里边小的偏差比在大框里边影响更大,如下图示:
(3)负责检测物体的bbox的confidence误差
(4)不负责检测物体的bbox的confidence误差
(5)负责检测物体的grid cell的分类误差
回到顶部## 3. YOLOv1的缺陷
(1)小目标检测差强人意,由于空间的约束导致可预测的目标数量受限,每个grid cell只能预测一个目标,整幅图像最多预测7*7=49个目标;
(2)很难泛化到新的或不常见纵横比或形状的目标;
(3)预测框使用了相对较粗粒度的特征(由于存在很多下采样层),这导致其定位误差较高;
(4)小框里的小的误差比在大框里的影响更大。(这个在损失函数的第二项中有相应的优化措施,即用宽高的平方根来代替宽高。个人猜测可能并没有达到预期效果)
回到顶部## 4. 其他一些检测器的特点
传统特征HOG、传统分类器SVM、滑动窗口方法、弹簧模型:子模型+主模型。
选择性搜索(Selective Search)生成潜在边界框、卷积网络提取特征、SVM打分、线性模型调整边界框、NMS非最大值抑制剔除重复检测框。
相比于R-CNN,做了以下几点改进
(1)卷积不再是对每个Region Proposal进行,而是直接对整张图像,相当于共享计算;
(2)用ROI Pooling进行特征的尺寸变换,因为全连接层的输入要求尺寸大小一样,因此不能把Region Proposal作为输入;
(3)用SoftMax代替原来的SVM分类器。
核心改进是使用**RPN(**Region Propose Network)提取区域,代替Selective Search,极大的提升了检测框的生成速度。
RPN模块主要执行的流程为输入Faster R-CNN的公共Feature Map,生成Anchors,通过SoftMax分类器提取Positive Anchors;最后Proposal Layer负责综合positive anchors和对应bounding box regression偏移量获取proposals,同时剔除重叠和超出边界的proposals。
使用卷积神经网路代替Selective Search来预测ROI;但无法进行通用目标检测。
使用卷积神经网路定位(高效实现了滑窗);但是其优化的是定位而非检测性能,且是基于局部来预测的,无法推理全局背景。
提出regression方法来预测抓取物体,但它只是一个更简单的目标检测任务,只需要预测目标的区域,而不需要预测目标的大小、位置、边界信息以及类别。
回到顶部## 5. 论文精读笔记
可以点击**链接**下载高清原版笔记pdf,论文重点、专有名词解释、公式推导、复杂单词释义等都有清晰的标注。
回到顶部## 参考资料
1、b站子豪兄YOLOv1论文精度(讲的特别清晰,建议一看)
2、模型微调fine-tune
3、一文详解R-CNN、Fast R-CNN、Faster R-CNN
4、读论文:YOLO