上期给大家介绍了YOLO模型的检测系统和具体实现,YOLO是如何进行目标定位和目标分类的,这期主要给大家介绍YOLO是如何进行网络训练的,话不多说,马上开始!

前言:

输入图片首先被分成S*S个网格cell,每个网格会预测B个边界框bbox,这B个边界框来定位目标,每个边界框又包含5个预测:x,y,w,h和置信度confidence.那这取值有什么约束嘛?如下图所示:

黄色的圆圈代表了中间这个网格的中心点,红色的圆圈代表了这个红色方框的中心点,则x,y的取值是两个中心的偏移量和 cell 本身宽高的比值:

x = (bbox.x-cell.x)/cell.width

y = (bbox.y - cell.y)/cell.height

bbox 的宽高w,h是和整张图片的宽高的比值:

w = bbox.width / image.width

h = bbox.height / image.height

现在回到我们YOLO的训练上。

YOLO训练

YOLO先使用ImageNet数据集对前20层卷积神经网络进行预训练,然后使用完整的网络,在Pascal voc2007和2012数据集上进行对象识别和定位的训练和预测。网络结构图如下所示:

YOLO的最后一层采用线性激活函数,其它层都是Leaky Relu,训练过程中为了防止数据过拟合,数据过拟合的话对于外来检测的数据的检测效果会不好,采用了(drop out)正则化和数据增强(data augmentation)技术防止过拟合。

YOLO损失函数

损失就是网格实际输出值和样本标签之间的偏差:

总的来说就是,就是用网格输出与样本标签的各项内容的误差平方和作为一个样本的整体误差,损失函数中的五项分别对应于每一个网格的输出的30维相对应,边框中心xy,宽高wh,可以称为定位误差,以及边框是否有对象,和有对象时的分类误差,可以称为分类误差。

YOLO预测:

在上期中我已经讲解来了YOLO是如何进行目标定位和分类了,输入一张图片到我们已经训练好了的YOLO网络,将输出一个7*7*30的张量来表示图片中所有网格包含的对象(概率)以及该网格中对象可能的两个位置(bounding box)以及可信程度(置信度),就是说一张图片上最后会有98个边界框,那么如何找到最有可能的对象和位置呢? 如下图所示:

