计算机视觉-深度学习图像检测方法梳理

article/2025/9/29 15:30:07

计算机视觉-深度学习图像检测方法梳理

由于之后要转方向啦,趁这段时间整理手中硕士研究方向的一些阅读笔记,这是一篇关于计算机视觉的基础知识梳理

先搞清一些小知识点

首先我们要弄清楚图像分类、目标定位、语义分割、实例分割的区别
在这里插入图片描述
a. 图像分类 :给定一张输入图像,图像分类任务旨在判断该图像所属类别;
b. 目标定位 :在图像分类的基础上,我们还想知道图像中的目标具体在图像的什么位置,通常是以包围盒的(bounding box)形式;
c. 语义分割 :语义分割是目标检测更进阶的任务,目标检测只需要框出每个目标的包围盒,语义分割需要进一步判断图像中哪些像素属于哪个目标;
d. 实例分割 :语义分割不区分属于相同类别的不同实例。例如,当图像中有多只猫时,语义分割会将两只猫整体的所有像素预测为“猫”这个类别。

其次,什么是选择性搜索Selective Search(SS)?
在目标检测时,为了定位到目标的具体位置,通常会把图像分成许多子块(sub-regions / patches),然后把子块作为输入,送到目标识别的模型中。分子块的最直接方法叫滑动窗口法(sliding window approach)。滑动窗口的方法就是按照子块的大小在整幅图像上穷举所有子图像块。和滑动窗口法相对的是另外一类基于区域(region proposal)的方法。selective search就是其中之一。至于为什么选SS,是因为相比滑窗法在不同位置和大小的穷举,候选区域算法将像素分配到少数的分割区域中。所以最终候选区域算法产生的数量比滑窗法少的多,从而大大减少运行物体识别算法的次数。同时候选区域算法所选定的范围天然兼顾了不同的大小和长宽比。
在这里插入图片描述
具体实现步骤和效果结合上图食用:
1.首先将所有分割区域的外框加到候选区域列表中
2.基于相似度(颜色、纹理、大小和形状交叠)合并一些区域
3.将合并后的分割区域作为一个整体,跳到步骤1
通过不停的迭代,候选区域列表中的区域越来越大,就通过自底向下的方法创建了越来越大的候选区域。

R-CNN

在这里插入图片描述
R-CNN的整个过程可以理解为Selective search+CNN+SVMs,详细过程如下:
Step1:候选框提取
训练阶段:给定一张图片,利用SS方法从中提取出2000个候选框。由于候选框大小不一,考虑到后续CNN要求输入的图片大小统一,将2000个候选框全部resize到227227分辨率。
测试阶段:给定一张图片,利用SS方法从中提取出2000个候选框。由于候选框大小不一,考虑到后续CNN要求输入的图片大小统一,将2000个候选框全部resize到227
227分辨率。
Step2:特征提取(CNN)
训练阶段:提取特征的CNN模型需要预先训练得到。训练CNN模型时,对训练数据标定要求比较宽松,即SS方法提取的proposal只包含部分目标区域时,我们也将该proposal标定为特定物体类别。
测试阶段:得到统一分辨率227227的proposal后,带入训练得到的CNN模型,最后一个全连接层的输出结果—40961维度向量即用于最终测试的特征。

这样做的主要原因在于,CNN训练需要大规模的数据,如果标定要求极其严格(即只有完全包含目标区域且不属于目标的区域不能超过一个小的阈值),那么用于CNN训练的样本数量会很少。因此,宽松标定条件下训练得到的CNN模型只能用于特征提取

Step3:分类器(SVMs)
训练:对于所有proposal进行严格的标定(当且仅当一个候选框完全包含ground truth区域且不属于ground truth部分不超过候选框区域的5%时认为该候选框标定结果为目标,否则为背景),然后将所有proposal经过CNN处理得到的特征和SVM新标定结果输入到SVMs分类器进行训练得到分类器预测模型。
测试:对于一副测试图像,提取得到的2000个proposal经过CNN特征提取后输入到SVM分类器预测模型中,可以给出特定类别评分结果。
结果生成:
得到SVMs对于所有Proposal的评分结果,将一些分数较低的proposal去掉后,剩下的proposal中会出现候选框相交的情况。采用非极大值抑制技术,对于相交的两个框或若干个框,找到最能代表最终检测结果的候选框。
这里简单说一下非极大值抑制的具体操作:基于前面的网络能为每个框给出一个score,score越大证明框越接近期待值。如图两个目标分别有多个选择框,现在要去掉多余的选择框。分别在局部选出最大框,然后去掉和这个框IOU(交并比)>0.7的框。如图
在这里插入图片描述

