yolo v1原理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/cjnewstar111/article/details/94035842

目标检测系列文章
yolo v1原理:https://blog.csdn.net/cjnewstar111/article/details/94035842
yolo v2原理:https://blog.csdn.net/cjnewstar111/article/details/94037110
yolo v3原理:https://blog.csdn.net/cjnewstar111/article/details/94037828
SSD原理:https://blog.csdn.net/cjnewstar111/article/details/94038536
FoveaBox:https://blog.csdn.net/cjnewstar111/article/details/94203397
FCOS:https://blog.csdn.net/cjnewstar111/article/details/94021688
FSAF: https://blog.csdn.net/cjnewstar111/article/details/94019687

基本原理

将输入图像划分为S*S(最终feature map的大小)个cell,每一个cell预测B个bounding boxes,以及这些bounding boxes的confidence scores(置信度),以及C个类别概率。由于一个cell只有一组分类概率,所以在yolov1中,一个cell只能预测一个物体。训练过程中,ground truth的中点落在哪个cell中,那个cell就负责预测这个ground truth框。

网络结构

摘自论文翻译:我们的网络架构受图像分类模型GoogLeNet的启发。我们的网络有24个卷积层,后面是2个全连接层。我们只使用1×1降维层,后面是3×3卷积层,这与Lin等人类似,而不是GoogLeNet使用的Inception模块。完整的网络如图所示。我们还训练了快速版本的YOLO,旨在推动快速目标检测的界限。快速YOLO使用具有较少卷积层(9层而不是24层)的神经网络,在这些层中使用较少的滤波器。除了网络规模之外,基本版YOLO和快速YOLO的所有训练和测试参数都是相同的。我们网络的最终输出是7×7×30的预测张量。

实现细节:

S*S格的划分

其实就是看CNN提取特征最后一层的输出大小。原始论文中输入是448*448,最后输出的feature map是7*7(缩小64倍),那么就划分为7*7的cell。每一个cell最终会产生一个30维的向量(B=2,一个cell产生2个bounding box的坐标位置和置信度,以及20个类别的概率 B(4+1)+20=30)。

正负样例的选择

一个cell中有多个bounding box,那么具体是哪个bounding box作为有效的,而其他作为无效的呢?训练过程中,将每个预测的bounding box和gt求IOU。这个cell中的哪个bounding box与gt的iou大,那么这个bounding box就就是有效的bounding box,作为正样例(response bounding box)。其他bounding box就作为负样例(not response bounding box)。(有的资料中需要把iou小于某一个阈值,才作为负样例。其实区别不大,就是在计算负样例的置信度loss的时候的数量不一样而已)

一个cell中有多个gt怎么处理?

这个是yolo v1的缺点,一个cell只有一组概率预测,也就是一个cell只能预测一个物体。所以如果一个cell中有多个gt,那么只能选择其中的一个用来训练。

位置信息

位置信息采用归一化的(X中心,Y中心,宽,高)表示

X中心的归一化采用相对cell的x轴长度表示。图中的黄色虚线a/黄色虚线b

Y中心的归一化采用相对cell的y轴长度表示。图中的蓝色虚线a/蓝色虚线b

宽的归一化表示采用相对原始图片的宽度表示。图中的黄色虚线c/黄色虚线d

高的归一化表示采用相对原始图片的高度表示。图中的蓝色虚线c/蓝色虚线d

置信度(confidence)

bounding box的置信度 = 该bounding box内存在对象的概率 * 该bounding box与该对象实际bounding box的IOU

损失函数

损失函数分为三部分:坐标误差,置信度误差和分类误差

置信度误差针对所有的bounding box都要计算。由于无效的bounding box多,所以无效bounding box的置信度有一个系数系数0.5

坐标loss针对有物体的bounding box(response bounding box)计算,分类loss针对有物体的cell计算

如何判断一个bounding box是有效的还是无效的

首先是判断gt的中点有没有落在cell里面,如果落在cell里面,那么预测的两个bounding box,哪个和gt的iou大,哪个就是有效的bounding box,是正样例(response bounding box),而iou小的就作为负样例(not response bounding box)。有些资料里面把iou小于某一个阈值才作为负样例。

yolo推理

yolo推理的时候,把置信度乘以分类的最高概率,作为一个bounding box的得分,然后大于某一个阈值的得分的bouding box再送到NMS里面处理,最终得出输出框

数据增强

通过改变训练数据的饱和度,曝光度,色调,抖动进行数据增强

yolo v1的优缺点

优点:

速度快,达到了完全实时的效率

错误率低(相对于faster rcnn会把很多背景预测为物体)

泛华能力强(在美术绘画作品中也有较好的效果)

缺点:

定位不够精确(map低)

对小目标检测效果不好(召回率低)

参考资料

《真的,关于深度学习与计算机视觉,看这一篇就够了 | 硬创公开课 》

《物体检测-回归方法(YOLO+SSD) 》

《 RCNN学习笔记(10):SSD:Single Shot MultiBox Detector 》

《YOLOv1论文理解》

《YOLO详解》来自 <https://zhuanlan.zhihu.com/p/25236464>

《YOLO: Real-Time Object Detection 官网》来自 <https://pjreddie.com/darknet/yolo/>

《【YOLO】详解:YOLO-darknet训练自己的数据》来自 <http://blog.csdn.net/Jinlong_Xu/article/details/75577007>

TensorFlow-YOLO代码阅读笔记——YOLO中的Loss是如何计算的?》来自 <https://www.cnblogs.com/irenelin/p/7612129.html>

《YOLO v1的详解与复现》http://www.cnblogs.com/xiongzihua/p/9315183.html

github开源实现 https://github.com/xiongzihua/pytorch-YOLO-v1

猜你喜欢

转载自blog.csdn.net/cjnewstar111/article/details/94035842