这就用到 交并比(Intersection over union 和非极大值抑制(Non-max suppression )算法。

交并比:

如下图,把A和B分别当做一个边界框,由于我们从预测结果中可以得到边界框的宽高和中心坐标,我们就可以计算边界框A和边界框B的面积,从而计算他们之间的交并比,又假如A是实际边界框,而B是预测框,那么当A和B之间的交并比大于0.5时,判断预测这个框预测正确,否则舍弃这个框。

那剩下还有许多边界框怎么办呢?

最后附上TensorFlow版的YOLOv1的代码地址:下载好代码装好环境即可使用预训练好了的权重就可测试https://github.com/gliese581gg/YOLO_tensorflow,下载下来进行自己的训练吧!

参考:

https://zhuanlan.zhihu.com/p/32525231

https://link.zhihu.com/?target=https%3A//segmentfault.com/a/1190000016692873%3Futm_source%3Dtag-newest

往期推荐:

小白也能弄懂的目标检测之YOLO系列 - 第一期​

小白也能弄懂的目标检测YOLO系列之YOLOV1 - 第二期​

更多有关python、深度学习和计算机编程和电脑知识的精彩内容,可以关注微信公众号:码农的后花园

小白也能弄得懂的目标检测YOLO系列之YOLOv1网络训练的更多相关文章

  1. 小白也能弄懂的目标检测YOLO系列之YOLOV1 - 第二期

    上期给大家展示了用VisDrone数据集训练pytorch版YOLOV3模型的效果,介绍了什么是目标检测.目标检测目前比较流行的检测算法和效果比较以及YOLO的进化史,这期我们来讲解YOLO最原始V1 ...

  2. 第四节,目标检测---YOLO系列

    1.R-CNN回顾 适应全卷积化CNN结构,提出全卷积化设计 共享ResNet的所有卷积层 引入变换敏感性(Translation variance) 位置敏感分值图(Position-sensiti ...

  3. 目标检测YOLO进化史之yolov1

    yolov3在目标检测领域可以算得上是state-of-art级别的了,在实时性和准确性上都有很好的保证.yolo也不是一开始就达到了这么好的效果,本身也是经历了不断地演进的. yolov1 测试图片 ...

  4. [目标检测]RCNN系列原理

    1 RCNN 1.1 训练过程 (1) 训练时采用fine-tune方式: 先用Imagenet(1000类)训练,再用PASCAL VOC(21)类来fine-tune.使用这种方式训练能够提高8个 ...

  5. 深度学习笔记之目标检测算法系列(包括RCNN、Fast RCNN、Faster RCNN和SSD)

    不多说,直接上干货! 本文一系列目标检测算法:RCNN, Fast RCNN, Faster RCNN代表当下目标检测的前沿水平,在github都给出了基于Caffe的源码. •   RCNN RCN ...

  6. 小白也能弄懂的目标检测之YOLO系列 - 第一期

    大家好,上期分享了电脑端几个免费无广告且实用的录屏软件,这期想给大家来讲解YOLO这个算法,从零基础学起,并最终学会YOLOV3的Pytorch实现,并学会自己制作数据集进行模型训练,然后用自己训练好 ...

  7. [目标检测]YOLO原理

    1 YOLO 创新点: 端到端训练及推断 + 改革区域建议框式目标检测框架 + 实时目标检测 1.1 创新点 (1) 改革了区域建议框式检测框架: RCNN系列均需要生成建议框,在建议框上进行分类与回 ...

  8. 目标检测(五)YOLOv1—You Only Look Once:Unified,Real-Time Object Detection

    之前的目标检测算法大都采用proposals+classifier的做法(proposal提供位置信息,分类器提供类别信息),虽然精度很高,但是速度比较慢,也可能无法进行end-to-end训练.而该 ...

  9. 目标检测-yolo

    论文下载:http://arxiv.org/abs/1506.02640 代码下载:https://github.com/pjreddie/darknet 1.创新点 端到端训练及推断 + 改革区域建 ...

随机推荐

  1. EfficientNet

  2. JQuery的turn.js实现翻书效果

    前言: hello大家好~好久没更博了……今天来和大家分享下JQ的turn.js,下面我先来简单介绍下我们今天的主角turn.js. Turn.js是一个JavaScript库,它集合了HTML5的所 ...

  3. C/C++中char[]和string的连接/合并

    一: C风格字符串连接 #include <iostream> using namespace std; int main() { const char *str = "hell ...

  4. C#LeetCode刷题之#500-键盘行(Keyboard Row)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3796 访问. 给定一个单词列表,只返回可以使用在键盘同一行的字母 ...

  5. LeetCode 122 best-time-to-buy-and-sell-stock-ii 详解

    题目描述 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你 ...

  6. 【期外】 (一)关于LSH :局部敏感哈希算法

    LSH是我同学的名字,平时我会亲切的称呼他为离骚,老师好,左移(leftshift),小骚骚之类的,最近他又多了一个新的外号:局部敏感哈希(Locally sensitive hashing). 好了 ...

  7. 【Flutter 实战】一文学会20多个动画组件

    老孟导读:此篇文章是 Flutter 动画系列文章第三篇,后续还有动画序列.过度动画.转场动画.自定义动画等. Flutter 系统提供了20多个动画组件,只要你把前面[动画核心](文末有链接)的文章 ...

  8. 使用CrashHandler获取应用crash信息

      Android应用不可避免会发生crash,也称之为崩溃.发生原因可能是由于Android系统底层的bug,也可能是由于不充分的机型适配或者是糟糕的网络情况.当crash发生时,系统会kill掉正 ...

  9. JavaScript学习系列博客_25_JavaScript 数组(Array)

    数组 - 数组也是一个对象,是一个用来存储数据的对象,和Object类似,但是它的存储效率比普通对象要高. - 数组中保存的内容我们称为元素 - 数组使用索引(index)来操作元素 - 索引指由0开 ...

  10. 贫血模型和DDD模型

    贫血模型和DDD模型 1.贫血模型 1.1 概念 常见的mvc三层架构 简单.没有行为 2.领域驱动设计 2.1 概念(2004年提出的) Domain Driven Design 简称 DDD DD ...