SPP-NET

在这里插入图片描述
SPP-NET的特点(相比于R-CNN):
1.传统CNN网络中,卷积层对输入图像大小不作特别要求,但全连接层要求输入图像具有统一尺寸大小。因此,在R-CNN中,对于SS方法提出的不同大小的proposal需要先通过Crop操作或Wrap操作将proposal区域裁剪为统一大小,然后用CNN提取proposal特征。相比之下,SPP-net在最后一个卷积层与其后的全连接层之间添加了一个SPP (spatial pyramid pooling) layer,从而避免了Crop或Warp操作。总而言之,SPP-layer适用于不同尺寸的输入图像,通过SPP-layer对最后一个卷积层特征进行pool操作并产生固定大小feature map,进而匹配后续的全连接层。

crop有时只能得到目标的局部,可以理解为裁剪;但wrap会改变原目标的长宽比,甚至导致图像的扭曲,即将图像裁剪到一定尺寸。根据具体需求选择使用。

2.由于SPP-net支持不同尺寸输入图像,因此SPP-net提取得到的图像特征具有更好的尺度不变性,降低了训练过程中的过拟合可能性。
3.R-CNN在训练和测试时需要对每一个图像中每一个proposal进行一遍CNN前向特征提取。但SPP-net只需要进行一次前向CNN特征提取,即对整图进行CNN特征提取,得到最后一个卷积层的feature map,然后采用SPP-layer根据空间对应关系得到相应proposal的特征。SPP-net速度可以比R-CNN速度快24~102倍,且准确率比R-CNN更高
在这里插入图片描述
上图为spp是如何使不同大小输入图像在经过SPP-Layer后得到相同的特征向量长度

不难看出,SPP的关键实现在于通过conv5输出的feature map宽高和SPP目标输出bin的宽高计算spatial pyramid pooling中不同分辨率Bins对应的pooling window和pool stride尺寸。

FAST-R-CNN

首先总结一下前两个网络的缺点
1.R-CNN和SPP-Net的训练过程类似,分多个阶段进行,实现过程复杂
2.R-CNN和SPP-Net的时间成本和空间代价较高。SPP-Net在特征提取阶段只需要对整图做一遍前向CNN计算;RCNN在特征提取阶段对每一个proposal均需要做一遍前向CNN计算,因此RCNN特征提取的时间成本很高。R-CNN和SPP-Net用于训练SVMs分类器的特征需要提前保存在磁盘,考虑到2000个proposal的CNN特征总量还是比较大,因此造成空间代价较高。
3.R-CNN检测速度很慢。RCNN在特征提取阶段对每一个proposal均需要做一遍前向CNN计算,如果用VGG进行特征提取,处理一幅图像的所有proposal需要47s。
4.特征提取CNN的训练和SVMs分类器的训练在时间上是先后顺序,两者的训练方式独立,因此SVMs的训练Loss无法更新SPP-Layer之前的卷积层参数,因此即使采用更深的CNN网络进行特征提取,也无法保证SVMs分类器的准确率一定能够提升。

相对于前两个网络,FAST-R-CNN有以下亮点
1.Fast-R-CNN检测效果优于R-CNN和SPP-Net;
2.训练方式简单,基于多任务Loss,不需要SVM训练分类器;
3.Fast-R-CNN可以更新所有层的网络参数(采用ROI Layer将不再需要使用SVM分类器,从而可以实现整个网络端到端训练);
4.不需要将特征缓存到磁盘。
在这里插入图片描述
具体步骤: 输入一幅图像和Selective Search方法生成的一系列Proposals,通过一系列卷积层和Pooling层生成feature map,然后用RoI层处理最后一个卷积层得到的feature map为每一个proposal生成一个定长的特征向量roi_pool5。RoI层的输出roi_pool5接着输入到全连接层产生最终用于多任务学习的特征并用于计算多任务Loss。全连接输出包括两个分支:1.SoftMax Loss:计算K+1类的分类Loss函数;2.Regression Loss:即K+1的分类结果相应的Proposal的Bounding Box四个角点坐标值。最终将所有结果通过非极大抑制处理产生最终的目标检测和识别结果。
这里涉及到两个基础知识点:
1、多任务学习(Multi-Task Learning, MTL)是一种归纳迁移机制,主要目标是利用隐含在多个相关任务的训练信号中的特定领域信息来提高泛化能力,多任务学习通过使用共享表示并行训练多个任务来完成这一目标。一言以蔽之,多任务学习在学习一个问题的同时,可以通过使用共享表示来获得其他相关问题的知识。比如,学习行走时掌握的能力可以帮助学会跑,学习识别椅子的知识可以用到识别桌子的学习,我们可以在相关的学习任务之间迁移通用的知识。如图,归纳迁移是一种专注于将解决一个问题的知识应用到相关的问题的方法,从而提高学习的效率。FAST-R-CNN包括两个同等水平的sub-layer两种Loss的权重比例为1:1。
在这里插入图片描述
2、边框回归(Bounding-Box regression)
窗口:用四维向量(x,y,w,h) 来表示, 分别表示窗口的中心点坐标和宽高;
目标:寻找一种关系使得输入原始的窗口 P 经过映射得到一个跟真实窗口 G 更接近的回归窗口G^;
思路: (平移+尺度放缩)如图,绿色的框表示Ground Truth, 红色的框为Selective Search提取的Region Proposal。那么即便红色的框被分类器识别为飞机,但是由于红色的框定位不准(IoU<0.5), 那么这张图相当于没有正确的检测出飞机。 如果我们能对红色的框进行微调, 使得经过微调后的窗口跟Ground Truth 更接近, 这定位会更准确。Bounding-box regression 就是用来微调这个窗口的。
在这里插入图片描述

