计算机视觉-目标检测(二):从R-FCN到YOLO-v3

文章目录

  • 1. R-FCN
    • 1.1 动机
    • 1.2. R-FCN 网络结构
    • 1.3. R-FCN 的损失函数
    • 1.4. R-FCN的训练及性能
  • 2. YoLO-v1
    • 2.1 简介
    • 2.2 YOLO-v1网络结构
    • 2.3 目标函数
    • 2.4 YOLO-v1的优缺点
  • 3. YOLO-v2
    • 3.1 YOLO-v2相比v1的优化
  • 4. YOLO-v3
  • 参考

1. R-FCN

论文链接:R-FCN:Object Detection via Region-based Fully Convolutional Networks
论文出处:NIPS 2016

1.1 动机

Faster R-CNN包含两部分

  • Fully Convolutional subnetwork before RoI Layer
  • RoI-wise subnetwork

第1部分直接用普通分类网络的卷积层,用其来提取共享特征,然后使用RoI Pooling Layer在第1部分的最后一张特征图上进行提取针对各个RoIs的特征向量,然后将所有RoIs的特征向量都交由第2部分来处理(分类和回归),分别用来对每一个RoI进行分类和回归,这样就可以得到每个RoI的真实类别和较为精确的坐标和长宽

第一部分网络计算都是所有RoIs共享的,在一张图片测试的时候只需要进行一次前向计算。对于第2部分的RoI-wise subnetwork,不是所有RoIs共享,这一部分的作用是给每个RoI进行分类和回归,所以不能共享计算。

第1部分的网络具有“位置不敏感性”,如果将一个分类网络比如ResNet的所有卷积层都放置在第1部分用来提取特征,而第2部分则只剩下全连接层,目标检测网络是“位置不敏感的translation-invariance”,所以其检测精度会较低,并且也白白浪费了分类网络强大的分类能力。

ResNet论文中为了解决这样的位置不敏感的缺点,做出了一点让步,即将RoI Pooling Layer不再放置在ResNet-101网络的最后一层卷积层之后而是放置在了“卷积层之间”,这样RoI Pooling Layer之前和之后都有卷积层,并且RoI Pooling Layer之后的卷积层不是共享计算的,它们是针对每个RoI进行特征提取的,所以这种网络设计,其RoI Pooling Layer之后就具有了“位置敏感性translation-variance”,但是这样做牺牲了测试速度,因为所有RoIs都要经过若干层卷积计算,测试速度会很慢

注意:卷积网络是位置敏感的,能识别出目标在原图的相对位置;全连接网络是位置不敏感的

1.2. R-FCN 网络结构

