yolov1学习笔记

yolov1将目标检测归为一个回归问题,具有real-time的特点。局限性是:对于群体性的小目标检测效果很差。

论文概括

本文重新构造目标检测作为一个回归问题。
直接输入图像到神经网络中,得到bounding box的坐标和类别信息。

论文思想

  1. 将一幅图像分成S×S个网格(grid cell),如果某个object

    的中心落在这个网格中,则这个网格就负责预测这个object。
  2. 每个网格要预测B(这里的B取2)个bounding box,每个bounding box除了要预测位置之外,还要附带预测一个confidence值(也就是说每个bounding box需要预测5个值即:四个坐标和一个confidence值)。每个网格还要预测C个类别的分数。
原文1:
For evaluating YOLO on PASCAL VOC, we use S = 7,
B = 2. PASCAL VOC has 20 labelled classes so C = 20.
Our final prediction is a 7 × 7 × 30 tensor.
原文2:
Each bounding box consists of 5 predictions: x, y, w, h,
and confidence. The (x, y) coordinates represent the center
of the box relative to the bounds of the grid cell. The width
and height are predicted relative to the whole image. Finally
the confidence prediction represents the IOU between the
predicted box and any ground truth box.
原文3:(confidence定义)
Formally we define confidence as Pr(Object) ∗ IOUtruth pred
原文4:
At test time we multiply the conditional class probabilities and the individual box confidence predictions,
Pr(Classi|Object) ∗ Pr(Object) ∗ IOUtruth pred = Pr(Classi) ∗ IOUtruth pred (1)
  1. 这里的x,y是个相对值(在一个cell中变化在(0-1)之间),这里的w,h相对整幅图像(0-1之间)。这里的x,y,w,h是直接预测位置的。
  2. Confidence : 预测目标与真实目标的交并比×P(Object)(0和1两种情况)当包含物体是为1
  3. 这里的Pr(Classi | Object)是指C个类别中的类别分数,这里与faster-rcnn和ssd中的不是一样的

网络结构

Step1:是一个7×7的卷积层,step=2,通过一个maxpool layer2×2,step=2

Step2:是一个3×3卷积层,这里没写s默认step=1,通过一个maxpllo layer2×2,step=2

Step3:通过1×1的卷积层,3×3的卷积层,1×1的卷积层,3×3的卷积层,通过一个maxpool layer

Step4:通过1×1的卷积层,3×3的卷积层(重复4遍),然后再通过1×1卷积层,3×3卷积层,通过一个maxpool layer

Step5: 通过1×1的卷积层,3×3的卷积层(重复2遍),再通过3×3卷积层,3×3卷积层step=2

Step6:通过3×3的卷积层,3×3的卷积层

Step7:得到一个7×7×1024

Step8: 展平,连接一个4096维的全连接层,最后得到一个4096维的向量

Step9: 连接一个1470(对应后面的7×7×30)维的全连接层,最后reshape成7×7×30的特征矩阵

这里的30由来:20个类别,且每个网格需要预测B(=2)个bounding box(包含4个位置信息1个confidence值)
这里的一个黄色柱体可以理解成一个grid cell
这里有两个bounding box最后会根据跟groud truth的IOU比选出最大的一个

损失函数

  • 这里的损失函数使用误差平方和进行求解

Bounding box部分损失

  • 疑问:宽和高为什么要进行开根号处理???

这里绿色代表真实边界框,蓝色代表预测边界框
假设预测边界框相对于真实边界框都有一个偏移,假设偏移是一摸一样的 对于上面的小目标预测结果很差,对于大目标预测结果还行
对于真实的边界框同样偏移同样的宽度和高度,但对于不同尺度的目标来说他的IOU都是不一样的,即对于小目标
来说他的IOU更小,检测结果更差,所以不能使用预测的宽度减去真实的宽度

  • 如上图所示:如果是y=x这条线对于小目标(前面的)和大目标(后面的),他们的差值(图中绿色部分)是一样的

  • 但是对于y=√x来说,假设这里的差值是一摸一样的,但是此时小目标的差值是大于大目标的(图中红色部分),也就是说此时更加关注小目标的

    定位损失

