FRCNN
RPN (Region Proposal Network)
-**生成提议**(Anchors):
RPN 扫描整个图像的特征图,使用一组预定义的框(anchors)来确定潜在的感兴趣区域。这些anchors覆盖不同的尺度和宽高比。
- **评估提议**:
对于每个锚点,RPN 预测两个主要内容:一个是对象分数(表示锚点中含有对象的概率),另一个是边界框回归偏移(用于调整锚点的大小和位置以更好地匹配潜在的对象)。
- **选择提议**:
RPN 会基于对象分数和回归偏移选择一定数量的高质量提议。通常,通过设置阈值和应用非极大值抑制(NMS)来减少重叠的提议。
Loss:
1. RPN分类损失: 这是一个二元交叉熵损失,用于评估RPN预测的锚点是前景(含有对象)还是背景的准确性。目的是区分包含目标的锚点与纯背景的锚点。
2. RPN边界框回归损失: 这个损失函数衡量RPN预测的边界框调整(回归)与实际目标边界框之间的差异。通常使用平滑L1损失来实现,目的是使预测的锚点精确地定位到实际的对象上。
ROI (Region of Interest) Networks
- **过滤和选择提议**:
ROI 网络接收 RPN 选出的提议,并使用ROI池化(ROIPool)或ROI对齐(ROIAlign)操作来提取每个提议的固定大小的特征图。这样做是为了处理不同尺寸和宽高比的提议。
- **置信度评估**:
对于每个提议的特征图,ROI 网络计算两部分输出:一部分是多类别分类分数(包括背景类别),另一部分是对应每个类别的边界框回归偏移。
- **最终确定提议**:
基于分类分数和回归偏移,确定最终的对象边界框和类别标签。通常,只有置信度高的提议(即分类分数高的提议)会被视为检测到的对象。
Loss:
1. ROI分类损失: 这是一个多类别交叉熵损失,用于评估ROI网络预测每个提议区域的类别的准确性。它不仅区分对象和背景,还要区分不同类型的对象。
2. ROI边界框回归损失: 和RPN边界框回归损失类似,这个损失函数针对ROI网络预测的边界框调整进行评估。它同样通常使用平滑L1损失,目的是进一步精炼RPN提出的提议,以更准确地框定每个检测到的对象。
所以,RPN 负责生成提议,而 ROI 网络负责进一步精炼这些提议,并通过分类和回归确定最终的对象检测结果。简而言之,RPN 提出候选,ROI 网络对这些候选进行详细分析和确认。
Non-Maximum Suppression (NMS)
Non-Maximum Suppression(NMS)是计算机视觉中常用的一种技术,尤其在目标检测任务中。它的主要作用是减少重叠的边界框数量,保留最佳的边界框,并去除那些较不重要的边界框。
在目标检测过程中,同一个目标可能会被检测多次,导致有多个边界框相互重叠。NMS通过以下步骤解决这个问题:
1. **置信度排序**:将所有的边界框根据它们的置信度(即模型认为框内含有目标的概率)进行排序。
2. **选择最高置信度**:选择置信度最高的边界框作为参考框(Reference Box),并将其保留下来。
3. **计算重叠程度**:计算其他所有边界框与参考框的重叠程度,通常通过计算它们的交并比(Intersection over Union, IoU)。
4. **去除重叠边界框**:如果一个边界框与参考框的IoU超过了预设的阈值(表示它们重叠得太多),则这个边界框会被去除。
5. **重复过程**:从剩下的边界框中再次选择置信度最高的框作为新的参考框,并重复上述过程,直到所有的边界框都被处理过。
通过NMS,可以显著减少冗余的边界框,保留最有可能正确标识目标的边界框,这对于目标检测的准确性和效率都非常重要。
如果一个边界框与参考框的交并比(IoU)超过了预设的阈值,这通常意味着两个边界框定位到了相同的目标。在目标检测任务中,我们通常只需要一个边界框来准确地标识和定位每个目标。
当IoU值很高时,这表明边界框之间有很大的重叠区域,从而使得我们有理由相信这些边界框都在尝试定位同一个目标。在这种情况下,为了减少冗余和避免同一个目标被重复标记,我们选择保留置信度最高的那个边界框(即参考框),因为高置信度意味着模型更确信该框内包含了一个目标,并且定位可能更准确。其他重叠的、置信度较低的边界框则会被去除。
Focal Loss
Focal Loss 是一种在目标检测任务中常用的损失函数,特别是在处理类别不平衡问题时。它由 Facebook AI 研究院(FAIR)的 Tsung-Yi Lin 等人在 2017 年提出,作为他们研究成果 RetinaNet 模型的一部分。Focal Loss 的目的是解决在目标检测中,背景类(即负样本)远多于前景类(即正样本)时,导致的训练过程中正样本难以获得足够关注的问题。
在传统的交叉熵损失函数中,模型倾向于被大量容易分类的负样本所主导,这可能导致模型对于那些较难分类的正样本的学习不足。Focal Loss 通过修改交叉熵损失函数,降低了这些容易分类样本的权重,使模型更专注于难以分类的样本。
具体来说,Focal Loss 函数的形式如下:
其中: 是模型预测正确类别的概率。
是用于调整正负样本权重的平衡系数。
是一个调节因子,称为聚焦参数,它用于减少容易分类样本的权重。
当一个样本容易分类时(即 接近 1),
项变得非常小,这样容易样本的损失就会被降低,而模型会被“推动”去关注那些更难分类的样本(即
低)。这种机制使得模型在训练过程中更加关注那些对提高总体性能贡献更大的样本。通过适当选择
和
的值,研究者可以平衡学习过程,改善模型对于少数类的检测性能,这在实际应用中特别有用。
GIoU (Generalized Intersection-over-Union) Loss
Generalized Intersection-over-Union (GIoU) loss 是一种在目标检测任务中用于边界框回归的损失函数,由 He et al. 在2019年提出。这种损失函数是传统交并比(Intersection-over-Union,IoU)的一个扩展,它旨在解决IoU在某些情况下无法提供有用梯度的问题,比如当两个边界框不重叠时:IoU 是一个衡量两个边界框重叠程度的指标,定义为边界框的交集面积除以它们的并集面积。然而,当边界框不重叠时,IoU 为零,这导致无法通过IoU的梯度来改善这些边界框的位置。
GIoU 损失通过引入一个最小封闭边界框 (Area of smallest enclosing box), 指的是能够同时包含预测边界框和真实边界框的最小矩形区域的面积。
其中,A为最小封闭边界框面积,U为pred bbox和gt bbox之间的并集面积。
例如,假设我们有一个预测边界框和一个真实边界框,它们彼此之间完全不重叠。最小封闭边界框将是包含这两个边界框的最小的矩形。这个封闭矩形的面积,减去两个边界框并集的面积,再除以最小封闭矩形的面积,就是 GIoU 损失中的调整项,用于衡量预测边界框和真实边界框相对于最小封闭矩形的对齐程度。
GIoU loss 趋向于零的时候,预测的边界框与真实的边界框之间的对齐程度就越高。这个损失函数提供了一个更全面的梯度,即使在没有交集的情况下,也能够指导预测框向真实框移动。
评价指标
模型评价三个方面:
- 分类精度:准确度Accuracy、精度Precision、召回率Recall Rate、PR曲线、AP、mAP等
- 定位精度:IoU
- 运行速度:fps每秒处理多少张图片
混淆矩阵:
真实值 \ 预测值 | 正例 | 反例 |
正例 | TP | FN |
反例 | FP | TN |
第一位(T&F)为依据真实结果划分的正确or错误,第二位(P&N)为假设时的正确or错误。
准确度ACC:
所有预测中预测正确的比例
精确率Precision:
在所有预测正确中的正确比例:
召回率Recall:
所有的正样本中正确识别的概率:
(左半边黑球为正样本,右半边空心球为负样本 。圈住为预测为真的所有样本)
PR 曲线(Precision Recall Curve):
横轴为 Recall,竖轴为 Precision
AP (Average Precision) :
检测器在各个 Recall 情况下的平均值,对应的就是 PR 曲线下的面积(AUC, Area Under Curve)。AP 是针对某单一类别来说的。
mAP:
mAP 是从类别的维度对 AP 进行平均,因此可以评价多分类器的性能。
mAP的大小一定在[0,1]区间,越大越好。
具体计算流程
计算平均精度(Average Precision, AP)的过程涉及评估目标检测模型的性能,特别是其检测精确度和召回率。这个过程通常涉及以下步骤:
1. **计算 IoU 分数**:
- 对于每个预测的边界框,计算其与所有真实边界框的交并比(IoU)。
- 如果预测的边界框与某个真实边界框的 IoU 超过设定的阈值(例如 0.5),则该预测被认为是正确的(True Positive, TP)。
注意:
False Positives (FP):当模型预测一个目标存在(即生成了一个边界框),但实际上并没有相应的真实目标与之对应时,这个预测就被认为是一个假阳性(False Positive)。即如果pred bbox没有与任何一个gt bbox的 IoU 超过设定的阈值,或者该预测对应的类别不正确,那么这个预测就是一个 FP。错检
False Negatives (FN):当模型未能检测到一个实际存在的目标时,这种情况被称为假阴性(False Negative)。即对于每个真实目标,如果没有pred bbox与之对应(即没有pred bbox的 IoU 与该gt bbox超过阈值),那么这个真实目标就被视为一个 FN。漏检
2. **排序预测**:
- 将所有预测按照它们的置信度(即模型认为边界框包含目标的概率)从高到低排序。
3. **计算精确度和召回率**:
- 对于排序中的每一个预测,计算累积的精确度(Precision)和召回率(Recall)。
- 精确度是指到目前为止检测到的 True Positives 与所有检测到的(包括 True Positives 和 False Positives)的比例。
- 召回率是指到目前为止检测到的 True Positives 与所有真实目标(所有 True Positives 和 False Negatives)的比例。
4. **创建 Precision-Recall 曲线**:
- 以召回率为横轴,精确度为纵轴,绘制 Precision-Recall 曲线。
- 对于每个召回率水平,找到最高的精确度值。
5. **计算 AP 值**:
- AP 值是这个 Precision-Recall 曲线下的面积。
- 在离散的情况下,这通常通过计算曲线下每个小段的面积的和来近似,即计算不同召回率水平下的精确度的加权平均。
6. **对于多类别目标检测**:
- 上述步骤对每个类别分别进行,然后计算所有类别的 AP 值的平均值,得到平均 AP(mean AP,简称 mAP)。
AP 值能够全面评估模型在不同置信度阈值下的性能,它考虑了模型的精确度和召回率,是目标检测领域中一个非常重要的评估指标。
Pascal VOC 和 COCO annotations
Pascal VOC 和 COCO 是两个常用于计算机视觉研究的数据集,它们各自采用了不同的注释格式。理解这些差异对于进行目标检测、分割等任务至关重要,尤其是当你需要处理或转换这些数据集的时候。
### Pascal VOC 注释
1. **格式**: Pascal VOC 数据集通常使用 XML 文件格式进行标注。
2. **内容**: 每个 XML 文件对应一个图像,并包含图像的基本信息(如尺寸),以及对象的详细标注。每个对象的标注包括类别标签和边界框(bbox),边界框以 `(xmin, ymin, xmax, ymax)` 的形式给出,表示矩形框左上角和右下角的坐标。
3. **用途**: 主要用于目标检测、分类和(边界框)分割任务。
4. **结构示例**:
```xml
<annotation>
<folder>folder_name</folder>
<filename>image_name.jpg</filename>
<size>
<width>width</width>
<height>height</height>
<depth>depth</depth>
</size>
<object>
<name>class_name</name>
<bndbox>
<xmin>x_min</xmin>
<ymin>y_min</ymin>
<xmax>x_max</xmax>
<ymax>y_max</ymax>
</bndbox>
</object>
...
</annotation>
```
### COCO 注释
1. **格式**: COCO 数据集使用 JSON 文件格式进行标注。
2. **内容**: JSON 文件包含对多个图像的注释。每个图像的注释包括对象的类别标签、边界框,以及(对于分割任务)多边形标注。边界框以 `[x_min, y_min, width, height]` 的形式给出,多边形标注以一系列点的坐标列表给出。
3. **用途**: 主要用于目标检测、分割(包括实例分割和语义分割)、关键点检测等任务。
4. **结构示例**:
```json
{
"images": [
{
"file_name": "image_name.jpg",
"height": height,
"width": width,
"id": image_id
},
...
],
"annotations": [
{
"image_id": image_id,
"bbox": [x_min, y_min, width, height],
"category_id": category_id,
"segmentation": [[x1, y1, x2, y2, ...]],
...
},
...
],
"categories": [
{"id": 1, "name": "class1"},
...
]
}
```
### 关键差异
- **文件格式**: VOC 使用 XML,而 COCO 使用 JSON。
- **标注详情**: COCO 提供更丰富的标注信息,包括实例分割和关键点检测,而 VOC 主要集中于目标检测和分类。
- **边界框表示**: VOC 使用两个角的坐标,COCO 使用左上角坐标加宽高。
- **数据结构**: COCO 的结构更加复杂,可以在一个文件中包含整个数据集的信息。
这些差异导致在使用这些数据集时,可能需要不同的数据解析和预处理方法。在使用诸如 Detectron2 这样的现代计算机视觉库时,通常会提供这两种格式的解析器。