数据集与评价指标
算法评估相关概念
TP: 正确分类为正例的数量,即实际为正例且被分类器分类为正例的实例数;
FP: 错误分类为正例的数量,即实际为负例但被分类器分类为正例的实例数;
FN: 错误分类为负例的数量,即实际为正例但被分类器分类为负例的实例数;
TN: 正确分类为负例的数量,即实际为负例且被分类器分类为负例的实例数。
P(精确率):TP / (TP + FP),表示“严谨”程度;
R(召回率):TP / (TP + FN)。召回率越高,准确性越低,表示“通过”的程度;
准确率(Accuracy):(TP + TN) / (TP + FP + TN + FN)。
P-R 曲线 P-R 曲线展示了召回率和准确率之间的关系。准确率(精确率)越高,召回率越低。
假设一个测试集,其中的图像只包含小狗和小猫两种:
➢ True positives:将小狗图像正确识别为小狗。
➢ False positives:将小猫图像错误地识别为小狗。
➢ False negatives:未能识别出小猫图像,系统错误地将它们认作小狗。
➢ True negatives:未能识别出小狗图像,系统正确地将它们认作小猫。
置信度与准确率
调整阈值改变准确率或召回率
通过调整阈值,可以控制系统识别的图像数量。这样做会导致 Precision 和 Recall 值的变化。例如,将蓝色虚线移动到第一张图像下方,即让系统只识别出最上面的那张小猫图像,那么 Precision 就是 100%,而 Recall 就是 20%。如果将蓝色虚线移动到第二张图像下方,即让系统只识别出最上面的两张图像,那么 Precision 仍然是 100%,而 Recall 则增长到 40%。
AP计算
mAP:均值平均准确率
其中𝑁代表测试集中所有图片的个数,𝑃(𝑘)表示在能识别出𝑘个图片的时候Precision的值,而 Δ𝑟(𝑘)则表示识别图片个数从𝑘 − 1变化到𝑘时(通过调整阈值)Recall值的变化情况。
目标检测与YOLO
目标检测问题
目标检测的基本思想是在给定的图像中准确地定位物体的位置,并对物体的类别进行标注。由于物体可能具有不同的尺寸范围、摆放角度、姿态,并且可以出现在图像的任何位置,而且可能存在多个类别的物体。
基本的滑动窗口方法是通过拖动一个固定大小的窗口来搜索可能包含目标的区域。
滑动窗口的问题
➢ 滑动次数过多,导致计算速度缓慢。假设图片的宽度为 𝑤,高度为 ℎ,识别一张图片需要时间 𝑇,那么总共需要的时间为 𝑤×ℎ×𝑇。
➢ 目标的大小不同,导致在每个滑动位置都需要使用多个不同尺寸的窗口来覆盖可能的目标。由于图片的宽度和高度各不相同,并且它们的比例也不同,因此需要考虑使用多个不同大小的窗口。
滑动窗口的改进
在一般图片中,大多数位置都不会存在目标。为了提高效率,可以确定那些更有可能出现目标的位置,然后针对这些位置使用卷积神经网络(CNN)进行检测,这被称为两步法(Region Proposal)。
然而,两步法仍然需要大量时间。为了进一步减少可能出现目标的位置,并且将目标的分类检测和定位问题合并在一个网络中,提出了一步法(YOLO)。
一步法的基本思想是将目标检测简化为一个二分类问题:只检测一类目标。然后,将分类问题扩展为同时进行回归和分类。
YOLO网络结构与输入
YOLO网络的结构包含24个卷积层和2个全连接层。前20个卷积层用于预训练,而后面的4个卷积层和2个全连接层是随机初始化的。
YOLO v1在PASCAL VOC数据集上进行训练,因此输入图像的尺寸为448 × 448 × 3。如果实际情况中的图像尺寸不符合要求,则需要进行 resize 或切割以满足要求的尺寸。
包围框与置信度
处理细节——归一化
四个关于位置的值,分别是𝑥, 𝑦, ℎ和𝑤,均为整数,实际预测中收敛慢,因此,需要对数据进行归一化,在0-1之间。
处理细节——置信度
P𝑜𝑏𝑗是一个grid有物体的概率,IOU是预测的bb和真实的物体位置的交并比。
处理细节——训练值(ground truth)
P𝑜𝑏𝑗的ground truth:三个目标中点对应格子为1,其它为0。
损失函数
NMS
NMS(Non-Maximum Suppression)是一种常用于目标检测中的算法,用于去除冗余的边界框,保留最具代表性的检测结果。其核心思想正如你所描述的:
➢ 丢弃概率小于预定IOU阈值的所有边界框: 首先,将概率(或得分)小于预先设定的阈值的边界框丢弃,通常这个阈值是0.5。
➢ 选择具有最高概率的边界框并将其作为输出预测: 在剩余的边界框中,选择具有最高概率的边界框作为输出预测。
➢ 计算与输出预测边界框重叠的其他边界框的IoU值: 计算输出预测边界框与其他剩余边界框的 IoU(交并比)值。
➢ 舍弃IoU大于阈值的边界框: 将与输出预测边界框重叠度(IoU)大于预先设定的阈值的边界框舍弃,以确保最终的输出结果不会有过多的重叠。
➢ 重复步骤2: 重复以上步骤,直到所有边界框都被视为输出预测或被舍弃。
模型训练
- YOLO 首先使用 ImageNet 数据集对前 20 层卷积网络进行预训练,这是为了初始化网络权重,让网络具备一定的特征提取能力。
- 然后,使用完整的网络,在 PASCAL VOC 数据集上进行对象识别和定位的训练和预测。这个过程中可能会采用数据增强和 dropout 等技术来防止过拟合。
- YOLO 的最后一层采用线性激活函数,因为它需要回归 bounding box 的位置信息。而其它层则采用 Leaky ReLU 激活函数,这种激活函数能够在负数区域有较小的斜率,有助于加速收敛和防止梯度消失的问题。
语义分割
FCN(Fully Convolutional Network)是一种被广泛应用于语义分割任务的基本网络结构。相比传统的卷积神经网络(CNN)只能输出固定大小的特征图,FCN 可以接受任意大小的输入,并且输出相应大小的分割结果。
FCN 的核心思想是将传统的全连接层替换为全卷积层,这使得网络能够接受任意尺寸的输入图像,并生成相应尺寸的分割结果。同时,FCN 通过使用上采样或转置卷积(transposed convolution)等技术,将中间层的特征图进行上采样,以恢复到原始输入图像的尺寸,从而实现像素级别的语义分割。
FCN 通常包括编码器(Encoder)和解码器(Decoder)两部分:
- 编码器部分通常由预训练的卷积神经网络(如 VGG、ResNet 等)组成,用于提取图像的高层次特征。
- 解码器部分则通过上采样或转置卷积等操作,将编码器输出的特征图进行恢复,并生成与输入图像相同尺寸的语义分割结果。
FCN 的结构简单而有效,在语义分割领域取得了很多成功,并成为了后续许多语义分割模型的基础。