目标检测 I(Object detection I)

目标检测基础

分类与检测(Classification vs. Detection)

物体检测是指在图像中定位对象的技术。

  • 分类(Classification):判断给定的图像或图像中的一部分是否属于某个特定的类别。也就是问:"这是一个 class label 吗?"
  • 检测(Detection):确定图像中特定类别的对象的位置。也就是问:" class label 在哪里?"

物体检测通常被建模为在图像的各个补丁(patches)上执行的分类任务。

  • 检测:对于每个补丁,"这是一个 class label 吗?"

滑动窗口(Sliding window)

滑动窗口方法是一种在物体检测任务中常用的技术,用来在图像中搜索和定位对象。

  • 步长(Stride):窗口每次移动过的像素数。步长较小会增加计算量,但可以提高检测的精度;步长较大可以减少计算量,但可能会错过一些对象。
  • 尺度(Scale):窗口的大小。不同大小的窗口可以捕捉到不同大小的对象。
  • 形状(Shape):窗口的宽高比(aspect ratio)。改变宽高比可以更好地适应不同形状的对象。

由于通常事先不知道对象的确切尺寸和形状,因此需要尝试一系列不同的尺度和形状来确保能够检测到各种大小和形状的对象。

评估

滑动窗口评估过程中的另一个重要参数是用于检测的阈值(threshold for detection)。在处理滑动窗口时,系统会为每个窗口分配一个分数,表示目标对象存在的概率。当这个分数超过某个设定的阈值时,该窗口就会被视为包含"目标"对象。

窗口如果得分超过阈值,则被认为是"目标"。但这也使得评估变得复杂,因为它涉及到:

  • 如果阈值设置得太低,可能会导致很多非目标窗口被错误地识别为目标(假阳性)。
  • 如果阈值设置得太高,则可能会错过一些实际上是目标的窗口(假阴性)。

评估结果是否理想,取决于所设置的阈值能否在准确性和覆盖面之间达到一个合理的平衡。这需要考虑到实际应用的具体需求,以及在准确性和召回率之间的权衡。

IoU

窗口评估中常用的一种方法是计算交并比(Intersection over Union, IoU),这是一个衡量检测窗口与真实边界框(true bounding box)之间重叠程度的指标。

交并比(IoU)的计算方法如下:

  • 计算检测窗口和真实边界框的交集区域的面积(即两者重叠部分的面积)。
  • 计算检测窗口和真实边界框的并集区域的面积(即包含两者全部区域的最小矩形面积)。
  • 将交集的面积除以并集的面积,得到IoU值。

小结

  1. 物体检测通常被建模为在图像的小区域内进行图像分类。
  2. 阈值以上的窗口被认为是"检测到的对象",可以通过与真实值的交并比(IoU)来评估。
  3. 面临的问题包括:
  • 潜在的窗口数量极大(这会减慢检测速度,并增加误检的可能性)。
  • 对于含有多个目标的图像进行总体评估可能相当复杂(需要处理多个目标、多个检测窗口以及它们各自不同的IoU值)。

R-CNN

滑动窗口分类

每张图像需要分类的窗口数量非常大(类别数C x 尺度数S x 位置数N)。

(C scales x S shapes x N locations)

为了有效并行处理:

  1. 使用深度学习框架的批处理能力:深度学习框架如TensorFlow、PyTorch等都具有批处理能力,可以同时对多个窗口进行分类,这样可以显著提高效率。
  2. 特征共享:卷积神经网络(CNN)在进行图像处理时,可以通过共享卷积层的特征来避免重复计算。这意味着网络的一个部分计算出来的特征可以在多个窗口之间共享,这在一些网络架构如全卷积网络(FCN)中非常有效。
  3. 使用区域建议网络(Region Proposal Networks, RPNs) :例如在Faster R-CNN中,RPNs可以在图像中快速有效地提出可能包含对象的候选区域,然后只对这些区域进行分类,从而减少需要评估的窗口数量。
  4. 采用图像金字塔:在多尺度处理时,可以对整个图像创建一个图像金字塔,每一级代表一个不同的尺度。然后在每一级上应用相同的检测器,以此来捕捉不同大小的对象。

在神经网络中,分类所有可能的边界框可能会很慢(这还可能增加误报的风险)。

解决办法:集中关注那些最有可能是物体的边界框。


