一、YOLO v1

1、网络结构

(1)最后一层使用线性激活函数;

(2)其他各层使用leaky ReLU的激活函数:

2、Training

(1) 将原图划分为SxS的网格。如果一个目标的中心落入某个格子,这个格子就负责检测该目标,即Pr(object)=1。S取7;

(2) 每个网格要预测C个类别概率Pr(classi|object),C为20(不需要表示背景这一类,因为这20类概率都为0即表示为背景)。用于训练用的每个网格类别标签为,如果实际bounding box的中心在该网格上,且是第i类,则对应位置的概率为1,其他类别概率为0,否则C个类的概率都为0;

(3) 每个网格要预测B个bounding box:(x, y, w, h),论文中B取2。

关于(x,y,w,h)的定义不多说,看如下例子:

当某个格子含有object时,标签按上图方式计算。

(4)每个网格还要预测B个condidence:

如果格子内有物体,则Pr(Object)=1,此时置信度等于IoU。如果格子内没有物体,则Pr(Object)=0,此时置信度为0。当格子内有物体标签为1,没物体标签为0。(不知理解得是否正确)

(5)由于输入图像被分为SxS网格,每个网格包括B个bounding boxes,每个box有5个预测量:(x, y, w, h, confidence),每个网格还有预测C个类别的概率,所以网络输出是SxSx(5xB+C)大小。

(6)损失函数:

这里注意以下几点:

1)表示第i个网格,第j个bounding box含有object,表示第i个网格,第j个bounding box不含有object,表示第i个网格含有object;

2)由于绝大部分网格中不包含目标,导致绝大部分box的confidence=0,所以在设计confidence误差时同等对待包含目标和不包含目标的box也是不合理的,否则会导致模型不稳定。所以在预测误差中乘以惩罚权重λnoobj=0.5。除此之外,同等对待4个值(x, y, w, h)的坐标预测误差与1个值的conference预测误差也不合理,所以在坐标预测误差误差之前乘以权重λcoord=5。

3)对于大的box的小误差肯定要比小box的小误差影响更小,于是,采用对w,h,x,y取平方根的做法,因为平方根函数的图像随着x的增大会变得平缓。

4)加入了这一项,有这个好处,可以让没有物体的情况下confidence的输出预测值为较低(接近0)。也就是说,上式的损失函数,可以同时训练让confidence高与让confidence低两种情况。

5)我们发现每一项loss的计算都是L2 loss,即使是分类问题也是。所以说yolo是把分类问题转为了回归问题。

3、Inference

(1)在test的时候,每个网格预测的class信息和B个bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score:

等式左边第一项就是每个网格预测的类别概率,第二三项就是每个bounding box预测的confidence。这个乘积即表示box属于某一类的概率。

(2)得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。

(3)注意:

1)由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。

2)虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。这是YOLO方法的一个缺陷。

4、疑惑及解答

(1)训练时7x7xB个bbox的初始位置怎么确定?

是根据各层的权重得到的,各层权重是随机初始化的,所以bbox的初始置是随机的。但bbox的中心点都在对应网格内。

(2)训练时,当某个网格始终没有被检测物体的中心点选中,是不是该网格的对应的参数永远不会被训练?

不会,因为在最后一层卷积层之后连接了两层全连接层,其他网格也会对当前网格有有影响的。

参考:

yolo回归型的物体检测 - Jinlong_Xu的博客 - CSDN博客  https://blog.csdn.net/jinlong_xu/article/details/77888100

理解 YOLO 目标检测-图文外翻-AI研习社  https://ai.yanxishe.com/page/TextTranslation/1168

end

