深度学习之目标检测与目标识别

2023-11-18

一 目标识别分类及应用场景

    目前可以将现有的基于深度学习的目标检测与识别算法大致分为以下三大类: 

    ① 基于区域建议的目标检测与识别算法,如R-CNN, Fast-R-CNN, Faster-R-CNN;

    ② 基于回归的目标检测与识别算法,如YOLO, SSD;

    ③ 基于搜索的目标检测与识别算法,如基于视觉注意的AttentionNet,基于强化学习的算法.

    目前, 目标识别主要有以下几个应用场景:

    ① 安全领域指纹识别人脸识别等,代表项目如Face++、依图科技、深醒科技等。

    ② 军事领域地形勘察飞行物识别等,代表项目全悉科技。

    ③ 交通领域车牌号识别无人驾驶交通标志识别等,代表项目纵目科技、TuSimple(图森科技)、驭势科技等。

    ④ 医疗领域心电图B超健康管理营养学等,代表项目智影医疗、图玛深维等。

    ⑤ 生活领域智能家居购物智能测肤等,代表项目Yi+、木薯科技、肌秘等。

    具体可参考这里:从图像识别多样化的应用场景,看计算机视觉的未来价值

二 基于区域建议的目标识别的算法

1. R-CNN

1.1 基本工作流程:

    1) 接收一个图像, 使用Selective Search选择大约2000个从上到下的类无关的候选区域(proposal)

    2) 将提取出来的候选区域转换为统一大小的图片(拉升/压缩等方法), 使用CNN模型提取每一个候选区域的固定长度的特征.

    3) 使用特定类别的线性SVM分类器对每一个候选区域进行分类.

    4) Bounding Box回归.

1.2 训练 (使用AlexNet, 要求输入为227*227大小的图像)

    1) 预训练预训练CNN(边界框标签不可用于该数据).

    2) 特征领域的微调使用基于CNN的SGD的训练,对模型进行微调.在这里选择学习率为预训练的1/10, 保证微调不破坏初始化.

    3) 将所有候选区域与真实框重叠(IoU)大于等于0.5的作为该框类的正例,其余的作为负例.再进行SVM分类.

        ------这个表明了训练过程是需要Grounding Truth(标定框)的, 是有监督的过程.

注意: 在预训练和微调中使用的CNN网络参数的共享,并且提取的特征数目为(类别N+背景1)个.

1.3 预测

    预测的过程和训练基本相同,不同的是:

    1) 预测的过程没有初始给定的标定框(Grounding Truth).

    2) Bounding Box回归.

    其实简单来说, 预测的过程就是根据在训练过程中找到的CNN回归值与所要预测的Grounding Truth之间的关系, 反向推导Grounding Truth的位置.

1.4 R-CNN的优劣分析及小结

    1) R-CNN较之于传统方法的主要优势:

    ① 使用了Select Search进行proposal的选择, 极大地减少了proposal的数量.(百万级别~2000左右)

    ② 深度学习提取特征来代替人为设计, 较大地提高了精度和效率.

    ③ 使用了Bounding Box回归, 进一步提高了检测的精度.

    2) R-CNN的不足之处:

    ① 训练分为了多个步骤. 包括Select Search进行proposal的选择, CNN的模型训练(模型的预训练和微调), SVM的分类, Bounding Box回归等, 整个过程需要的时间过长.

    ② 由于当时的历史等各个因素的影响, 使用了SVM进行多类别分类,要训练多个分类器, 训练时间较长

    ③ 测试时间长,由于每张图片要处理大量的目标候选框

    3) 小结

    虽然R-CNN仍然存在很多的问题, 但是它打破了传统的目标识别的方式, 基于深度神经网络的目标识别技术也由此发展起来了.

2. SPP Net

    为了后面介绍Fast R-CNN, 这里我们简要介绍下SPP Net的相关内容.


    SPP Net具有两个特点:

    ① 结合金字塔的思想, 实现了实现了CNNs的多尺寸输入. 解决了因为CNNs对输入的格式要求而进行的预处理(如crop,warp等)操作造成的数据信息的丢失问题.

    ② 只对原图进行一次卷积操作

