上期给大家介绍了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. Python实现进度条和时间预估的示例代码

    一.前言 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手.很多已经做案例的人,却不知道如何去学习更加高深的知识.那么针对这三类人,我给大家 ...

  2. 【Mysql】SpringBoot_2.1.0+Druid_1.1.10 配置数据源监控服务Yml格式

    访问地址:localhost:8080/druid 按照这个方法和版本配置没问题 版本或高或低可能会出现不兼容 1.添加依赖 <dependency> <groupId>com ...

  3. 定宽整形(C++11起)

    定义于头文件 cstdint中int8_t.int16_t.int32_t.int64_t 分别为宽度恰为 8 . 16 . 32 和 64 位的有符号整数类型无填充位并对负值使用补码(仅若实现支持该 ...

  4. Vue <script></script>区域使用filter过滤器

    Vue中过滤器(filter)的功能高度提取,便于使用,前端小伙伴们使用的频率很高.但大多数都是在模板区域来使用. 如果要在脚本区域, 也就是来使用已经定义好过滤器功能,该如何去做呢? 难道需要在ut ...

  5. 漏洞重温之XSS(上)

    漏洞简介 跨站脚本攻击(XSS)是指恶意攻击者往Web页面里插入恶意Script代码,当用户浏览页面之时,嵌入web网页中的script代码会被执行,从而达到恶意攻击用户的目的. XSS漏洞通常是通过 ...

  6. MySQL空间函数实现位置打卡

    项目需求是跟用户当前位置判断是否在给定的地理位置范围内,符合位置限制才可以打卡,其中的位置范围是一个或多个不规则的多边形.如下图,判断用户是在清华还是北大. 图形获取区域坐标 因为项目前端使用微信小程 ...

  7. java泛型笔记

    目录 概述 什么是泛型?为什么使用泛型? 例子 特性 使用方式 泛型类 泛型接口 泛型通配符 泛型方法 泛型方法的基本用法 类中的泛型方法 泛型方法的基本用法 泛型方法与可变参数 静态方法与泛型 泛型 ...

  8. 贫血模型和DDD模型

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

  9. lombook插件的说明

    lombok是一个可以帮助我们简化java代码编写的工具类,尤其是简化javabean的编写,即通过采用注解的方式,消除代码中的构造方法,getter/setter等代码,使我们写的类更加简洁,当然, ...

  10. Reinforcement learning in artificial and biological systems

    郑重声明:原文参见标题,如有侵权,请联系作者,将会撤销发布! Abstract 在生物和人工系统的学习研究之间,已经有富有成果的概念和想法流.Bush and Mosteller,Rescorla a ...