如下图展示了F-RCN 与其他网络的区别
在这里插入图片描述
具体网络结构如下图所示,注意下图只展示了2部分,实际有三部分,还有一个BBOX 回归问题未画出来,后面会展示
在这里插入图片描述
使用 k 2 ( C + 1 ) k^2(C+1) k2(C+1)个通道对位置、类别进行编码

  • 类别:C个物体类+1个背景类
  • 相对位置: k × k k\times k k×k个grid(将ROI区域划分成 k × k k \times k k×k个区域,一般 k = 3 k=3 k=3
  • 如上图红框里的卷积层为位置敏感分值图(position sensitive score maps)
    • 每个分类都有 k 2 k^2 k2个score map
    • score map尺寸等于图片尺寸

将红框部分放大,得到如下图, 位置敏感分值图的形状为 k 2 ( c + 1 ) × w × h k^2(c+1) \times w \times h k2(c+1)×w×h,表示一共有 C + 1 C+1 C+1个类,每个类有 k 2 k^2 k2个 score map,每个score map 代表了对ROI中 k 2 k^2 k2个区域里每个区域的打分,每个score map 的大小为 w × h w \times h w×h

经过池化后,形状变为 ( c + 1 ) × k × k (c+1) \times k \times k (c+1)×k×k,代表一共有 c + 1 c+1 c+1个类,每个类对应区域的得分情况,最后通过投票得到C+1个得分
在这里插入图片描述
具体做法如下所示,以人这个目标为例,此处共有 3 × 3 = 9 3 \times 3 = 9 3×3=9个 score map,第一张图计算左上Grid的得分,将该grid中所有像素进行均值池化,其他同样计算。特征图在人的位置会高亮,如果框歪了,均值池化后相关得分会变低
在这里插入图片描述
以上是对类别进行预测,同理对BBOX回归一样计算,在ResNet的共享卷积层的最后一层上,接上一个与position-sensitive score map并行的(sibling)score maps,该score maps用于regression,暂且命名为“regression score map”,而该regression score map的维度应当是 4 k 2 4k^2 4k2 ,那么在经过Position-sensitive RoI pooling操作后,每一个RoI就会得到 4个数作为该RoI的坐标和长宽的偏移量

1.3. R-FCN 的损失函数

  • 总损失: L ( s , t x , y , w , h ) = L c l s ( s c ∗ ) + λ [ c ∗ > 0 ] L r e g ( t , t ∗ ) L\left(s, t_{x, y, w, h}\right)=L_{c l s}\left(s_{c^*}\right)+\lambda\left[c^*>0\right] L_{r e g}\left(t, t^*\right) L(s,tx,y,w,h)=Lcls(sc)+λ[c>0]Lreg(t,t)

  • 分类损失: L c l s ( s c ∗ ) = − l o g ( s c ∗ ) L_{cls}(s_{c^*}) = -log(s_{c^*}) Lcls(sc)=log(sc)

    • 对池化输出计算 k 2 k^2 k2区域上的均值投票
    • softmax归一化
  • Bounding Box回归损失函数

    • 4 k 2 4k^2 4k2通道的位置敏感卷积层
    • 使用位置敏感ROI池化获取 4 × k × k 4 \times k \times k 4×k×k 的输出
    • k × k k \times k k×k区域上均值投票
    • 损失函数与Faster CNN 类似,拟合偏差,如下图所示
      在这里插入图片描述
  • 每一个分类一个回归模型

1.4. R-FCN的训练及性能

(1)训练技巧

  • OHEM(online hard example mining)
    • 首先对RPN获得的候选ROI进行排序(正负样本分别排序)
    • 含有目标(正样本)的ROI 中选择前N 个ROI ,再将正负样本的比例维持1:3的范围内,保证每次抽取的样本中都会含有一定的正样本,这样训练可以提高网络的分类能力

(2)性能比较
又快又好
在这里插入图片描述

2. YoLO-v1

2.1 简介

  • YOLO将物体检测任务当作一个回归问题来处理,通过YOLO,每张图像只需看一眼就能得出图像中都有哪些物体和这些物体的位置。
  • 将图像resize到448*448作为神经网络的输入,使用神经网络直接来预测BBOX的坐标、BOX中包含物体的置信度和物体的可能性,然后进行非极大值一直筛选BOXES
  • YOLO最多可以检测9000个类别

其基本结构如下所示
在这里插入图片描述

2.2 YOLO-v1网络结构

基本过程
(1)使用Image Net 1000-class 的分类任务数据集预训练google net:使用前20个卷积层,加上平均池化层,最后加上全连接层,作为预训练网络
(2)将预训练结果的前20个卷积层引用到检测器中,并加入剩下的4个卷积层及2个全连接
(3)为了获取更精细化的结果,将输入图像的分辨率由 224 × 224 224 \times 224 224×224 提升到 448 × 448 448 \times 448 448×448
(4)将所有的预测结果都归一化到 [ 0 , 1 ] [0,1] [0,1]使用Leaky RELU作为激活函数
(5)防止过拟合,在第一个全连接层后面接一个 p = 0.5 p=0.5 p=0.5的Droupout层

在这里插入图片描述

输入输出
如上图所示,YOLO网络结构由24个卷积层构成与2个全连接层构成,网络输入图片大小为 448 × 448 448 \times 448 448×448,图片进入网络先经过resize,网络输出结果为一个张量。输出维度为 S × S × ( B ∗ 5 + C ) S \times S \times (B*5+C) S×S×(B5+C);在Pascal voc上,预测结果维度为 7 × 7 × ( 2 ∗ 5 + 20 ) 7 \times 7 \times (2*5+20) 7×7×(25+20)

其中S为划分网格数,B为每个网格负责目标数量,C为类被个数

YOLO-v1详解

  • 将一幅图像分成 S × S S \times S S×S个网格(grid cell)
  • 每个cell负责预测B(B=2)个BBox,以及这些BBox的confidence scores,这个得分反应了模型对于这个cell的预测:该cell是否包含物体,以及整个box的坐标预测的有多准,定义如下
    c o n f i d e n c e = P r ( O b j e c t ) ∗ I O U p r e d t r u t h \text confidence = Pr(Object)*IOU^{truth}_{pred} confidence=Pr(Object)IOUpredtruth
    前半部分表示包含物体的概率,后半部分表示坐标预测是否准确,如果整个cell中不存在物体,confidence=0,否则confidence为predicted bounding box与ground truth box之间的IOU。具体如下所示:
    在这里插入图片描述
  • 每个BBOX 有5个预测值:x, y, w, h, confidence;由于每个cell会预测两个BBOX因此占据了结果向量中前10个元素,如下图所示
    在这里插入图片描述
  • 每个栅格还要预测C类别条件概率: P r ( calss i ∣ Object ) Pr(\text {calss}_i|\text {Object}) Pr(calssiObject)。即在一个栅格包含一个物体的前提下,整个物体属于某个类别的概率,这里有20个类别,因此占据20位元素
    在这里插入图片描述
  • 在测试阶段,将每个栅格的条件类别概率与每个bbox的confidence相乘
    P r ( c l a s s i ∣ O b j e c t ) ∗ P r ( O b j e c t ) ∗ I O U p r e d t r u t h = P r ( c l a s s i ) ∗ I O U p r e d t r u t h Pr(class_i|Object)*Pr(Object)*IOU^{truth}_{pred}=Pr(class_i)*IOU^{truth}_{pred} Pr(classiObject)Pr(Object)IOUpredtruth=Pr(classi)IOUpredtruth

2.3 目标函数

如下图所示:

  • 第一个式子表示:定位是否准确,开根号是为了减小数值,方便训练
  • 中间两个式子(红框和黄框)是置信度预测是否准确C表示confidence;两个式子分别表示包含物体和不包含物体两种情形
  • 最后一个式子是看类别预测是否准确:在包含物体的情况下,预测类别和真实类别的差异
    在这里插入图片描述
  • 最后通过非极大值抑制去除无效框
    • 从所有检测框中找到confidence最大的框
    • 计算confidence最大的框与其他框的IOU,如果其值大于某个阈值(重合度过高),则剔除
    • 剩余框重复上述步骤,直到处理完所有的检测框
      在这里插入图片描述

注意上述NMS(非极大值抑制只针对是否包括目标,而不管具体是哪一类目标),使用完NMS后再来确定各个box的类别

  • 对于98(7*7*2)个box,首先将小于置信度阈值的值归零
  • NMS处理不是直接剔除,而是将其置信度设置为零
  • 最后确定各个box的类别,但其置信度不为0时才做检测输出结果

2.4 YOLO-v1的优缺点

优点

  • 检测物体速度快,一共才98个框
  • 假阳性率低(找不到的情况会存在,但是误判的概率很低)
  • 能够学习到更加抽象的物体特征

缺点

  • 检测精度低于其他的SOTA检测模型
  • 容易产生物体的定位错误
  • 对小物体的检测效果不好,尤其时密集小物体,因为一个栅格只能预测2个物体,且NMS过程容易误剔除(这是最严重的问题)

3. YOLO-v2

3.1 YOLO-v2相比v1的优化

  • Batch Normalization可以提高模型收敛速度,减少过拟合,在所有卷积层都应用了BN,结果提升2%
  • 高精度分类器(High Resolution Classifier
    • 基于Image Net数据集预训练模型,大部分分类器输入图像尺寸小于 256 × 256 256 \times 256 256×256
    • YOLO v2中,首先采用 448 × 448 448 \times 448 448×448分辨率的ImageNet数据fine tune使得网络适应高分辨率的输入
    • 然后将该网络用于目标检测任务fine tune。高分辨率输入使得结果提升了4% mAP
  • Covolutional With Anchor Boxes:借鉴了Faster R-CNN 中的anchor思想,用anchor box来预测bounding boxes。准确率只有小幅下降,但召回率提升了7%(注意faster rcnn中anchor box是9个,这里用了5个)
  • Dimension Clusters:使用Kmeans聚类方法训练bounding boxes,可以自动找到更好的boxes宽高维度
  • Direct location prediction
    • 在YOLO模型上采用anchor boxes 使得模型不稳定,大部分不稳定因素来源于boxes 位置(x, y)
    • 将预测偏移量改变为YOLO的预测grid cell的位置匹配性,将预测值限定在0-1范围内,增强稳定性
TODO 

4. YOLO-v3

v3较v2的改进点:

  • Loss不同:v3替换v2中的softmax loss变成logistic loss
  • v2用了5个anchor,v3用了3*3个anchor,提高了IOU
  • v2只有一个detection,v3有3个
  • backbone 不同:v2采用darknet-19,v3采用darknet-53
TODO

参考

[1]. 详解R-FCN-知乎
[2]. 物体检测之R-FCN-知乎
[3]. 计算机视觉零基础入门-B站

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/29257.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在提交代码时有哪些注意事项

分享 10 种适合初学者的技术,这些技术将帮助您立即编写更好的代码。因此,如果您准备好将您的编码技能提升到一个新的水平,请继续阅读! 1. 从计划开始 编写更好代码的最佳方法之一是从计划开始。在开始编码之前,请花几…

Nginx+Tomcat负载均衡、动静分离

Nginx应用 Nginx是一款非常优秀的HTTP服务器软件 支持高达50000个并发连接数的响应拥有强大的静态资源处理能力运行稳定内存、CPU等系统资源消耗非常低 目前很多大型网站都应用Nginx服务器作为后端网站程序的反向代理及负载均衡器,提升整个站点的负载并发能力 反向…

STM32 Proteu直流电机正反转控制系统限位开关-0035

STM32 Proteu直流电机正反转控制系统限位开关-0035 Proteus仿真小实验: STM32 Proteu直流电机正反转控制系统限位开关-0035 功能: 硬件组成:STM32F103C6单片机 L298N电机控制电路直流电机3个按键(正转、反转、停止)L…

Java企业级信息系统开发学习笔记(4.3) Spring Boot两种全局配置和两种注解

该文章主要为完成实训任务,详细实现过程及结果见【http://t.csdn.cn/Z2viP】 文章目录 一、Application.properites配置文件1.1 创建Spring Boot的Web项目ProperitesDemo1.2 在应用属性文件里添加相关配置1. 配置服务器端口号和web虚拟路径2. 对象类型的配置与使用&…

【6.09 代随_52day】 最长递增子序列、最长连续递增序列、最长重复子数组

最长递增子序列、最长连续递增序列、最长重复子数组 最长递增子序列1.方法图解步骤递归代码 最长连续递增序列1.动态规划的方法图解步骤代码 最长重复子数组图解步骤代码 最长递增子序列 力扣连接:300. 最长递增子序列(中等) 1.方法 dp[i]…

【计算机网络自顶向下】如何学好计网-第二章应用层

第二章 应用层 应用层协议原理 网络应用程序体系结构 客户机/服务器体系结构:至少有一个服务器,一个客户机,其中服务器总是打开的,具有固定的众所周知的IP地址,主机群集常被用于创建强大的虚拟服务器,而客…

开发新项目看过来,这3款基于 Vue 的免费开源的 admin 管理后台框架非常好用

三款 admin 框架,分别基于热门的前端 UI 组件库 ElementPlus / Ant Design / Naive UI 打造,开箱即用。 新项目的开始,一般是搭建 admin 系统,今天盘点一下3个好的选择。 Vue vben admin 了解详细:https://www.thos…

数据建模学习2--作业-利用matlab解决实际问题

文章目录 Malthus模型问题用最小儿二乘法估计阻滞增长模型自来水运输问题利用 Dijkstra 算法计算下图中起点 D 至各顶点得最短距离,需要给出 仅供参考,代码注意修改 Malthus模型问题 1790-1980年间美国每隔10年的人口数量记录如下表所示。 表1 1790-1…

虚拟机(VMware )部署

一、VMware 概述: VMware是一家提供虚拟化解决方案的领先公司,其产品被广泛应用于企业和个人用户的计算环境中。VMware的虚拟化技术可以将物理计算资源(如服务器、存储和网络)抽象成虚拟化的资源,从而提供更高的灵活性…

kali学习笔记(二)

一、关闭自动锁屏 关闭自动锁屏对于测试人员来说,可以按照自己的习惯来设置,不然kali会过十分钟就锁屏,有的时候会比较不方便。 1、使用root账号登录,在display设置选项中做如下设置。 2、把休眠选项关掉。 二、创建快照 关机创…

算法刷题-数组-长度最小的子数组

209.长度最小的子数组 力扣题目链接 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 示例: 输入:s 7, …

React-Redux 对Todolist修改

在单独使用redux的时候 需要手动订阅store里面 感觉特别麻烦 不错的是react有一个组件可以帮我们解决这个问题, 那就是react-redux。 react-redux提供了Provider 和 connent给我们使用。 先说一下几个重点知道的知识 Provider 就是用来提供store里面的状态 自动getState()co…

MySQL——视图(VIEW)详解

今天我们一起来学起视图(VIEW),那么视图是什么呢?视图有什么作用呢?视图一方面可以帮我们使用表的一部分而不是所有的表,另一方面也可以针对不同的用户制定不同的查询视图!带着问题一起来寻找答案吧~~~ 1. 常见的数据库…

Zookeeper概述

​ ZooKeeper概述 ZooKeeper是什么 zookeeper是一个为分布式应用程序提供的一个分布式开源协调服务框架。是Google的Chubby的一个开源实现,是Hadoop和Hbase的重要组件。主要用于解决分布式集群中应用系统的一致性问题。提供了基于类似Unix系统的目录节点树方式的数…

python3 爬虫相关学习9:BeautifulSoup 官方文档学习

目录 1 BeautifulSoup 官方文档 2 用bs 和 requests 打开 本地html的区别:代码里的一段html内容 2.1 代码和运行结果 2.2 用beautiful 打开 本地 html 文件 2.2.1 本地html文件 2.2.2 soup1BeautifulSoup(html1,"lxml") 2.3 用requests打开 本地 h…

【默认端口】市面上各种中间件、软件、服务的默认端口汇总

常用软件,中间件,服务的默认端口汇总 常用软件默认端口汇总 市面上各种中间件、软件和服务的默认端口众多,下面列举一些常见的默认端口: SSH(Secure Shell):22 Telnet:23 FTP…

赛宁网安助力智能网联汽车发展 | “饶派杯”XCTF车联网安全挑战赛圆满收官

​​ 2023年5月31日,“饶派杯”XCTF车联网安全挑战赛在江西省上饶市圆满落幕。本次大赛特邀国内21支精英战队参与比拼,参赛选手覆盖全国知名高校、自动驾驶汽车和科研院所等车联网安全人才。最终,经过9个小时激烈角逐,来自南京邮电…

后端(二):Servlet

我们上一张聊的是Tomcat,它其实就是一个 HTTP 服务器,而Servlet 是基于 Tomcat 的 原生api ,除了 Servlet,后面还有聊到很多 api 。 Servlet 是什么 Servlet(Server Applet)是Java Servlet的简称&#xf…

动态规划算法(多状态dp1)

动态规划算法专辑之多状态dp问题(1) 一、什么是多状态 多状态dp问题,指一个规模问题下存在多种状态,我们需要联合关注多种状态间的相互转移,才可以求解目的问题。 多状态问题可以理解为有限状态机,在有限…

centos 7 安装git并配置ssh

一、安装 1、查看是否安装git <span style"color:#333333"><span style"background-color:#ffffff"><code class"language-perl">rpm -qa|<span style"color:#0000ff">grep</span> git </code>…