深度学习目标检测方法汇总

2023-10-27

目标检测简介

  目标检测是计算机视觉的一个重要研究方向,是指从一个场景(或图片)中找到感兴趣的目标。任务大致分为三个流程:

  • 从场景中提取候选区
  • 从候选区提取特征
  • 识别候选区的类别并对有效的候选框进行位置精修

  目标检测在生活的各个领域都有了广泛的应用,它是将图像或视频中的目标与不感兴趣的部分区分开,判断是否存在目标,若存在目标则确定目标的位置。近年来,随着互联网技术、人工智能计算和智能硬件的迅猛发展,人类生活中存在着大量的图像和视频数据,这使得计算机视觉的研究也越来越火热。目标检测技术作为计算机视觉领域的一个重要组成部分,也受到了很大程度上的关注。目前在实际生活中的应用也十分广泛,包括目标跟踪,视频监控,信息安全,自动驾驶,图像检索,医学图像分析,网络数据挖掘,无人机导航,遥感信息分析,国防系统,以及机器人环境感知等。
  目标检测方法主要分为两大类:

  • 基于传统图像处理和机器学习算法的目标检测方法
  • 基于深度学习的目标检测方法

  传统目标检测方法主要分为六个步骤,包括图像预处理,窗口滑动,特征提取,选择以及分类,和后处理这六个步骤。每个步骤所做的工作分别是:a)图像预处理是对检测图像进行图像的去噪声和增强,以及色彩转换等操作;b)窗口滑动是指在待测图像中滑动一个大小相同的窗口,将窗口中的子图像提取出来做候选区域;c)特征提取就是对候选区域使用特定的算法进行处理;d)特征选择即从上一步提取的特征向量中挑选出具有代表性的特征,降低特征的维数;e)特征分类就是利用特定的分类器对特征进行分类,判定候选区是否包含了目标及其类别;f)后处理是指合并判断为同一类别的相交候选区,计算出每个目标的边界框。
  传统目标检测方法的检测重点是在特征提取(如何提高特征的表达能力和抗形变能力)和特征分类(如何提高分类器的准确度和速度上)。由此,研究人员提出了多种形式的特征和分类器,其中,代表性的特征有代表性的特征有SIFT(scale-invariant feature transform)、Hear、HOG(histogram of oriented gradient)、Strip等;代表性的分类器有AdaBoost、SVM(support vector machine)、DPM(deformable parts model)、RF(random forest)等。
  但是,传统的目标检测方法的准确度并不能达到实际需求,其根本原因有两个,一个是使用滑动窗口的策略进行区域选择时针对性不强,提高了时间复杂度和窗口冗余,另一个是使用设计的特征。设计的特征存在以下三个缺点:a)设计的特征为低层特征,对目标的表达能力不足;b)设计的特征可分性差,导致分类的错误率较高;c)设计的特征具有针对性,很难选择单一特征应用于多目标检测,例如:Hear特征用于人脸检测,HOG特征用于行人检测,Stip特征用于车辆检测。
  随着计算机性能的不断提高,曾经难以实现的深度学习算法变得切实可行,目标检测开始进入深度学习时代。深度学习提取的特征为高层特征,相比于传统的目标检测方法的设计特征,学习的特征更加丰富,表达能力更强。而且深度学习将特征提取,特征选择以及特征分类融合到一个模型中,通过端对端的训练,从整体上进行功能优化,增加了特征的可分性。基于深度学习的目标检测算法大致可以分为三类:a)基于区域建议的目标检测算法:如R-CNN,Fast-RCNN,Faster-RCNN;b)基于回归的目标检测算法:如YOLO,SSD;c)基于搜索的目标检测算法,如基于视觉注意的AttentionNet,基于强化学习的算法。