confidence部分损失?

  • 第一个是正样本的损失,第二个是负样本(没有目标)的损失(正样本真实值等于1负样本真实值等于0)
  • 其他设置
增加包含目标的loss,减少不包含目标的loss
set λcoord = 5 and λnoobj = .5
Ⅱ(obj/ij):第j个bounding box负责预测第i个单元格

Yolov1的局限性:

  • 对于群体性的小目标检测效果很差?

    1. 因为yolov1对于每个cell只预测两个bounding box,都属于同一个类别的
    2. 当目标出现新的尺寸和配置的话检测效果差
    3. 主要的错误原因都来自定位不准确的原因: 主要是作者采用了直接预测的原因,而不是像faster-rcnn,ssd那样

      预测anchor的回归参数------再yolov2中会采用anchor形式

实验部分

图4显示了所有20个类中平均的每种错误类型
yolo在定位是产生更多错误
Fast R-CNN参数更少的定位错误但是更多的背景错误

该模型在小的连在一起的表现不太好
例如:
Our system struggles with small objects compared to its closestcompetitors.
On categories like bottle, sheep, and tv/monitor
YOLO scores 8-10% lower than R-CNN or Feature Edit
但是:
However, on other categories like cat and
train YOLO achieves higher performance Our combined Fast R-CNN + YOLO model is one of the
highest performing detection methods

yolov1学习笔记的更多相关文章

  1. yolov2学习笔记

    Yolov2学习笔记 yolov2在yolov1的基础上进行一系列改进: 1.比如Batch Normalization,High Resolution Classifier,使用Anchor Box ...

  2. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  3. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  4. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  5. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  6. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  7. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  8. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  9. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

随机推荐

  1. 写了一个web os脚手架

    预览地址在这里:http://thx.github.io/magix-os/项目地址在这里:https://github.com/thx/magix-os 介绍下目录结构 核心目录cores主要是构成 ...

  2. zhilizhili-ui 荡平ie8910 还我前端清净地

    zhilizhili-ui 给大家带来一个目前最新版本的ie8方案 特色 flexbox部分功能 vw vh calc部分功能 angular1.4 todo avalon是因为无法和polyfill ...

  3. MySQL优化篇系列文章(二)——MyISAM表锁与InnoDB锁问题

    我可以和面试官多聊几句吗?只是想... MySQL优化篇系列文章(基于MySQL8.0测试验证),上部分:优化SQL语句.数据库对象,MyISAM表锁和InnoDB锁问题. 面试官:咦,小伙子,又来啦 ...

  4. Python爬虫报错:"HTTP Error 403: Forbidden"

    错误原因:主要是由于该网站禁止爬虫导致的,可以在请求加上头信息,伪装成浏览器访问User-Agent. 新增user-agent信息: headers = {'User-Agent':'Mozilla ...

  5. springboot+mybatis实现数据分页(三种方式)

    项目准备 1.创建用户表 2.使用spring初始化向导快速创建项目,勾选mybatis,web,jdbc,driver 添加lombok插件 <?xml version="1.0&q ...

  6. SpringMVC获取请求参数-集合类型

    1.创建User实体类 ```java public class User { private String username; private int age; public String getU ...

  7. 集成JUnit测试

    集成JUnit测试 既然使用了Spring,那么怎么集成到JUnit中进行测试呢,首先大家能够想到的肯定是: public class TestMain { @Test public void tes ...

  8. 检查是否安装ASM

    ASM和管理 ASM是一个有效的抽象层,使Oracle数据库可以与叫做DiskGroups的抽象空间一起使用,而不是直接使用DataFiles. Oracle ASM脱离操作系统的文件系统约束,使得对 ...

  9. Hadoop-Hive组件部署

    一.基础环境 Hive 组件需要基于之前已部署完毕的 Hadoop 全分布系统,在 master 节点上实现 Hive 组件安装. 1.Hadoop-全分布式配置(全部配置) 2.Hadoop-集群运 ...

  10. Lumia1520 手机刷 Windows10 arm双系统

    注意问题 升级到Windows 10 Mobile 的需重新刷回WP8.1,否则解锁会失败 部分手机刷机win10arm后出现屏幕卡死现象,目前除了换屏或重新焊接暂无其他解决方案,请谨慎刷机(当然如果 ...