目标检测模型YOLO-V1损失函数详解
❝
上期我们一起学习了
YOLOV1
算法的原理框架,如下:
目标检测算法YOLO-V1算法详解
今天我们深入一步,一起学习下关于YOLO-V1
算法的损失函数和优缺点。❞
YOLO-V1损失函数
从上期我们知道,YOLO-V1
算法最后输出的检测结果为7x7x30
的形式,其中30
个值分别包括两个候选框的位置和有无包含物体的置信度以及网格中包含20
个物体类别的概率。那么YOLO
的损失就包括三部分:位置误差,confidence
误差,分类误差。
损失函数的设计目标就是让坐标(x,y,w,h)
,confidence
,classification
这个三个方面达到很好的平衡。YOLO-V1
算法中简单的全部采用了sum-squared error loss
来做这件事,如下图:
在上图中,我们也能清晰的看出来,整个算法的损失是由预测框的坐标误差,有无包含物体的置信度误差以及网格预测类别的误差三部分组成,三部分的损失都使用了均方误差的方式来实现。
我们知道,如果8
维的localization error
,两个置信度error
和20
维的classification error
同等重要显然是不合理的;还有如果一个网格中没有object
(一幅图中这种网格很多),那么就会将这些网格中的box
的confidence push
到0
,相比于较少的有object
的网格,这种做法是overpowering
的,这会导致网络不稳定甚至发散。这里算法中用了权重系数来进行平衡,对于不同的损失用不同的权重,我们来逐个看:
位置损失
从上图可以看出,坐标损失也分为两部分,坐标中心误差和位置宽高的误差,其中 表示第i
个网格中的第j
个预测框是否负责obj
这个物体的预测,只有当某个box predictor
对某个ground truth box
负责的时候,才会对box
的coordinate error
进行惩罚,而对哪个ground truth box
负责就看其预测值和ground truth box
的IoU
是不是在那个网格的所有box
中最大。
我们可以看到,对于中心点的损失直接用了均方误差,但是对于宽高为什么用了平方根呢?这里是这样的,我们先来看下图:
上图中,蓝色为bounding box
,红色框为真实标注,如果W
和h
没有平方根的话,那么bounding box
跟两个真实标注的位置loss
是相同的。但是从面积看来B
框是A
框的25
倍,C
框是B
框的81/25
倍。B
框跟A
框的大小偏差更大,所以不应该有相同的loss
。
如果W
和h
加上平方根,那么B
对A
的位置loss
约为3.06
,B
对C
的位置loss
约为1.17
,B
对A
的位置loss
的值更大,这更加符合我们的实际判断。所以,算法对位置损失中的宽高损失加上了平方根。
而公式中的 为位置损失的权重系数,在pascal VOC
训练中取5
。
置信度损失
这里分成了两部分,一部分是包含物体时置信度的损失,一个是不包含物体时置信度的值。置信度的定义,我们上期学习过,这里结合置信度损失再看一下:
其中前一项表示有无人工标记的物体落入网格内,如果有,则为1
,否则为0
.第二项代表bounding box
和真实标记的box
之间的IoU
。值越大则box
越接近真实位置。
confidence
是针对bounding box
的,由于每个网格有两个bounding box
,所以每个网格会有两个confidence
与之相对应。
从损失函数上看,当网格i
中的第j
个预测框包含物体的时候,用上面的置信度损失,而不包含物体的时候,用下面的损失函数。对没有object
的box
的confidence loss
,赋予小的loss weight
, 记为在pascal VOC
训练中取0.5
。有object
的box
的confidence loss
和类别的loss
的loss weight
正常取1
。
类别损失
类别损失这里也用了均方误差,实际上,感觉这里用交叉熵更好一些。其中 表示有无object
的中心点落到网格i
中,如果网格中包含有物体object
的中心的话,那么就负责预测该object
的概率。
总体来说,对于不同的任务重要程度不同,所以也应该给与不同的loss weight
:
每个网格两个预测框坐标比较重要,给这些损失赋予更大的
loss weight
,在pascal VOC
中取值为5
.对没有
object
的box
的confidence loss
,赋予较小的loss weight
,在pascal VOC
训练中取0.5
.对有
object
的box
的confidence loss
和类别的loss weight
正常取值为1
.
YOLO-V1的缺点
由于YOLOV1
的框架设计,该网络存在以下缺点:
每个网格只对应两个
bounding box
,当物体的长宽比不常见(也就是训练数据集覆盖不到时),效果较差。原始图片只划分为
7x7
的网格,当两个物体靠的很近时,效果比较差。最终每个网格只对应一个类别,容易出现漏检(物体没有被识别到)。
对于图片中比较小的物体,效果比较差。这其实是所有目标检测算法的通病。
好了,至此,我们这两期学习了YOLO-V1
的结构框架和损失函数。下期我们将一起学习YOLO-V2
的框架,看看YOLO-V2
对YOLO-V1
做了哪些改进。
♥转发在看也是一种支持♥
目标检测模型YOLO-V1损失函数详解相关推荐
- 目标检测Tensorflow:Yolo v3代码详解 (2)
目标检测Tensorflow:Yolo v3代码详解 (2) 三.解析Dataset()数据预处理部分 四. 模型训练 yolo_train.py 五. 模型冻结 model_freeze.py 六. ...
- 【目标检测】YOLO系列——YOLOv1详解
本篇是关于目标检测算法YOLOv1的学习笔记.网上的博客大多是摘抄翻译论文中的重点内容加上自己的理解,或者是梳理论文的大致思路,在没看过原文的情况下可能总会有些看不懂的地方.所以强烈建议博客搭配原文食 ...
- 目标检测模型 YOLO系列
目标检测模型 YOLO系列 文章目录 目标检测模型 YOLO系列 YOLOv1 一.背景 二.YOLO模型 主要思想 模型结构 损失函数 三.优缺点 四.参考 YOLOv2与YOLO9000 YOLO ...
- 目标检测特殊层:PSROIPooling详解
1. Position Sensitive ROI-Pooling 简介 Position Sensitive ROI Pooling(位置敏感的候选区域池化)是检测框架R-FCN的主要创新点.一般来 ...
- 深度学习之目标检测(十一)--DETR详解
深度学习之目标检测(十一)-- DETR详解 目录 深度学习之目标检测(十一)-- DETR详解 1. 前言 2. DETR 框架 2.1 CNN Backbone 2.2 Transformer E ...
- 目标检测:YOLO V1、YOLO V2、YOLO V3 算法
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) yoloV3模型 目标检测:YOLO V1.YOLO V2.Y ...
- “快到没朋友”的目标检测模型YOLO v3问世,之后arXiv垮掉了…
安妮 编译整理 量子位 出品 | 公众号 QbitAI 今天有三件事挺有意思. 一是以"快到没朋友"著称的流行目标检测模型YOLO推出全新v3版,新版本又双叒叕提升了精度和速度.在 ...
- onestage方法_目标检测——One-stage和Two-stage的详解
目标检测--One-stage和Two-stage的详解 发布时间:2019-01-15 14:16, 浏览次数:2784 , 标签: One stage Two 二.Two-stage类别的目标检测 ...
- 目标检测经典算法和API详解(笔记)
文章目录 商品目标检测 1. 目标检测概述 1.1.项目演示介绍 学习目标 1.1.1 项目演示 1.1.2 项目结构 1.1.3 项目安排 1.2 图像识别背景 学习目标 1.2.1 图像识别三大任 ...
- 单阶段目标检测模型YoLo系列(一):YoLoV3详解及代码实现
目录 1.YoLoV3网络结构 1.1 Backbone:Darknet-53 1.2 构建特征金字塔 1.3 YoLo Head 2.yolov3模型预测结果的解码 2.1 先验框 2.2 检测框解 ...
最新文章
- java 导出 jar lib_java使用IDEA引入外部jar和导出可执行jar文件的方法
- python中的open函数实例_Python中open函数注意点
- 迭代器、代码块、闭包
- Vue学习笔记:Ref的使用
- HtmlUnit解析动态网页并采集网页列表到Excel
- Android Studio查找错误原因
- php include无效,php 两次include后,第一个include里的变量无效了
- 没有bug队——加贝——Python 练习实例 33,34
- 深入解析Mysql 主从同步延迟原理及解决方案
- 手把手玩转win8开发系列课程(9)
- 条件注释判断IE浏览器
- 正则表达式(二)之元字符
- 苹果ios、ipad加密视频播放器使用教程
- 制作微软引导盘实现装系统0失败uefi启动MediaCreationTool
- 无线路由器连接有线路由器设置
- VSCode正则表达式搜索
- JS检查日期是否为工作日
- 现在你可以通过深度学习用别人的声音来说话了
- 简单静态web页面+动画(小案例)
- iOS开发- ios学习资源(持续更新)