1 基于区域提名的深度学习目标检测算法

  卷积神经网络(CNN)是区域提议(Region Propoal)算法的核心组成部分,卷积神经网络最早是有Yann LeCun教授提出来的,早期的卷积神经网络是用作分类器使用的,主要用于图像识别。卷积神经网络有三个结构上的特性:局部连接、权重共享以及空间和时间上的采样。这些特性使得卷积神经网络具有一定程度上的平移、缩放和扭曲不变性。在2006年Hinton提出使用深度神经网络从大量的数据中自动学习高层特征。区域建议在此基础上解决了传统目标检测方法存在的两个问题。比较常用的区域建议方法有Selective search和Edge boxes。此后,CNN网络迅速发展,微软最新的ResNet和谷歌的Inception V4模型的Top-5 error降到了4%以内,所以目标检测得到候选区域后使用CNN对其进行图像分类的准确率和检测速度上都有提高。这类算法的主要步骤是:

  • 首先使用选择性搜索算法(Selective Serch)、Bing、EdgeBoxes这些目标候选区域生成算法生成一系列候选目标区域;
  • 然后通过深度神经网络提取目标候选区域的特征;
  • 最后用这些特征进行分类,以及目标真实边界的回归。
1.1 R-CNN

  R-CNN算法可以说是利用深度学习进行目标检测的开山之作,将深度学习引入了目标检测领域,一举将PASCAL VOC上的检测率从35.1%提升到53.7%。针对传统目标检测方法存在的两个问题,R-CNN都有了很好的解决方法:预先提前一系列可能是物体的候选区域,之后仅在这些候选区域上提取特征,进行判断,从而解决了传统目标检测方法利用滑动窗口依次判断所有可能的区域造成时间复杂度太高和窗口冗余的问题;训练深度网络来进行特征提取替代人工设定特征,解决了人工设定特征的三个缺点。
  R-CNN的实现步骤主要有4个:

  • a)首先用选择性搜索算法(selective Search)提取1k-2k个候选区域;
  • b)使用深度卷积神经网络提取每一个候选区的深度特征;
  • c)训练SVM分类器来对这些特征进行分类;
  • d)最后通过边界回归算法程序定位目标边界框。

Figure1

  但是,由于在特征提取后进行分类的过程中有一个全连接层的操作,这一个操作要求提取特征的图片需要相同尺度的大小,提取的不合适的特征图片需要进行裁切(Crop)或者变形缩放(Warp),这在一定程度上造成图像畸形,影响最终结果。随后He等人提出SPP-NET缩放很好的解决了这一问题。

1.2 SPP-NET

  R-CNN存在的问题在SPP-NET解决主要在于SPP网络的提出,这一网络解决了R-CNN这一网络要求提取特征要求相同尺度的大小这一问题。下面是R-CNN和SPP-NET网络结构的对比。

Figure2

  R-CNN现在提取图片特征后先进行卷积后再进行全连接层的训练,而SPP-NET的网络在进行卷积之后再进行SPP操作,这一操作可以让网络输入任何大小的图片,都会生成固定大小的输出,整体的结构除了这一点以外和之前的R-CNN没有什么不同,因此在其它方面,SPP-NET存在和R-CNN一样的问题。

1.3 Fast RCNN

  在2015年,继提出R-CNN算法后,Ross Girshick提出了Faster RCNN,流程更为紧凑,大幅提升了目标检测的速度,同样使用最大规模的网络,Fast R-CNN和R-CNN相比,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒。在PASCAL VOC 2007上的准确率相差无几,约在66%~67%之间。
  Fast RCNN主要解决了R-CNN的三个问题:

  • 测试速度慢
    RCNN一张图片内候选框之间大量重叠,提取特征操作冗余。
    Fast RCNN将整张图像归一化后直接送入深度网络,在邻接时,才加入候选框信息,在末尾的少数几层处理每个候选框。

  • 训练速度慢
    原因同上
    在训练时,Fast RCNN先将一张图像送入网络,紧接着送入从这幅图像上提取出的候选区域。这些候选区域的前几层特征不需要再重复计算。

  • 训练所需空间大
    RCNN中独立的分类器和回归器需要大量特征作为训练样本。

    Fast RCNN把类别判断和位置精确统一用深度网络实现,不再需要额外存储。

  其中,Fast RCNN最大的贡献是全连接层的提速。
  分类和位置调整都是通过全连接层(fc)实现的,设前一级数据为x后一级数据为y,全连接层参数为w,尺寸为$uv$。一次前向传播(forward)即为:
计算复杂度为$u
v$。
将W进行SVD分解,并用前t个特征值近似
原来的前向传播分解为两步:
计算复杂度变为$u\times t+v\times t$。
在实现时,相当于把一个全连接层拆分为两个,中间以一个低维数据相连。
Figure3
其实验结果为:

* 网络末端同步训练的分类和位置调整,提升准确度;
* 使用多尺度的图像金字塔,性能几乎没有提高;
* 倍增训练数据,能够有2%~3%的准确度提升;
* 网络直接输出各类概率(softmax),比SVM分类器性能略好;
* 更多候选窗不能提升性能。
1.4 Faster R-CNN

  同在2015年,Ross Girshick团队提出了Faster R-CNN,简单网络的目标检测速度达到17fps,在PASCAL VOC上准确率为59.9%;复杂网络达到5fps,准确率78.8%。
  从RCNN到Fast RCNN,再到Faster R-CNN,目标检测的四个基本步骤(候选区域生成,特征提取,分类,位置精修)终于被统一到一个深度网络框架之内。所有计算没有重复,完全在GPU中完成,大大提高了运行速度。
Figure4
  Faster RCNN可以简单地看做”区域生成网络+Fast R-CNN“的系统,用区域生成网络代替Fast R-CNN中的Selective Search方法。Faster R-CNN着重解决了这个系统中的三个问题:

1.如何设计区域生成网络
2.如何训练区域生成网络
3.如何让区域生成网络和Fast RCNN网络共享特征提取网络

  Faster R-CNN提出了区域生成网络RPN,快速生成候选区域;通过交替训练,使RPN和Fast RCNN网络共享参数。
Figure5

2 基于回归的目标检测算法

  虽然Faster R-CNN是目前主流的目标检测算法之一,但是速度上并不能满足实时的要求,随后出现YOLO,SSD这一类的算法逐渐凸显出其优略性,这类方法充分地利用了回归的思想,直接在原始图像的多个位置回归,判别出目标边框以及目标类别。

2.1 YOLO

  2016年Redmon等人提出的YOLO算法是一个可以一次性预测多个Box位置和类别的卷积神经网络,YOLO算法的网络设计延续了GoogleNet的核心思想,真正意思上实现了端到端的目标检测,并且发挥了速度快的优势,但其精度有所下滑。但在同年Redmon等人在YOLO的基础上提出了YOLO9000算法,保持了YOLO的速度,提高了准确度。主要有两方面的改进:1)在原先的YOLO检测框架上进行一系列的改进,弥补了检测精度的不足;2)提出了目标检测和目标训练和二为一的方法。YOLOv2算法的训练网络采用降采样的方法在特定的情况下可以进行动态调整,这种机制可以使网络预测不同大小的图片,让检测速度和精度之间达到平衡。

2.2 SSD

  2016年Liu等人提出SSD算法,该算法结合YOLO的回归思想以及Faster R-CNN的anchor机制做到了速度和准确率并存。最初的YOLO算法是在7x77x7的框架下识别物体,用这种框架检测小物体时,准确率会下降。在SSD算法中去掉了YOLO算法的全连接层,所以对任意大小的物体都可以检测,性能基本不变。对SSD的测试集进行训练和训练使用候选区域及用来池化的标准测试器之间最大的不同之处在于,ground truth 需要被赋予一组固定集合检测输出中某一个特定输出。当这个赋值确定之后,损失函数和后向传播就能够实现端到端的应用。总之,SSD结合了YOLO中的回归思想和Faster R-CNN中的anchor机制,使用全图各个位置的多尺度区域特征进行回归,既保持了YOLO速度快的特性,也保证了窗口预测跟Faster R-CNN一样精准。

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