R-CNN 是指区域为基础的卷积神经网络。在提供的图像中,R-CNN 能识别出少数几个用于物体检测的窗口(称为"区域提案(region proposals)"或"感兴趣区域(ROIs)")。

生成区域提案(Generating region proposals)

R-CNN 利用选择性搜索(Selective Search)来生成感兴趣区域(ROIs)。

选择性搜索算法:

  • 将图像过度分割为超像素
  • 根据颜色+纹理、尺寸和紧凑度的相似性,迭代地合并相邻超像素。

流程

  1. 输入图像
  2. 选择性搜索:通过选择性搜索大约产生2000个区域提案(Regions of Interest, RoI)。
  3. 扭曲(warp)图像区域:将这些提案的区域扭曲成固定尺寸(如224x224像素),以便能够通过卷积网络处理。
  4. 卷积网络
  5. 分类每个区域:输出每个区域的类别预测。
  6. 边框回归 :网络还会进行边框回归,预测变换参数( <math xmlns="http://www.w3.org/1998/Math/MathML"> t x , t y , t h , t w t_x,t_y,t_h,t_w </math>tx,ty,th,tw),以微调原始的 RoI 使其更准确地框住物体。
  7. 边界框(Bounding Box)

边界框的计算

原始区域提案(Original region proposal) :用 ( <math xmlns="http://www.w3.org/1998/Math/MathML"> p x , p y , p h , p w p_x, p_y, p_h, p_w </math>px,py,ph,pw)表示。其中, <math xmlns="http://www.w3.org/1998/Math/MathML"> p x , p y p_x, p_y </math>px,py是提案框的中心坐标, <math xmlns="http://www.w3.org/1998/Math/MathML"> p h , p w p_h, p_w </math>ph,pw 是提案框的高度和宽度。

变换参数(Transform) :用 ( <math xmlns="http://www.w3.org/1998/Math/MathML"> t x , t y , t h , t w t_x,t_y,t_h,t_w </math>tx,ty,th,tw) 表示,这是网络预测的对原始提案框进行调整的参数。

目标(Goal) :计算最终的边界框 ( <math xmlns="http://www.w3.org/1998/Math/MathML"> b x , b y , b h , b w b_x,b_y,b_h,b_w </math>bx,by,bh,bw),这是根据变换参数调整后的提案框,以更精确地覆盖图像中的物体。

步骤1. 平移(Translate)

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> b x = p x + p w ⋅ t x b_x=p_x + p_w⋅t_x </math>bx=px+pw⋅tx:新的中心 x 坐标是原始中心 x 坐标加上宽度与 <math xmlns="http://www.w3.org/1998/Math/MathML"> t x t_x </math>tx 的乘积。
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> b y = p y + p h ⋅ t y b_y=p_y+p_h⋅t_y </math>by=py+ph⋅ty:新的中心 y 坐标是原始中心 y 坐标加上高度与 <math xmlns="http://www.w3.org/1998/Math/MathML"> t y t_y </math>ty 的乘积。

步骤2. 缩放(Scale)

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> b w = p w ⋅ e x p ⁡ ( t w ) b_w=p_w⋅exp⁡(t_w) </math>bw=pw⋅exp⁡(tw):新的宽度是原始宽度乘以 <math xmlns="http://www.w3.org/1998/Math/MathML"> t w t_w </math>tw 的指数。
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> b h = p h ⋅ e x p ⁡ ( t h ) b_h=p_h⋅exp⁡(t_h) </math>bh=ph⋅exp⁡(th):新的高度是原始高度乘以 <math xmlns="http://www.w3.org/1998/Math/MathML"> t h t_h </math>th 的指数。

训练 Training

  1. CNN 预训练
  2. 替换最后一层:CNN的最后一层(原本是1000个输出,对应ImageNet的1000个类别)替换成一个新的分类层,这个层的大小是 1x(N+1)。
    • N+1 代表 N 个目标物体的类别数 + "background" 类别
    • CNN在一个(N+1)类的物体检测任务上进行重新训练,使用与真实(ground truth)"物体"交并比(IoU)>= 0.5的区域作为正样本。
    • 通过采样使得大约75%的训练样本属于"背景"类别,以此来平衡物体类别和背景类别的样本数量。
  3. 提取的CNN特征被用作以下模型的输入:
    • 标签分类模型(1-vs-all linear SVM)
    • 边界框模型(class-specific linear regression 线性回归模型)