2.1 SPP Net的金字塔池化


    如上图所示, 输入图片经过多个卷积层操作, 再将输出的feature map输入到SPP Net池化层, 最后将池化后的特征输入全连接层.

    下面针对上图来说说SPP Net池化层的思想.可以参见这里.

    我们使用三层的金字塔池化层pooling,分别设置图片切分成多少块,论文中设置的分别是(1,4,16),然后按照层次对这个特征图feature A进行分别处理(用代码实现就是for(1,2,3层)),也就是在第一层对这个特征图feature A整个特征图进行池化(池化又分为:最大池化,平均池化,随机池化),论文中使用的是最大池化,得到1个特征。

    第二层先将这个特征图feature A切分为4个(20,30)的小的特征图,然后使用对应的大小的池化核对其进行池化得到4个特征,

    第三层先将这个特征图feature A切分为16个(10,15)的小的特征图,然后使用对应大小的池化核对其进行池化得到16个特征.

    最后将这1+4+16=21个特征输入到全连接层,进行权重计算. 当然了,这个层数是可以随意设定的,以及这个图片划分也是可以随意的,只要效果好同时最后能组合成我们需要的特征个数即可.

2.2 SPP Net的一次卷积

    由于R-CNN先获取proposal,再进行resize,最后输入CNN卷积, 这样做效率很低. SPP Net针对这一缺点, 提出了只进行一次原图的卷积操, 得到feature map , 然后找到每一个proposal在feature map上对应的patch, 将这个patch作为每个proposal的卷积特征输入到SPP Net中,进行后续运算. 速度提升百倍.

3. Fast R-CNN

    Fast R-CNN主要作用是实现了对R-CNN的加速, 它在R-CNN的基础上主要有以下几个方面的改进:

    ① 借鉴了SPP Net的思路, 提出了简化版的ROI池化层(没有使用金字塔), 同时加入了候选框映射的功能, 使得网络能够进行反向传播, 解决了SPP的整体网络训练的问题.

    ② 多任务Loss层. 1) 使用了softmax代替SVM进行多分类. 2) SmoothL1Loss取代了 Bounding Box回归.

3.1  基本工作流程

    1) 接收一个图像, 使用Selective Search选择大约2000个从上到下的类无关的候选区域(proposal).

    2) 对整张图片进行卷积操作提取特征, 得到feature map.

    3) 找到每个候选框在feature map中的映射patch. 将patch作为每个候选框的特征输入到ROI池化层及后面的层.

    4) 将提取出的候选框的特征输入到softmax分类器中进行分类.==>替换了R-CNN的SVM分类.

    5) 使用SmoothL1Loss回归的方法对于候选框进一步调整位置.

3.2 Fast R-CNN的优点及其不足之处

    1) 优点

    融合了R-CNN和SPP Net的精髓, 并且引入了多任务损失函数 ,极大地特高了算法的效率, 使得整个网络的训练和测试变得较为简单(相对R-CNN而言).

    2) 不足

    没有对Selective Search进行候选区域(region proposal)的选择进行改进, 仍然不能实现真正意义上的edge-to-edge(端到端)的训练测试.

4. Faster R-CNN

    Faster R-CNN和Faste R-CNN的不同点主要是使用RPN网络进行region proposal的选择, 并且将RPN网络合并到CNN网络中, 真正地实现了端到端的目标检测.这也是 Faster R-CNN的里程碑式的贡献.

    Faster R-CNN的网络拓扑图如下图所示.

4.1 基本工作流程

    1. 对整张图片输进CNN网络,得到feature map.

    2. 卷积特征输入到RPN,得到候选框的特征信息.

    3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类.

    4. 对于属于某一特征的候选框,用回归器进一步调整其位置.

4.2 RPN

    用于提取region proposal的神经网络叫做Region Proposal Network(简称RPN).

    RPN网络的特点在于通过滑动窗口的方式实现候选框的提取,每个滑动窗口位置生成9个候选窗口(不同尺度、不同宽高), 提取对应9个候选窗口(anchor)的特征,用于目标分类和边框回归,与FastRCNN类似。目标分类只需要区分候选框内特征为前景或者背景。

    1) 候选框的选取依据:

    ① 对于IoU大于等于0.7的标记为前景样本, 低于0.3的样本标记为后景样本.

    ② 丢弃①中所有的边界样本

    对于每一个位置,通过两个全连接层(目标分类+边框回归)对每个候选框(anchor)进行判断,并且结合概率值进行舍弃(仅保留约300个anchor),没有显式地提取任何候选窗口,完全使用网络自身完成判断和修正。

    2) 损失函数

    同时使用两种损失函数:

    a. 分类的误差.

    b. 前景样本的窗口位置的偏差.

    3) 模型训练

    从模型训练的角度来看,通过使用共享特征交替训练的方式,达到接近实时的性能,交替训练方式描述为:

    1)根据现有网络初始化权值w,训练RPN;

    2)用RPN提取训练集上的候选区域,用候选区域训练FastRCNN,更新权值w;

    3)重复1、2,直到收敛.