其实后面还有FASTER-R-CNN、YOLO、SDD网络,但是计算机视觉发展史实在太长,限于字数和时间,这篇计算机视觉梳理先写到这里,有机会再更新…
本人硕士期间主要研究语义分割、注意力机制,了解可能不全面,有理解错误的欢迎大家交流指正~


http://chatgpt.dhexx.cn/article/F8yNvwKy.shtml

相关文章

树上倍增法

一 点睛 树上倍增法不仅可以解决 LCA问题&#xff0c;还可以解决很多其他问题。 F[i&#xff0c;j] 表示 i 2^j 辈祖先&#xff0c;即 i 节点向根节点走 2^j 步到达的节点。 u 节点向上走 2^0步&#xff0c;即为 u 的父节点 x&#xff0c; F[u,0] x &#xff1b;向上走 2^1…

光电倍增管国产型号及相关知识

国产光电倍增管 南京永纪&#xff0c;GDB235 参考网址 请教光电倍增管在安装、使用注意事项&#xff0c;谢谢 (amobbs.com 阿莫电子论坛) 光电倍增管&#xff08;PMT&#xff09;使用注意 光电倍增管&#xff08;PMT&#xff09;使用注意_滨松光子学商贸(中国)有限公司 (ham…

倍增node

倍增 普及组的内容&#xff0c;思想很简单&#xff0c;但是考的可以挺难 倍增是啥东西 “ 倍增&#xff0c;顾名思义&#xff0c;就是每次增加一倍。 展开来说&#xff0c;就是每次根据已经得到的信息&#xff0c;将考虑的范围增加一倍&#xff0c; 从而加速操作。倍增思想有…

倍增求LCA

一&#xff1a;定义 LCA指的是最近公共祖先。具体地&#xff0c;给定一棵有根数&#xff0c;若结点z既是结点x的祖先&#xff0c;也是结点y的祖先&#xff0c;则称z是x&#xff0c;y的公共祖先。在x&#xff0c;y的公共祖先中&#xff0c;深度最大的那个节点成为x&#xff0c;y…

倍增数组基础

应用&#xff1a; 给定一个数列a, 基本的倍增数组可以用O(1)的时间复杂度计算出区间[i,j]的最值。 具体操作&#xff1a; 维护倍增数组 1、状态 dp[j][i]表示区间从i到 i(2^j)-1,即以i开始长度为2^j 这个区间范围的最值。&#xff08;下面以最小值为例&#xff09; 2、状态转移…

倍增LCA

朴素算法求LCA&#xff0c;即暴力求解&#xff0c;当树近乎为一条链时&#xff0c;找祖先时一级一级向上跳&#xff0c;时间复杂度接近O(n),所以可以考虑一次跳尽可能大的距离&#xff0c;即倍增算法&#xff1b;一次跳2^i&#xff08;i0,1,2....&#xff09;级。 倍增法 一个节…

倍增算法

倍增算法 【序言】 我认为吧,所有能够优化复杂度的算法都是神奇的,所有能够化繁琐为形象的文字都是伟大的。一直觉得倍增算法是个很神奇的东西,所以决定写点东西纪念一下它。但是作为一个非常不称职的OIER,我非常讨厌在看别人的算法解析时整版的i,j,k等我看到鼠标…

浅谈倍增及应用

