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. 用jq实现移动端滑动轮播以及定时轮播效果

    Html的代码: <div class="carousel_img"> <div class="car_img" style="ba ...

  2. 推荐简约漂亮的小程序插件 calendar

    公司团队制作,主要用于内部使用,觉得这个感觉不错,所以推荐出来,让大家试试~ 日历功能 日历基本功能,自定义样式 先睹为快 使用方法: 1. 在微信小程序管理后台--设置--第三方服务,按 AppID ...

  3. java中接口和抽象类有什么区别,举例!

    2)接口和抽象类有什么区别?答:马克-to-win:抽象类里可以有实现的方法,接口里不能有,所以相对来讲各方面实现都简单(尤其动态方法调度).另外:类可以实现多个接口.反过来说,也正是抽象类一个致命伤 ...

  4. java如何读取和遍历properties文件

    在java项目开发过程中,使用properties文件作为配置基本上是必不可少的,很多如系统配置信息,文件上传配置信息等等都是以这种方式进行保存.同时学会操作properties文件也是java基础. ...

  5. 爬虫---scrapy全站爬取

    全站爬取1 基于管道的持久化存储 数据解析(爬虫类) 将解析的数据封装到item类型的对象中(爬虫类) 将item提交给管道, yield item(爬虫类) 在管道类的process_item中接手 ...

  6. centos7 装机后的基本配置

    安装完centos7.3后,做一些基本的操作 下面是我的环境的配置,你们可以根据自己的环境搭配相应的配置.修改下就可以了.基本操作一:主机名 centos7有一个新的修改主机名的命令hostnatct ...

  7. Typora中Markdown学习

    Typora中Markdown学习 标题 可以自己设置标题级数,且各标题之间可在大纲处看到鲜明的层级关系,非常方便清楚. "#"--一级标题 "##"--二级标 ...

  8. 前端CSS浮动、定位、溢出、z-index、透明度

    一.浮动float 在 CSS 中,任何元素都可以浮动. 浮动元素会生成一个块级框,而不论它本身是何种元素. 关于浮动的两个特点: 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的 ...

  9. Java学习day31

    同步方法的机制:synchronized,包括synchronized方法和synchronized块 同步方法:public synchronized void method(int args){ ...

  10. Codeforces Round #716 (Div. 2), problem: (B) AND 0, Sum Big位运算思维

    & -- 位运算之一,有0则0 原题链接 Problem - 1514B - Codeforces 题目 Example input 2 2 2 100000 20 output 4 2267 ...