深度学习目标检测方法汇总 的相关文章

  • Timequest Timing Analyzer进行时序分析(二)

    四 用TimeQuest对DAC7512控制器进行时序分析 在对某个对象下时序约束的时候 首先要能正确识别它 TimeQuest会对设计中各组成部分根据属性进行归类 我们在下时序约束的时候 可以通过命令查找对应类别的某个对象 TimeQue
  • 实例解析C++/CLI之接口与泛型

    实例解析C CLI 之接口与泛型 接口 某些时候 让不相关的类分享一组公有成员 以便产生相同的行为 是非常有用的 一个最基本的方法可能是通过一个公共的基类来定义它们 但这种方法太受局限 因为它要求这些类通过继承而互相关联 另外 它们也许还有
  • 又一个大雷引发市场巨震?Silvergate或将跌落:成也加密败也加密?

    这是白话区块链的第1874期原创 作者 Terry出品 白话区块链 ID hellobtc 3月1日 加密友好银行集团 Silvergate Capital布将推迟提交其年度 10 K 报告 10 K 报告是美国证券交易委员会要求的一份文件
  • PPPoE工作流程

    PPPoE 英语 Point to Point Protocol Over Ethernet 以太网上的点对点协议 是将点对点协议 PPP 封装在以太网 Ethernet 框架中的一种网络隧道协议 PPPoE协议及其工作过程 PPPoE的工
  • 【游戏杂记】Rgss3a文件的解包

    Rgss3a文件的解包 在RPG游戏中 如果想提取图片音乐等资源 需要对文件进行解包 这里是解包工具的链接 链接 https pan baidu com s 1 UKyetIHGsw1ibOHFLHUMQ pwd 5422 提取码 5422
  • 转载:Run-Time Check Failure #2分析

    文章出处 http hi baidu com D6 BB D3 B0 C1 F7 C0 CB blog item 0d72bcb477b2bbc236d3cad4 html Run Time Check Failure 2 一般是栈被破坏
  • 34 个 常用 Linux Shell 脚本,运维必备!

    作为一名 Linux 工程师 会写好的脚本不仅能提高工作效率 还能有更多的时间做自己的事 最近在网上冲浪的时候 也注意收集一些大佬写过的脚本 汇总整理一下 欢迎收藏 与君共勉 1 用户猜数字 bin bash 脚本生成一个 100 以内的随
  • 【力扣】两数之和-java

    思路是 两个循环套用 刚刚开始的时候想判断里面数小于目标值 这样遍历的次数会少 后面发现当数组中为负数的时候 if方法失效 判断了负数 后面发现数据中有两个0失效 判断了0 后面发现如果数据中有正有负 方法失效 public int two
  • 2021-08-30爬取网页信息并转成DataFrame

    导入包 from urllib request import urlopen Request from chardet import detect from bs4 import BeautifulSoup import re import
  • Spring多线程事务解决方案

    Spring多线程事务解决方案 多线程事务场景以及解决思路 代码实现 工具类使用演示 效果展示 多线程事务场景以及解决思路 多线程事务场景举例 对批量操作进行性能优化时会用到多线程来并行处理 从而提高运行效率 而时有业务要求保证批量操作事务
  • 如何在SOLIDWORKS中实现装配体缩放

    缩放比例功能 通过选择 插入 gt 功能 gt 缩放比例 可以找到 可用于更改单个零件中所有功能的比例 使用时 此工具在功能树中显示为附加功能 但是 此功能仅限于零件 sldprt 文件使用 您如何缩放SOLIDWORKS装配体 标SOLI
  • 解决运行flutter doctor --android-licenses时报错

    问题描述 配置flutter环境时 会使用flutter doctor命令来检查运行flutter的相关依赖是否配好 能看到还差 Android license status unknown 未解决 C Users ipkiss wu gt
  • 5 个最令人兴奋的 ES13 功能

    ES13 ECMAScript 2022 已经发布很久了 并且更新了许多有用的功能 在这篇文章中 我想与大家分享 5 种我最喜欢的技术 这些技术是我已经开始在工作中实施的 1 顶级await await 是我最喜欢的功能 因为它使我的代码显
  • python调用m文件

    系统环境 windows 64bit matlab 2018b 64bit python3 6 前提 windows下需要有matlab软件和python python调用m文件需要安装matlab engine 注意matlab版本与py
  • 类模板下运算符重载的两种用法

    1 template
  • java编写定时器,定时执行某个方法

    第一步 编写测试类 该类extends TimerTask 重新run 方法 run方法里面就是你要执行的逻辑代码 示例如下 import java text SimpleDateFormat import java util Date i
  • Python如何调用js函数?

    Python如何调用SDK的js函数 一 概述 二 环境准备 三 调用方法 步骤 四 Demo演示基础版 五 常见问题 六 深入了解 待更新 七 参考资料 一 概述 测试web前端 前端SDK web渗透流程等时 难免会需要调用前端js里面
  • 【Linux】浏览器写代码!部署code-server远程vscode网页

    部署code server远程vscode网页 在浏览器上写代码 参考文档 https developer aliyun com article 876967 slide 7 本文首发于 慕雪的寒舍 1 什么是code server 注意
  • 奔跑吧恐龙----基于JavaSwing的一个跑酷游戏

    1 游戏功能 随机出现障碍物 人物可以通过向上跳进行避免 游戏结束后出现分数 对难度进行一定的控制 当分数 gt 1000时难度升级 当分数 gt 4000时 难度再进行升级 并存在音乐播放功能 2 具体实现 2 1 model 1 Din
  • C++基于TCP/IP简单的客户端、服务器通信程序实例

    本篇文章实现了一个基于TCP 的一个非常简单的客户 服务器通信程序实例 该程序中通讯协议使用的是面向连接的TCP协议SOCK STREAM 服务器的ip地址为本地地址即 127 0 0 1 端口号为自定义的5099 大于1024即可 服务端