测试(Testing)

  1. 输入图像
  2. 计算区域提案(Selective Search)
  3. 每个区域:通过运行 CNN 以预测类别标签和边界框变换
  4. "检测结果" = 具有最高类别置信度分数的区域

❓基于阈值 or 前k个?

基于阈值:这种方法会设定一个阈值,只有当区域的类别置信度分数超过这个阈值时,该区域才会被认为是有效的检测结果。

  • 准确性要求高
  • 不确定的目标数量
  • 动态环境

前k个:选择置信度分数最高的前k个区域,无论它们的绝对分数如何。

  • 固定数量的目标
  • 实时处理需求:如果系统需要实时处理图像,可能需要快速决定最重要的几个检测目标,那么选择前k个可以提供更快的响应。
  • 避免偏差:不平衡的数据集中,可以防止某个类别完全支配结果
    ❓整体(Overall) or 按类别(Per-category)?

整体

如果选择整体的方法,那么所有类别的置信度分数会被放在一起比较,然后选择最高的分数,不管是哪个类别。

按类别

如果选择按类别的方法,那么会对每一个类别独立地进行选择。这样做可以确保每个类别都被代表,尤其是在类别不平衡的情况下。例如,在一个涉及许多猫和少数狗的数据集中,按类别选择可以防止所有的检测结果都是猫。

小结

R-CNN(基于区域的卷积神经网络)并行处理一组区域提议上的分类。

输出:类别标签(class labels)和边界框变换(bounding box transforms)。

优点

  • 比对每个窗口进行分类更有效率。

缺点

  • 仍然需要对许多窗口进行分类(例如,大约2000个)。
  • 区域提议步骤可能会错过一些对象。

Fast R-CNN

Fast R-CNN的主要变化是:将整个图像通过一个全卷积神经网络。从最后一个卷积层获取区域提议。

这种方法提高了效率,因为它避免了对每个提议区域重新运行整个卷积网络的需要,这是原始R-CNN所做的。相反,它在整个图像上只运行一次卷积操作,并从这些特征图中提取出区域提议,这样做显著减少了计算量。

流程

  1. 输入图像
  2. 整图卷积特征提取:输入图像一次性通过卷积神经网络(ConvNet),网络处理整个图像并输出最后一层的卷积特征图。
  3. 区域提案生成:使用选择性搜索算法或其他区域提案方法从图像中生成可能包含目标的区域提案(Region Proposals,RoIs)。
  4. 特征映射和裁剪:将每个区域提案映射到卷积特征图上,从卷积特征图上对应的位置裁剪出特征。
  5. RoI池化和分类:裁剪出的特征被调整大小(通常通过RoI池化操作),以便能够送入后续的全连接层进行分类,并预测出每个区域的类别以及边界框的精确位置。

怎么进行裁剪/resize 特征?

将边界框"对齐"到最接近的特征列上,然后将该区域分割成2x2的网格。在每个网格单元内部进行最大池化(maxpool)操作,得到调整后的特征(例如,512 x 2 x 2的尺寸)。这种方法允许不同尺寸的区域提案(RoIs)映射到一个固定大小的特征表示。


❓ 对于'主干网络'(backbone)FCN和每个区域的网络,应该使用什么架构?(What architecture to use for 'backbone' FCN and per-region networks?)

准确性与计算效率的平衡

  • 主干网络需要足够强大,能够从输入图像中提取丰富的特征。
  • 每个区域网络应该足够快,以便能在多个区域上实时运行。

训练

  1. 从N张图片中抽样R个区域(Regions)进行训练

    • 为了提高效率,通常选取较小的N(例如1-2),同时R设置得相对较大(例如64)。
  2. 样本区域选择

    • 在抽样过程中,要保证大约75%的训练集是"背景"(即非目标类别)。
  3. 使用多任务损失函数(multi-task loss)L进行训练

    • <math xmlns="http://www.w3.org/1998/Math/MathML"> L = L c l s + L l o c L=L_{cls}+L_{loc} </math>L=Lcls+Lloc,其中 <math xmlns="http://www.w3.org/1998/Math/MathML"> L c l s L_{cls} </math>Lcls是分类的交叉熵损失, <math xmlns="http://www.w3.org/1998/Math/MathML"> L l o c L_{loc} </math>Lloc是真实边界框参数与预测边界框参数之间的Smooth L1损失。
  4. 分类损失LclsLcls​

    • <math xmlns="http://www.w3.org/1998/Math/MathML"> L c l s L_{cls} </math>Lcls是对类别标签计算的交叉熵损失,用于目标的分类。
  5. 定位损失LlocLloc​

    • <math xmlns="http://www.w3.org/1998/Math/MathML"> L l o c L_{loc} </math>Lloc是Smooth L1损失,用于计算真实边界框参数与预测边界框参数之间的差距。
    • 只针对物体类别计算 <math xmlns="http://www.w3.org/1998/Math/MathML"> L l o c L_{loc} </math>Lloc,背景类别不计算此损失。

