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

news2024/11/17 11:52:37

文章目录

  • 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站

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java格式化数字 NumberFormat及DecimalFormat

一、JavaAPI官方描述 1、NumberFormat NumberFormat帮助您格式化和解析任何区域设置的数字。您的代码可以完全独立于小数点,千位分隔符的区域设置约定,甚至是使用的特定十进制数字,或者数字格式是否为十进制。 2、 DecimalFormat Decimal…

Linux之YUM管理工具

目录 Linux之YUM管理工具 定义 实现YUM的三个机制 RHEL8中yum源变化说明 案例 示例1 --- 建立本地光盘源(本地yum源) 示例2 --- 配置互联网源 yum(dnf)工具管理软件包 安装软件包 module子命令 案例 yum-config-manager的使用 定义 yum-conf…

Linux系统如何配置网络

Linux系统的三种网络模式: 桥接:可以和外部设备通信,主机和Ubuntu分别使用不同的IP地址NAT:可以和外部设备通信,主机和Ubuntu公用一个IP地址主机:只能和主机通信 在此我们介绍如何配置桥接网络&#xff1…

谓词的介绍与基本使用

🚨谓词 🚦概念 1.返回类型为bool的仿函数 2.接受一个参数—一元谓词 接受一个参数—二元谓词 🚀1.一元谓词 ⛽使用方法 因为返回值为bool类型,所以经常会将他使用成判断关系的函数 我们使用find_if()对…

HBase 2.3.7中snappy压缩配置

本文将介绍如何在HBase 2.3.7中配置snappy压缩。snappy是一种快速的数据压缩和解压缩算法,可以提高HBase的存储空间利用率和读写性能。本文将使用HBase 2.3.7版本,运行在三个Ubuntu系统的虚拟机中,分别作为master和slave节点。 主要步骤如下…

【SpringBoot】SpringBoot Starter 作用及原理

文章目录 前言一、什么是 Starter二、Starter 的作用三、spring 整合组件四、spring-boot 整合组件五、Starter 原理 前言 有没有在入行后直接基于 SpringBoot 开发项目,没有 spring、servlet 开发经历的? 有没有用 SpringBoot 开发项目,但是第一次听…

服务注册中心Eureka

服务注册中心Eureka Eureka介绍Eureka 环境搭建Eureka 集群配置Eureka 的自我保护模式Eureka 架构图 Eureka介绍 在微服务架构中,有着许许多多的微服务,微服务之间需要彼此进行远程调用,需要知道彼此的地址,通过人工的方式去管理…

C++算法:加权连通图的最小生成树(Prim)

文章目录 前言一、Prim算法原理二、算法实现1、生成图2、Prim 总结原创文章,未经许可,严禁转载 前言 在前文加权连通图的最小生成树(Kruskal)中已经用以边找点的方式实现最小生成树的生成。Prim算法也是一种常用的最小生成树算法,和Kruskal不…

python 妙笔生花

1.学习编程好处 最主要的好处就是,思考问题的方式变得更加具有逻辑性。 日常我们敲代码时,需要思考每一行的代码执行效果,它就需要认真设计每行代码可用性。如果在设计上发生错误,在代码执行时就会报错。还能做到 触类旁通。 古语有云: 有道无术,术可求,有术无道,止于术…

armbian可视化查看系统的使用情况

文章目录 armbian查看系统的使用情况在终端可视化查看方式htop简介htop安装和使用的步骤 在浏览器可视化查看方式 armbian查看系统的使用情况 在终端可视化查看方式 htop简介 htop’是一款任务管理器和系统监视工具,可在Armbian Linux中使用。它提供了比默认任务…

Python使用多线程操作tif影像和HBase数据库

本文介绍使用Python的多线程技术,提高happybase模块和gdal模块的效率,从tif格式的影像文件中读取数据,并将其存储到HBase数据库中。主要步骤包括: 准备工作:安装Python环境,安装happybase模块和gdal模块&a…

windows安装jdk1.8

1.下载jdk8 https://www.oracle.com/java/technologies/downloads/#java8-windows 百度网盘: 链接: https://pan.baidu.com/s/1qtVZ3Rsa1_n9XsFcXj07rA 提取码: yhwc 2.双击以后进行JDK的安装 操作前先在D盘保存java文件夹,里面新建jdk1.8.0_241文件…

AntDB 替换某省电信大数据平台的案例分享

亚信自研分布式数据库AntDB落地某省电信的案例分享 整体介绍 某省电信大数据分析平台,需要对BSS的三户、订单、实例等近10TB级的数据进行快速分析统计,每次分析的数据量最高达到5亿级别,同时需要向其它厂商开放这种实时的数据分析能力&…

Java-API简析_java.util.Currency类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131255544 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

对象实例化空指针处理

1 问题 如何解决对象实例化空指针异常? 2 方法 首先创建一个package包,将其Menu类及相关代码放入其中,并在该package包下创建另一个类MenuItem,然后通过构造函数,写入需要运行的对象信息,最后在Menu类中用n…

leetcode 151. 反转字符串中的单词

2023.6.14 这道题全面考察了字符串的一些操作,这里我的思路是: 先对字符串进行空格去除操作,这里要注意一个细节:先用for循环去除连续空格,再用if判断开头和结尾的空格。再对没有异常空格的s 做一个反转操作。再对每一…

计算机网络基础知识(九)—— 什么是TelnetS?Telnet Over TLS

文章目录 01 | TelnetS02 | OpenSSL03 | 实现思路服务器处理流程客户端处理流程 04 | 代码实现服务端代码客户端代码编译过程 & 执行结果 前面学习了什么是HTTPS协议,了解了HTTPS的工作原理以及具体的工作流程,了解了HTTP协议和HTTPS协议之间的区别。…

SSM框架搭建

SSM环境搭建 1 IDE的话,我用的MyEcplise,如果用Ecplise的话,需要自行配置服务器。 首先,建一个Dynamic工程,需要注意的是一定要勾选上web.xml。 将Spring框架包、jstl包、standard包、common-logging包、aopallian…

系列十三、MongoDB聚合查询

一、概述 MongoDB聚合框架(Aggregation Framework)是一个计算框架,它可以: ①:作用在一个或者几个集合上; ②:对集合中的数据进行一系列的运算; ③:将这些数据转化为期望的形式; 从效果而言…

AIGC技术研究与应用 ---- 下一代人工智能:新范式!新生产力!(5 - AIGC 未来展望)

文章大纲 不可避免的职业替代AI 对人类思维的影响AIGC 的风险人工智能对齐 -- 价值学习 鲁棒适应参考文献与学习路径GPT 系列模型解析前序文章模型进化券商研报陆奇演讲多模态据预测,未来五年10%-30%的图片内容由AI参与生成,考虑到下一代互联网对内容需求的迅速提升,2030年A…