上期我们一起学习了YOLOV1算法的原理框架,如下:
目标检测算法YOLO-V1算法详解
今天我们深入一步,一起学习下关于YOLO-V1算法的损失函数和优缺点。

YOLO-V1损失函数

从上期我们知道,YOLO-V1算法最后输出的检测结果为7x7x30的形式,其中30个值分别包括两个候选框的位置和有无包含物体的置信度以及网格中包含20个物体类别的概率。那么YOLO的损失就包括三部分:位置误差,confidence误差,分类误差。
损失函数的设计目标就是让坐标(x,y,w,h)confidenceclassification这个三个方面达到很好的平衡。YOLO-V1算法中简单的全部采用了sum-squared error loss来做这件事,如下图:

YOLO-V1损失函数构成

在上图中,我们也能清晰的看出来,整个算法的损失是由预测框的坐标误差,有无包含物体的置信度误差以及网格预测类别的误差三部分组成,三部分的损失都使用了均方误差的方式来实现。
我们知道,如果8维的localization error,两个置信度error20维的classification error同等重要显然是不合理的;还有如果一个网格中没有object(一幅图中这种网格很多),那么就会将这些网格中的boxconfidence push0,相比于较少的有object的网格,这种做法是overpowering的,这会导致网络不稳定甚至发散。这里算法中用了权重系数来进行平衡,对于不同的损失用不同的权重,我们来逐个看:

位置损失

从上图可以看出,坐标损失也分为两部分,坐标中心误差和位置宽高的误差,其中 表示第i个网格中的第j个预测框是否负责obj这个物体的预测,只有当某个box predictor对某个ground truth box负责的时候,才会对boxcoordinate error进行惩罚,而对哪个ground truth box负责就看其预测值和ground truth boxIoU是不是在那个网格的所有box中最大。
我们可以看到,对于中心点的损失直接用了均方误差,但是对于宽高为什么用了平方根呢?这里是这样的,我们先来看下图:
上图中,蓝色为bounding box,红色框为真实标注,如果Wh没有平方根的话,那么bounding box跟两个真实标注的位置loss是相同的。但是从面积看来B框是A框的25倍,C框是B框的81/25倍。B框跟A框的大小偏差更大,所以不应该有相同的loss
如果Wh加上平方根,那么BA的位置loss约为3.06BC的位置loss约为1.17BA的位置loss的值更大,这更加符合我们的实际判断。所以,算法对位置损失中的宽高损失加上了平方根。
而公式中的 为位置损失的权重系数,在pascal VOC训练中取5

置信度损失

这里分成了两部分,一部分是包含物体时置信度的损失,一个是不包含物体时置信度的值。置信度的定义,我们上期学习过,这里结合置信度损失再看一下:

其中前一项表示有无人工标记的物体落入网格内,如果有,则为1,否则为0.第二项代表bounding box和真实标记的box之间的IoU。值越大则box越接近真实位置。
confidence是针对bounding box的,由于每个网格有两个bounding box,所以每个网格会有两个confidence与之相对应。
从损失函数上看,当网格i中的第j个预测框包含物体的时候,用上面的置信度损失,而不包含物体的时候,用下面的损失函数。对没有objectboxconfidence loss,赋予小的loss weight, 记为在pascal VOC训练中取0.5。有objectboxconfidence loss和类别的lossloss weight正常取1

类别损失

类别损失这里也用了均方误差,实际上,感觉这里用交叉熵更好一些。其中 表示有无object的中心点落到网格i中,如果网格中包含有物体object的中心的话,那么就负责预测该object的概率。

总体来说,对于不同的任务重要程度不同,所以也应该给与不同的loss weight

  • 每个网格两个预测框坐标比较重要,给这些损失赋予更大的loss weight,在pascal VOC中取值为5.

  • 对没有objectboxconfidence loss,赋予较小的loss weight,在pascal VOC训练中取0.5.

  • 对有objectboxconfidence loss和类别的loss weight正常取值为1.

YOLO-V1的缺点

由于YOLOV1的框架设计,该网络存在以下缺点:

  1. 每个网格只对应两个bounding box,当物体的长宽比不常见(也就是训练数据集覆盖不到时),效果较差。

  2. 原始图片只划分为7x7的网格,当两个物体靠的很近时,效果比较差。

  3. 最终每个网格只对应一个类别,容易出现漏检(物体没有被识别到)。

  4. 对于图片中比较小的物体,效果比较差。这其实是所有目标检测算法的通病。

好了,至此,我们这两期学习了YOLO-V1的结构框架和损失函数。下期我们将一起学习YOLO-V2的框架,看看YOLO-V2YOLO-V1做了哪些改进。