小结

端到端基于区域的卷积神经网络(End-to-end region-based convolutional neural network)

优点

  • 比R-CNN快(训练速度大约快9倍,测试速度大约快140倍)
  • 比R-CNN稍微精确一些

缺点

  • 感兴趣区域(ROIs)不是学习得来的;区域提议步骤可能会遗漏一些物体。

Faster R-CNN

主要变化:网络学习区域提议,而不是使用选择性搜索。

区域提议网络(RPN)

  1. 在特征图的每一列上放置一个"锚点"
  2. 每个锚点生成 k 个固定大小和宽高比的区域
  3. 在每个区域内,预测对象类别和边界框变换

Faster R-CNN

对于每个区域:

  • 裁剪并调整特征的大小
  • 预测物体类别和边界框变换

对于每张图片:

  • 运行主干卷积神经网络以获得特征图
  • 从区域提议网络(RPN)计算区域提议

训练

RPN 损失是以下损失的加权和:

  • 分类损失:二元交叉熵损失(任何物体与背景之间)
  • 回归损失:真实边界框参数与预测边界框参数之间的 SmoothL1 损失

如同 Fast R-CNN,训练样本包括从 N 张图片中抽样的 R 个区域(锚点)(R = 256,N = 1)

  • 锚点的抽样方式是,最多 50% 的样本是物体

完整的网络是 RPN 和 Fast R-CNN 的结合(共享一个主干网络)

  • 训练这个网络有多种方法,但原始方法是交替训练 RPN 和 Fast R-CNN

小结

  • Faster R-CNN 与 Fast R-CNN 类似,但通过一个区域提案网络(Region Proposal Network, RPN)来学习区域提案。
  • 比 Fast R-CNN 更快(测试时快大约 10 倍)
  • 模块化方法 ------ 使用深度主干网络的 Faster R-CNN 的变体往往更加准确
  • 速度-准确性权衡:更深的网络也更慢

小结

对象检测等于图像区域的分类。

穷尽搜索(Exhaustive search)很慢;大多数方法只使用部分区域("区域提案"或"兴趣区域(ROIs)")。

需要考虑许多参数:

  • 什么算作真正的检测/真正的拒绝(IoU阈值)?
  • 如何选择区域提案?
  • 如何处理类别不平衡?("背景"是最常见的类别)
相关推荐
背水19 分钟前
pillow常用知识
人工智能·计算机视觉·pillow
AI人工智能+21 分钟前
浅析人脸活体检测技术的实现过程及其应用领域
人工智能·计算机视觉
阿利同学2 小时前
ade20k 街景图像【数据集】及其【论文出处】ADE20K数据集 超过25000张图像的语义分割数据集
计算机视觉·数据集·获取qq1309399183·ade20k 街景图像·语义分割数据集
程序员非鱼3 小时前
深度学习中的损失函数详解
人工智能·深度学习·计算机视觉·损失函数
xuehaisj4 小时前
地图箭头方向检测系统源码分享
人工智能·计算机视觉·目标跟踪
William_Edmund4 小时前
Python 语言学习——应用1.2 数字图像处理(第二节,变换)
人工智能·学习·计算机视觉
人工智能技术咨询.8 小时前
张雪峰谈人工智能技术应用专业的就业前景!
人工智能·学习·计算机视觉·语言模型
BulingQAQ15 小时前
论文阅读:PET/CT Cross-modal medical image fusion of lung tumors based on DCIF-GAN
论文阅读·深度学习·生成对抗网络·计算机视觉·gan
CV-King17 小时前
opencv实战项目(三十):使用傅里叶变换进行图像边缘检测
人工智能·opencv·算法·计算机视觉
禁默17 小时前
2024年计算机视觉与艺术研讨会(CVA 2024)
人工智能·计算机视觉