4.3 Faster R-CNN的优点及其不足之处

    1) 优点

    Faster R-CNN将我们一直以来的目标检测的几个过程(预选框生成, CNN特征提取, SVM/softmax/CNN预选框分类,y 预选框位置微调)完全被统一到同一个网络中去, 从真正意义上实现了从端到端的训练和测试.

    2) 不足

    预先获取预选区域,再对预选区域进行分类, 仍然具有较大的运算量, 还是没有实现真正意义上的实时检测的要求.

三  小结

       本节介绍基于region proposal的目标检测与识别算法, 从最初的R-CNN, fast R-CNN,  直到最后的faster R-CNN, 逐步实现了端到端的目标识别和检测的网络.网络训练和测试的效率也有了一个较大的提升.可以说基于region proposal的R-CNN系列目标检测与识别算法是当前目标最主要的一个分支。

    下一章我们将讲述第二类--基于回归的目标检测与识别算法.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习之目标检测与目标识别 的相关文章

  • springboot项目中对文件夹进行监控

    需要的依赖
  • Quartz 基本使用

    Quartz 基本使用 一 Quartz的核心概念 二 Quartz的几个常用API 三 Quartz的使用 四 Quartz核心详解 五 JobListener 六 TriggerListener 七 SchedulerListener
  • 更改:为硬件保留的内存

    电脑 联想thinkbook16P 系统 win11 内存 16G 更改前 2 3G 更改后 827MB 一 关机 不同的型号电脑进入boss模式的按键不同 我的是按F1 自己去找进入boss模式的方式 二 进入boss模式 进入boss模
  • ARM运行可执行文件出现/usr/lib/libstdc++.so.6: version `CXXABI_ARM_1.3.3' not found解决

    1 关于Linux PC上出现这种问题容易解决 直接下载个高版本的libstdc so 6 0 x复制到 usr lib中 软连接一下就好了 ln s libstdc so 6 0 x libstdc so 6 2 但是在ARM板上执行可执
  • 1 映射与函数

    文章目录 集合 集合表示法 区间与领域 两个逻辑量词 映射 函数 函数的图形 反函数 集合 集合表示法 区间与领域 两个逻辑量词 映射 函数 函数的图形 反函数
  • JavaScript一种将数据库记录建立层级关系的处理方法

    JavaScript一种将数据库记录建立层级关系的处理方法 背景 方案 提示 背景 项目开展中 有些数据往往具有层级关系 在数据中用ID Parent来标示 那么在前端如何有效的还原这种层级关系 而其是很多层级的情况 方便的将数据加载的树
  • c#处理3种json数据的实例介绍

    这篇文章主要介绍了c 处理包含数组 对象的复杂json数据的方法 需要的朋友可以参考下 网络中数据传输经常是xml或者json 现在做的一个项目之前调其他系统接口都是返回的xml格式 刚刚遇到一个返回json格式数据的接口 通过例子由易到难

随机推荐

  • Linux安装iptables 替换firewall

    1 查看当前防火墙状态 systemctl status firewalld service 2 关闭防火墙 并查看防火墙状态 systemctl stop firewalld service 停止firewall 3 禁止防火墙开机启动
  • Springboot项目在Jenkins+Docker中实现自动化部署

    Springboot项目在Jenkins Docker中实现自动化部署 一 环境准备 1 项目开发环境 2 Jenkins docker运行环境 二 Docker安装 三 Jenkins安装 四 创建一个Springboot项目 1 使用I
  • 太突然!北大方正破产了!负债3029亿元!

    点击上方 Python高校 关注 未未干货立马到手 来源 中国基金报 chinafundnews 记者 乔麦 体量超3000亿的中国最大校企方正集团 债务危机迎来新进展 日前 方正集团旗下6家上市公司齐发提示性公告表示 北京银行申请对方正集
  • Tomcat调优【精简版】

    Tomcat调优 优化Tomcat内存分配 调整Tomcat启动脚本contalina sh 设置tomcat启动时分配的内存很可使用的最大内存 CATALINA OPTS 调整Tomcat线程池 Tomcat默认使用的线程池 Thread
  • Mysql中符号@的作用

    select a 变量名 如果你不加的话 会认为这是一个列名 但是这列不存在 就报错了 变量名 定义一个用户变量 对该用户变量进行赋值 用户变量赋值有两种方式 一种是直接用 号 另一种是用 号 其区别在于 使用set命令对用户变量进行赋值时
  • Premiere Pro CC2019安装资料及安装教程

    简介 Adobe Premiere是一款常用的视频编辑软件 由Adobe公司推出 现在常用的版本有CS4 CS5 CS6 CC 2014 CC 2015 CC 2017 CC 2018以及CC 2019版本 Adobe Premiere是一
  • Kafka 顺序消费方案

    Kafka 顺序消费方案 前言 1 问题引入 2 解决思路 3 实现方案 前言 本文针对解决Kafka不同Topic之间存在一定的数据关联时的顺序消费问题 如存在Topic insert和Topic update分别是对数据的插入和更新 当
  • applicationcontext in module file is included in 5 contexts的解决方式

    有时候IDEA会出现这样的情况 明明敲得挺好的代码却莫名其妙的出现这个错误 然后自己这个错误出现几次了 所以我要把它记录下来 让我们把他解决吧 1 file project Structure 2 Modules Spring 先把所有的
  • Java开发Telegram机器人

    基于springboot在 pom 中添加
  • Android webview显示电脑版网页

    第一步获取webview的setting 同时进行配置 settings webView getSettings settings setCacheMode WebSettings LOAD NO CACHE 支持js settings s
  • Python发送电子邮件的几种方式介绍

    发送电子邮件是Python中常见的任务之一 可以用于自动化发送通知 报表以及其他与邮件相关的任务 Python提供了几种方式来发送电子邮件 本文将介绍其中的三种常用方式 使用smtplib库 使用email库和使用第三方库 使用smtpli
  • 小程序云开发攻略,解决最棘手的问题

    背景 最近小程序非常的火 应公司业务发展要求 开发维护了几款小程序 公司开发的小程序都是由后端提供的接口 开发繁琐而复杂 直到小程序出现了云开发 仔细研读了文档之后 欣喜不已 于是我着手开发了本人的第一款小程序 小程序云开发教程地址 点我查
  • 【线性表】最常用的数据结构:线性表

    线性表 Linear List 是 最常用且 最简单的一种数据结构 有数据库知识的同学应该比较了解 线性表的定义 线性表是由n n 0 个 数据元素 结点 a 1 a 2 a n组成的有限序列 数据元素的个数n定义为表的长度 n 0时称为空
  • linux 检查程序所需库,查看命令运行所需要的库支持

    问题 我想知道当我调用一个特定的可执行文件在运行时载入了哪些共享库 是否有方法可以明确Linux上可执行程序或运行进程的共享库依赖关系 查看可执行程序的共享库依赖关系 要找出某个特定可执行依赖的库 可以使用ldd命令 这个命令调用动态链接器
  • ImportError: liblapack.so.3: cannot open shared object file: No such file or directory

    如果用的是conda的话 尝试一下 conda install c conda forge liblapack
  • 【操作教程】EasyNVR平台如何接入硬盘录像机?

    EasyNVR是基于RTSP Onvif协议接入的视频平台 可支持将前端设备的音视频进行采集 传输 处理并分发 实现视频监控直播 云端录像 云存储 检索回看 国标级联 告警等视频能力 平台兼容性高 可拓展性强 性能稳定 可应用在智慧工地 智
  • Failed to create the Java Virtual Machine问题解决

    问题现象 打开eclipse exe 弹出如下对话框 问题分析 这是eclipse启动初始化时报的错 一般出现这种情况跟安装了多个Java虚拟机有关 然后eclipse启动的时候 不知道要配置哪一个JDK 所以会报Failed to cre
  • D360周赛复盘:模拟(思维题目)⭐⭐+贪心解决可能的最小和(类似上次)

    文章目录 2833 距离原点最远的点 思路 完整版 2834 找出美丽数组的最小和 思路 完整版 2833 距离原点最远的点 给你一个长度为 n 的字符串 moves 该字符串仅由字符 L R 和 组成 字符串表示你在一条原点为 0 的数轴
  • python+selenium基于po模式的web自动化测试框架

    一 什么是Selenium Selenium是一个基于浏览器的自动化测试工具 它提供了一种跨平台 跨浏览器的端到端的web自动化解决方案 Selenium主要包括三部分 Selenium IDE Selenium WebDriver 和Se
  • 深度学习之目标检测与目标识别

    一 目标识别分类及应用场景 目前可以将现有的基于深度学习的目标检测与识别算法大致分为以下三大类 基于区域建议的目标检测与识别算法 如R CNN Fast R CNN Faster R CNN 基于回归的目标检测与识别算法 如YOLO SSD