♥转发在看也是一种支持♥

目标检测模型YOLO-V1损失函数详解相关推荐

  1. 目标检测Tensorflow:Yolo v3代码详解 (2)

    目标检测Tensorflow:Yolo v3代码详解 (2) 三.解析Dataset()数据预处理部分 四. 模型训练 yolo_train.py 五. 模型冻结 model_freeze.py 六. ...

  2. 【目标检测】YOLO系列——YOLOv1详解

    本篇是关于目标检测算法YOLOv1的学习笔记.网上的博客大多是摘抄翻译论文中的重点内容加上自己的理解,或者是梳理论文的大致思路,在没看过原文的情况下可能总会有些看不懂的地方.所以强烈建议博客搭配原文食 ...

  3. 目标检测模型 YOLO系列

    目标检测模型 YOLO系列 文章目录 目标检测模型 YOLO系列 YOLOv1 一.背景 二.YOLO模型 主要思想 模型结构 损失函数 三.优缺点 四.参考 YOLOv2与YOLO9000 YOLO ...

  4. 目标检测特殊层:PSROIPooling详解

    1. Position Sensitive ROI-Pooling 简介 Position Sensitive ROI Pooling(位置敏感的候选区域池化)是检测框架R-FCN的主要创新点.一般来 ...

  5. 深度学习之目标检测(十一)--DETR详解

    深度学习之目标检测(十一)-- DETR详解 目录 深度学习之目标检测(十一)-- DETR详解 1. 前言 2. DETR 框架 2.1 CNN Backbone 2.2 Transformer E ...

  6. 目标检测:YOLO V1、YOLO V2、YOLO V3 算法

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) yoloV3模型 目标检测:YOLO V1.YOLO V2.Y ...

  7. “快到没朋友”的目标检测模型YOLO v3问世,之后arXiv垮掉了…

    安妮 编译整理 量子位 出品 | 公众号 QbitAI 今天有三件事挺有意思. 一是以"快到没朋友"著称的流行目标检测模型YOLO推出全新v3版,新版本又双叒叕提升了精度和速度.在 ...

  8. onestage方法_目标检测——One-stage和Two-stage的详解

    目标检测--One-stage和Two-stage的详解 发布时间:2019-01-15 14:16, 浏览次数:2784 , 标签: One stage Two 二.Two-stage类别的目标检测 ...

  9. 目标检测经典算法和API详解(笔记)

    文章目录 商品目标检测 1. 目标检测概述 1.1.项目演示介绍 学习目标 1.1.1 项目演示 1.1.2 项目结构 1.1.3 项目安排 1.2 图像识别背景 学习目标 1.2.1 图像识别三大任 ...

  10. 单阶段目标检测模型YoLo系列(一):YoLoV3详解及代码实现

    目录 1.YoLoV3网络结构 1.1 Backbone:Darknet-53 1.2 构建特征金字塔 1.3 YoLo Head 2.yolov3模型预测结果的解码 2.1 先验框 2.2 检测框解 ...

最新文章

  1. java 导出 jar lib_java使用IDEA引入外部jar和导出可执行jar文件的方法
  2. python中的open函数实例_Python中open函数注意点
  3. 迭代器、代码块、闭包
  4. Vue学习笔记:Ref的使用
  5. HtmlUnit解析动态网页并采集网页列表到Excel
  6. Android Studio查找错误原因
  7. php include无效,php 两次include后,第一个include里的变量无效了
  8. 没有bug队——加贝——Python 练习实例 33,34
  9. 深入解析Mysql 主从同步延迟原理及解决方案
  10. 手把手玩转win8开发系列课程(9)
  11. 条件注释判断IE浏览器
  12. 正则表达式(二)之元字符
  13. 苹果ios、ipad加密视频播放器使用教程
  14. 制作微软引导盘实现装系统0失败uefi启动MediaCreationTool
  15. 无线路由器连接有线路由器设置
  16. VSCode正则表达式搜索
  17. JS检查日期是否为工作日
  18. 现在你可以通过深度学习用别人的声音来说话了
  19. 简单静态web页面+动画(小案例)
  20. iOS开发- ios学习资源(持续更新)

热门文章

  1. 分页查询,但是页面只重复显示一条数据
  2. 《遥感原理与应用》笔记/期末复习资料
  3. [微笔记]Houdini求切线
  4. Python获取城市列表
  5. 揭开集成芯片的面纱:物理意义上的
  6. Python 异或运算
  7. Genymotion——问题集(WIN10)
  8. java实现快排算法
  9. MySQL插入datetime类型字段
  10. 乐观锁和悲观锁的理解、适用场景、实现方式