目标检测基础
目标检测是计算机视觉中的一个重要任务,它的目的是在图像或视频中找到特定对象,并对其进行定位和分类。
一、基本概念
1.边界框(Bounding Box)
边界框是一个矩形框,用于圈出图像中一个特定对象的位置。通常,边界框由其左上角和右下角的坐标定义,或者由中心点坐标以及框的宽度和高度定义。
2.标注(Annotation)
标注通常是一个手动或自动创建的数据集,用于标记图像中每个对象的位置(通常用边界框表示)和类别(例如狗、车等)。
3.IoU(Intersection over Union)
IoU是一个衡量两个边界框重叠程度的指标。它是两个边界框的交集面积与并集面积之比。IoU 主要用于评估模型性能,特别是在训练和测试阶段。
$$ IoU = \frac{ A \cap B }{A \cup B} $$
- 高IoU值: 当IoU值接近1时,准确。
- 低IoU值: 当IoU值接近0时,不准确的。
4.非极大值抑制(NMS)
当我们进行对象检测时,通常会生成多个边界框来围绕同一个对象。非极大值抑制能帮助我们从这些重叠的边界框中选取一个最“合适”的边界框。
步骤:
- 对所有边界框进行排序 根据检测算法给出的置信度分数(或者其他评价指标),对所有生成的边界框从高到低进行排序。
- 选择置信度最高的边界框 选择置信度最高的边界框,并将其添加到最终结果中。
- 计算重叠区域(IoU) 计算置信度最高的边界框与其它所有未被选择的边界框之间的交并比。
- 抑制低分边界框 设置一个阈值(通常为0.5或者其他值),用于判断两个边界框是否重叠太多。对于那些与已选中的置信度最高的边界框有高度重叠(IoU大于阈值)的边界框,将它们从候选列表中移除。
- 重复步骤2-4 回到步骤2,再次选择现有候选框中置信度最高的一个,然后重复步骤3和步骤4,直到所有的边界框都被处理或选出。
二、R-CNN
Region-based Convolutional Neural Networks
1.基本思想
R-CNN 的主要思想是先从输入图像中提取出可能包含目标的候选区域(Region Proposals),然后用卷积神经网络(CNN)对每个候选区域进行特征提取,并最终用SVM进行分类。
候选区域(Region Proposals)是目标检测任务中一个非常重要的概念。它们是从输入图像中提取出来的小块图像区域,这些区域有可能包含目标对象。候选区域的生成通常是目标检测流程的第一步。
**Why need?**在目标检测任务中,可能的对象位置和大小是多种多样的。计算所有可能的位置和大小是不现实的,因为这样做会非常慢且计算量巨大。通过生成一组候选区域,模型可以专注于这些“有希望”的区域,从而大大提高效率。
2.主要步骤
- 一张图像生成1K~2K个候选区域
- 对每个候选区域,使用深度网络提取特征
- 特征送入每一类的SVM 分类器,判别是否属于该类
- 使用回归器精细修正候选框位置
(1)候选区域生成
使用了Selective Search方法从一张图像生成约2000-3000个候选区域。基本思路如下:
- 使用一种过分割手段,将图像分割成小区域
- 计算相似度并合并。查看现有小区域,合并可能性最高的两个区域。重复直到整张图像合并成一个区域位置
- 输出所有曾经存在过的区域,所谓候选区域
候选区域生成和后续步骤相对独立,实际可以使用任意算法进行。
(2)特征提取
过程:
- 输入候选区域: 从Selective Search中得到的每一个候选区域(Region Proposal)都会被用作此步骤的输入。
- CNN模型: 使用预训练的卷积神经网络(CNN)模型,比如VGG或AlexNet。
- 特征向量: 将每个候选区域通过CNN模型进行前向传播,最后得到一个固定长度的特征向量。
(3)类别判断
在R-CNN中,一旦从每个候选区域中提取出特征向量,这些特征就会被送入一个或多个支持向量机(SVM)分类器以进行分类。
过程:
- 输入特征向量: 每一个候选区域通过CNN模型得到的特征向量作为此步骤的输入。
- SVM分类器: 使用预先训练好的SVM分类器(通常是一对多的多分类器)。
- 输出类别: SVM会输出每个候选区域最可能的对象类别(例如狗、车等)。
(4)边界框精修
在R-CNN中,类别确定后,下一步是边界框回归,以更精确地定位对象。
过程:
- 输入: 类别和特征向量。
- 边界框回归器: 一个预先训练好的回归模型。
- 输出精细边界框: 使用回归模型来调整和优化原始的边界框,使其更精确地围绕目标对象。