前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >yolov1 模型理解

yolov1 模型理解

作者头像
嵌入式视觉
发布2022-09-05 14:21:01
5250
发布2022-09-05 14:21:01
举报
文章被收录于专栏:嵌入式视觉

Contents

本文为作者对 yolov1 算法学习的理解笔记,部分图片和文字来源于网络。

yolov1 单阶段目标检测网络

设计理念

yolov1 直接采用 regression(回归)的方法进行坐标框的检测以及分类,使用一个end-to-end的简单网络,直接实现坐标回归与分类。Yolo的CNN网络将输入的\(448*448\)图片分割成 S∗S 网格,然后每个单元格负责去检测那些中心点落在该格子内的目标,如图下图所示,可以看到狗这个目标的中心落在左下角一个单元格内,那么该单元格负责预测这个狗。每个单元格会预测 B 个边界框(bounding box)以及边界框的置信度(confidence score)。 

yolov1 网络详细设计

Yolov1 采用卷积网络来提取特征,然后使用全连接层来得到预测值,检测网络由24个convolutional layers和之后的两个connected layers组成。于convolutional layers,主要使用 1×1 卷积来做channle reduction,然后紧跟3×3卷积。对于卷积层和全连接层,采用 Leaky ReLU 激活函数:\(max(x,0.1x)\) 。但是最后一层却采用线性激活函数。

输出 tensors 为7*7*(2*5+20)解释

这里注意 yolov1 论文中,输入为448*448大小,输出tensors为7*7*(2*5+20),骨干网络为GoogLeNet。输出维度:7*7*(2*5+20):

1. 如果一个object的中心落在某个单元格上,那么这个单元格负责预测这个物体。

2. 每个单元格需要预测B个bbox值(bbox值包括坐标xy和宽高wh,原文中B=2),同时为每个bbox值预测一个置信度(confidence scores)。也就是每个单元格需要预测B×(4+1)个值。

3. 每个单元格需要预测C(物体种类个数,原文C=20,这个与使用的数据库有关)个条件概率值. 所以,最后网络的输出维度为S×S×(B×5+C)

详细解释如下图: 

将图片分为S×S个单元格(原文中S=7),之后的输出是以单元格为单位进行的:对于每一个单元格,前20个元素是类别概率值,然后2个元素是边界框置信度,两者相乘可以得到类别置信度,最后8个元素是边界框的 (x, y, w, h) 。这里。对于边界框为什么把置信度 c 和 (x, y, w, h) 都分开排列,而不是按照 (x, y, w, h, c) 这样排列,其实纯粹是为了计算方便,因为实际上这30个元素都是对应一个单元格,其排列是可以任意的。但是分离排布,程序上可以方便地提取每一个部分。这里来解释一下,首先网络的预测值是一个二维张量 P ,其shape为 [batch,7*7*30] 。采用切片,那么 \( P_{[:,0:7*7*20]} \) 就是类别概率部分,而 \( P_{[:,7*7*20:7*7*(20+2)]} \) 是置信度部分,最后剩余部分\( P_{[:,7*7*(20+2):]}\)是边界框的预测结果。这样,提取每个部分是非常方便的,这会方面后面的训练及预测时的计算。

输出维度各个参数计算方式

1. 知道了输出维度的解释,我们还需要知道每个单元格预测的B个(x,y,w,h,confidence)的向量和C个条件概率中,每个参数的含义和计算方式(假设图片宽为\(w_{i}\)和高为\(h_{i}\),将图片分为S*S网格):

2. (x, y):中心坐标的预测值 (x,y) 是相对于每个单元格左上角坐标点的偏移值,并且单位是相对于单元格大小的。对于下图中蓝色框的那个单元格(坐标为(xcol=1,yrow=4)),假设它预测的输出是红色框的bbox, 设bbox的中心坐标为(\( x_{c},y_{c} \)), 那么最终预测出来的(x,y)是经过归一化处理的,表示的是中心相对于单元格的offset,计算公式如下:

\frac{x_{c}}{w_{i}}*S-x_{col},\frac{y_{c}}{h_{i}}*S-y_{col}

3. (w, h):边界框的 w 和 h 预测值是相对于整个图片的宽与高的比例,理论上(x,y,w,h)4个元素的大小应该在 0−1 范围。

4. confidence:置信度是由两部分组成,一是格子内是否有目标,二是bbox的准确度。定义置信度为Pr(Object)∗IOUtruthpred,如果格子内有物体,则Pr(Object)=1,此时置信度等于IoU。如果格子内没有物体,则Pr(Object)=0,此时置信度等于0。

5. C类条件概率:条件概率定义为Pr(Classi|Object),表示该单元格存在物体且属于第i类的概率。在测试的时候每个单元格预测最终输出的概率定义为,Pr(Classi|Object)∗Pr(Object)∗IOUtruthpred=Pr(Classi)∗IOUtruthpred

详细解释参考下图(来源于网络):

损失函数理解

loss计算公式如下图(来源于网络):

yolo损失函数

损失函数分析:

1. Yolov1 算法将目标检测看成回归问题,所以公式中采用的是均方差损失函数。包含三类损失:bbox损失、confidence损失和categories损失,但是对不同的损失部分采用了不同的权重值。首先区分定位误差和分类误差。

2. 对于定位误差,即边界框坐标预测误差,采用较大的权重 \( \lambda_{coord} \) 。然后其区分不包含目标的边界框与含有目标的边界框的置信度,对于前者,采用较小的权重值 \( \lambda_{noobj} \) ,其它权重值均设为1,然后采用均方误差。

3. 为了平衡短边和长边对损失函数的影响,YOLO使用了边长的平方根来减小长边的影响。即预测值变为\( (x,y,\sqrt{w},\sqrt{h}) \)

yolov1 缺陷

  • 两个bounding box功能的重复降低了模型的精度;
  • 全连接层的使用不仅使特征向量失去了位置信息,还产生了大量的参数,影响了算法的速度;
  • 只使用顶层的特征向量使算法对于小尺寸物体的检测效果很差。

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • yolov1 单阶段目标检测网络
    • 设计理念
      • yolov1 网络详细设计
        • 输出 tensors 为7*7*(2*5+20)解释
          • 输出维度各个参数计算方式
            • 损失函数理解
              • yolov1 缺陷
              • 参考资料
              相关产品与服务
              图像识别
              腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档