浅谈倍增 倍增思想 原理&#xff1a; 倍增&#xff0c;即成倍增长。在处理一系列序列数据时&#xff0c;倍增可通过指数级的增长快速覆盖所有数据。 倍增算法采用2倍增长的方式&#xff0c;其核心思想是建立以下数组T a[i][j] &#xff0c;表示自i向后共 2 j 2^j 2j个数据的…

倍增(ST表与LCA)

倍增&#xff08;ST表与LCA&#xff09; 什么是倍增&#xff1f; 倍增&#xff0c;就是成倍增长。指我们进行递推时&#xff0c;如果状态空间很大&#xff0c;通常线性递推无法满足时空复杂度要求&#xff0c;那么可以通过成倍增长的方式&#xff0c;只递推状态空间中 2 的整…

V4L2-框架

1.概述 V4L2 是专门为linux 设备设计的一套视频框架&#xff0c;其主体框架在linux内核&#xff0c;可以理解为是整个linux系统上面的视频源捕获驱动框架。 相机驱动层位于HAL Moudle 与硬件层之间&#xff0c;借助linux 内核驱动框架&#xff0c;以文件节点的方式暴露接口给用…

V4L2学习笔记

首先附上&#xff0c;Linux内核网站&#xff1a; 入口 v4l2非常棒的一篇文章 入口 内核代码查看&#xff1a; 入口 一个博客文档&#xff1a; 入口 https://lwn.net/Articles/204545/ 别人整理 关于linux内核头函数&#xff1a; /usr/src/xxx 系列文 在其内部有media文件…

V4L2框架学习

V4L2框架 0 查看videodev2 0.1 头文件/usr/include/linux/videodev2.h 0.2 使用ioctl函数 使用ioctl函数 // 添加头文件 #include <unistd.h> #include <sys/ioctl.h> #include <linux/videodev2.h>int ioctl (int __fd, unsigned long int __request, ...…

V4L2介绍

V4L2介绍 V4L2介绍主要功能框架v4L2编程 V4L2介绍 V4L2是Video for linux2的简称,为linux中关于视频设备的内核驱动。在Linux中&#xff0c;视频设备是设备文件&#xff0c;可以像访问普通文件一样对其进行读写&#xff0c;摄像头在/dev/video*下&#xff0c;如果只有一个视频…

linux V4L2子系统——v4l2架构(7)之V4L2应用编程

linux V4L2子系统——v4l2架构&#xff08;7&#xff09;之V4L2应用编程 备注&#xff1a;   1. Kernel版本&#xff1a;5.4   2. 使用工具&#xff1a;Source Insight 4.0   3. 参考博客&#xff1a; &#xff08;1&#xff09;Linux V4L2子系统-应用层访问video设备&a…

[2022.8.15]v4l2-ctl基本使用方法

v4l2-ctl使用帮助可以参考&#xff1a;https://www.mankier.com/1/v4l2-ctl 1 v4l2-ctl --list-devices 列出所有设备 USB 2.0 Camera: USB Camera (usb-0000:00:14.0-9):/dev/video0/dev/video1 一个USB camera对应两个设备&#xff1a;一个是图像/视频采集&#xff0c;一…

V4L2应用层分析

V4L2应用层分析 一、总述二、例子 一、总述 V4L2&#xff0c;即Video for Linux 2&#xff0c;是第二代为Linux打造的音频、视频驱动。相比第一代V4L&#xff0c;V4L2支持更多的设备&#xff0c;同时更加稳定。现今的视频设备&#xff0c;如USB摄像头&#xff0c;基本都支持V4…

v4l2数据结构分析

v4l2数据结构分析 文章目录 v4l2数据结构分析Video4Linux2设备v4l2_device媒体设备media_deviceVideo4Linux2子设备v4l2_subdevVideo4Linux2子设备的操作集v4l2_subdev_opsVideo4Linux2子设备的内部操作集v4l2_subdev_internal_opsVideo4Linux2控制处理器v4l2_ctrl_handlerVide…

摄像头V4L2编程应用开发

1.V4L2简介 Video for Linux two(Video4Linux2)简称V4L2&#xff0c;是V4L的改进版。V4L2是linux系统操作系统下一套用于采集图片、视频、和音视频数据的通用API接口&#xff0c;配合适当的视频采集设备和相应的驱动程序&#xff0c;可以实现图片、视频、音频等的采集。 在linu…

V4L2框架

前言 在分析v4l2之前最好具有的知识&#xff1a; 1.字符设备,因为v4l2是被枚举为字符设备。 2.内存分配和映射,比如相关数据结构的分配和buffer。 3.DMA&#xff0c;因为v4l2的数据传输用到了DMA。 4.I2C&#xff0c;因为很多传感器都是用的i2c接口。 5.文件系统的基本操作&am…