YOLO理解的更多相关文章

  1. 理解 YOLO

    YOLO: 1. YOLO的网络结构 YOLO v1 network (没看懂论文上的下图,看下面这个表一目了然了) 24层的卷积层,开始用前面20层来training, 图片是224x224的,然后 ...

  2. YOLO V3论文理解

    YOLO3主要的改进有:调整了网络结构:利用多尺度特征进行对象检测:对象分类用Logistic取代了softmax. 1.Darknet-53 network在论文中虽然有给网络的图,但我还是简单说一 ...

  3. YOLO V2论文理解

    概述 YOLO(You Only Look Once: Unified, Real-Time Object Detection)从v1版本进化到了v2版本,作者在darknet主页先行一步放出源代码, ...

  4. (转载)YOLO配置文件理解

    YOLO配置文件理解 转载自 [net] batch=64 每batch个样本更新一次参数. subdivisions=8 如果内存不够大,将batch分割为subdivisions个子batch,每 ...

  5. YOLO V1损失函数理解

    YOLO V1损失函数理解: 首先是理论部分,YOLO网络的实现这里就不赘述,这里主要解析YOLO损失函数这一部分. 损失函数分为三个部分: 代表cell中含有真实物体的中心. pr(object) ...

  6. 快速理解YOLO目标检测

    YOLO(You Only Look Once)论文 近些年,R-CNN等基于深度学习目标检测方法,大大提高了检测精度和检测速度. 例如在Pascal VOC数据集上Faster R-CNN的mAP达 ...

  7. YOLO配置文件理解

    [net] batch=64 每batch个样本更新一次参数. subdivisions=8 如果内存不够大,将batch分割为subdivisions个子batch,每个子batch的大小为batc ...

  8. Pytorch从0开始实现YOLO V3指南 part1——理解YOLO的工作

    本教程翻译自https://blog.paperspace.com/how-to-implement-a-yolo-object-detector-in-pytorch/ 视频展示:https://w ...

  9. 对yolo与fasterrcnn anchors的理解

    yolo: 通过聚类产生5个不同比例的anchors.最后一个特征层的输出(x,y,w,h)与这些不同比列的相乘,将网络层的输出转化为bbox(小尺寸),再通过(H,W)还原成原图大小.一共有5个bb ...

随机推荐

  1. 基于IntelliJ IDEA开发工具搭建SSM框架并实现页面登录功能详细讲解二

    接: 接下来配置类 UserController package com.chatRotbot.controller; import com.chatRotbot.model.User; import ...

  2. vue数据修改 但未渲染页面

    1. 普通的 `1.1 this.$set('obj',key,value); 1.2 this.splice(); 2.数据层次太多,没有触发render函数进行自动更新,需手动调用: this.$ ...

  3. WEB 设计规范

    WEB端设计规范 一.网页尺寸       一般网站宽为996px:国内网站大部分还是以1000个像素为界限,因超过1000像素适合在大屏幕上浏览,小屏幕会显得拥挤.国内尺寸设置比较保守,这样可以保证 ...

  4. Always an Integer 数论和字符串处理

    题意:判断一个整系数多项式除以一个常数结果是否一定是一个整数 大白p123例题.可以随机代入一些n的值,判断一下.不过只要代入1到k+1(k为多项式最高项的次数)即可.通过数学归纳法证明,先讨论k为0 ...

  5. Java中8种常见的排序方法

    排序方法的演示1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序)所需辅助空间最多:归并排序所需辅助空间最少 ...

  6. 201771010141 周强《面向对象程序设计(java)》第十三周学习总结

    实验目的与要求 (1) 掌握事件处理的基本原理,理解其用途: (2) 掌握AWT事件模型的工作机制: (3) 掌握事件处理的基本编程模型: (4) 了解GUI界面组件观感设置方法: (5) 掌握Win ...

  7. 从软件测试转型到C#上位机程序员

    一直在做软件测试的工作,天天与程序员不依不饶的争论细节的问题,没想到自己也有那么一天走上程序员的道路,由此开始,我的博客天天更新自己的学习状态,分享自己的心得. C#是微软公司发布的一种面向对象的.运 ...

  8. 终于开始我的java旅程了!

    首先今天先装了jdk1.7 ,找了半天,因为官网是都是让你装1.8的最新版本,地址如下: 所有jdk的历史版本: http://www.oracle.com/technetwork/java/java ...

  9. 忽略SIGPIPE信号

    #include <stdlib.h> #include <sys/signal.h> void SetupSignal() { struct sigaction sa; // ...

  10. "Loading a plug-in failed The plug-in or one of its prerequisite plug-ins may be missing or damaged and may need to be reinstalled"

    The Unarchiver 虽好,但存在问题比我们在mac上zip打包一个软件xcode, 然后copy to another mac, 这时用The Unarchiver解压缩出来的xcode包不 ...