随机推荐

  • springBoot入门(快速搭建一个springBoot项目)

    目录 一 SpringBoot介绍 1 定义 2 springBoot简化的配置 3 应用打包 二 springBoot项目搭建 1 新建一个spring initializr项目 2 点击下一步 3 之后一个springBoot项目就构建
  • 好用的插件分享

    检查无用代码 Android studio gt 设置 gt Plugins gt 搜索PMD 安装QAPlug PMD 安装完成后重启Android studio
  • STM32--舵机(SG90)

    文章目录 一 介绍 二 工作原理 三 舵机的控制 四 设计流程 五 代码实现 六 舵机工程代码 七 备注 舵机 一 介绍 舵机是一种位置 角度 伺服的驱动器 适用于那些需要角度不断变化并可以保持的控制系统 目前在高档遥控玩具 如航模 包括飞
  • GitHub下载速度慢?找“马云”啊,干货帖

    大名鼎鼎的GitHub大家想必都知道 毕竟我这个无所事事的小白都知道 用多了GitHub的人应该对下面这种情况非常熟悉 当然 有的时候是不会下载失败的 还是会有个10k 8k的 注意我这里说的可不是工资 但是对于一个突然醒悟要好好学习的程序
  • Python编码问题总结

    问题一 当python中间处理非ASCII编码时 经常会出现如下错误 UnicodeDecodeError ascii codec can t decode byte 0x in position 1 ordinal not in rang
  • js对象方法Object.assign( )详解

    1 基本用法 Object assign方法用于对象的合并 将源对象 source 的所有可枚举属性 复制到目标对象 target var target a 1 var source1 b 2 var source2 c 3 Object
  • neo4j--Cypher查询调优与执行计划

    1 查询调优 1 1查询如何执行 Cypher执行引擎会将每个Cypher查询都转为一个执行计划 在执行查询时 执行计划将告知Neo4j执行什么样的操作 1 2查询性能分析 查看执行计划对查询进行分析时有两个Cypher语句可用 1 2 1
  • 关系型数据库和非关系型数据库类比

    1 关系型数据库 关系型数据库 是指采用了关系模型来组织数据的数据库 关系模型是在1970年由IBM的研究员E F Codd博士首先提出的 在之后的几十年中 关系模型的概念得到了充分的发展并逐渐成为主流数据库结构的主流模型 简单来说 关系模
  • win10 WMDC安装

    解决方案 WMDC in Windows 10 junipersys com 参考连接 Previous WMDC fixes for Windows 10 junipersys com amd64 https junipersys com
  • linux中把程序启到前台,Linux程序前台后台切换

    1 在Linux终端运行命令的时候 在命令末尾加上 符号 就可以让程序在后台运行 root Ubuntu tcpserv01 2 如果程序正在前台运行 可以使用 Ctrl z 选项把程序暂停 然后用 bg number 命令把这个程序放到后
  • 知乎爬虫经验教程

    为了完成课程论文研究 暑假写了关于知乎的爬虫 把用户主页 回答中能爬到的数据全都爬下来了 接下来 把我踩过的坑跟大家分享 希望大家少走一些弯路 1 导入一些必要的python包 其中会包括我们接下来要使用的函数 import re impo
  • 疯壳AI人脸及语音识别教程2-8WIFI-TCP网络通信

    详情地址 https fengke club GeekMart views offline ai 购买链接 https fengke club GeekMart su fKw7Nb7oC jsp 视频地址 https fengke club
  • iOS 开发中的争议(二)UI到底应该用xib/storyboard完成,还是用手写代码来完成?

    文章来源 http www devtang com blog 2015 03 22 ios dev controversy 2 参考文章 关于代码手写UI xib和StoryBoard http blog csdn net likendsl
  • 用Sutherland-Hodgman算法实现裁剪任意凸多边形

    一 实验目的 用Sutherland Hodgman算法实现裁剪任意凸多边形 二 实验工具 VC6 0 三 实验步骤 思想 每次用窗口的一条边界以及其延长线来裁剪多边形 裁剪得到的多边形的顶点由两部分组成 落在可见一侧的原多边形顶点 多边形
  • 【论文阅读】APDrawingGAN:利用分层GAN从面部照片生成艺术人像

    APDrawingGAN Abstract Introduction Related Work APDrawingGAN 概述 网络结构 生成器Generator 判别器Discriminator 损失函数 训练网络 通过预训练进行初始化
  • Mongodb入门安装

    标题 1 MongoDb 概念入门 什么是MongoDB MongoDB 使用场景 不使用MongoDB 的场景 2 MongoDB 应用与开发 安装 启动mongodb 1 MongoDb 概念入门 什么是MongoDB MongoDB
  • 四种信号量

    传送门 1 整型信号量 2 记录型信号量 3 AND型信号量 4 信号量集 例 应用信号量实现同步与互斥 说在前 信号量机制是对具体物理资源的抽象 同类资源的个数用 gt 0的信号量值来表示 0或1的则为临界资源 1 整型信号量 1 1 D
  • 自定义Weex组件——Weex的学习之路(八)

    在四月份和五月份的时候我用业余时间来学习weex 在这期间一直在看文档写demo 每一个组件都自己写demo运行一遍 我本人是做Android开发的 对JS CSS和Html有一定的了解 所以学习weex不是很难 然后我把自己所学的主要经历
  • 一种基于Harris-Laplace算法的角点检测方法(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 Harris Laplace 检测方法原理 2 运行结果 3 Matlab代码实现 4 参考文献
  • 深度学习目标检测方法汇总

    目标检测简介 目标检测是计算机视觉的一个重要研究方向 是指从一个场景 或图片 中找到感兴趣的目标 任务大致分为三个流程 从场景中提取候选区 从候选区提取特征 识别候选区的类别并对有效的候选框进行位置精修 目标检测在生活的各个领域都有了广泛的