在过去的十年中,深度学习技术的发展引起了极大的关注,并成为人工智能领域中不可或缺的技术之一。深度学习在计算机视觉领域的应用越来越广泛,其中目标检测是备受关注的领域之一。目标检测是指在图像或视频中检测出目标的位置和边界框,然后对目标进行分类或识别。目标检测在计算机视觉领域中具有非常重要的应用,如目标跟踪、目标检索、视频监控、图像字幕、图像分割、医学影像等等。除了这些应用场景外,目标检测还可以应用于自动驾驶、机器人视觉、智能安防等领域。
目标检测、分类和分割是计算机视觉领域中的三个重要任务,它们在输入和输出上有所不同,具体区别如下:
目标检测的目标是在图像或视频中检测出目标的位置和边界框,然后对目标进行分类或识别。这个任务需要同时完成目标的位置定位和分类任务。目标检测输出的结果包括目标的位置和类别。
分类的目标是将输入图像或视频中的物体或场景分为不同的类别。分类任务只需要对整张图像或视频进行分析,输出结果是物体或场景所属的类别。
分割的目标是将输入图像或视频中的每个像素分配到不同的语义类别,形成一个像素级别的标注结果。分割任务需要对整张图像或视频进行像素级别的分析,输出结果是一个标注图像,每个像素都被分配了一个类别。
可以看出,目标检测是分类和分割的进一步扩展,需要同时完成物体位置的定位和分类任务。分类和分割通常只需要对整张图像或视频进行分析,而目标检测需要在图像中识别出物体的位置和边界框。在实际应用中,这三种任务通常会同时使用,以实现更精确和全面的图像分析和理解。
目标检测方法通常可以分为基于机器学习和基于深度学习两类方法。
基于机器学习的目标检测方法通常使用传统的机器学习算法,例如支持向量机、AdaBoost
和随机森林等。这些方法的基本思想是提取图像特征并使用分类器对特征进行分类,然后使用对象检测器检测目标。这些算法需要手动选择和提取图像特征,因此需要领域专家的知识和经验。
基于深度学习的目标检测方法通常使用深度神经网络来自动学习特征并进行目标检测。目前比较流行的深度学习目标检测方法包括两类:基于区域提取的方法(两阶段检测方法)和单阶段检测方法。其中,基于区域提取的方法包括R-CNN
、Fast R-CNN
、Faster R-CNN
和Mask R-CNN
等,它们主要通过候选区域提取器生成目标候选区域,并使用CNN网络对每个候选区域进行特征提取和分类。而单阶段检测方法则直接从图像中提取目标位置和类别信息,例如YOLO
和SSD
等,它们可以实现更快速的检测速度。
基于深度学习的目标检测主要包括训练和测试两个部分。训练的主要目的是利用训练数据集进行检测网络的参数学习。测试的主要目的是在经过训练后,评估检测网络的性能表现。
AlexNet
、VGGNet
、ResNet
和DenseNet
等。近期,基于Transformer
的网络,如ViT
、Swin
和PVT
等也开始被用于目标检测。在训练开始时,通常将在大规模图像分类数据库ImageNet
上训练的预训练权重作为检测器骨干网络的初始权重。(IoU)
准则、距离准则、似然估计准则和二分匹配等。基于标签分类的结果,采用损失函数计算分类和回归等任务的损失,并利用反向传播算法更新检测网络的权重。常用的分类损失函数有交叉熵损失函数、聚焦损失函数等,而回归损失函数有L1
损失函数、平滑L1
损失函数、交并比IoU
损失函数、GIoU(generalized IoU)
损失函数和CIoU(complete-IoU)
损失函数等。(NMS)
技术,将多个重叠的检测结果进行筛选,只保留最有可能代表物体的检测结果。NMS
的基本思想是通过比较检测结果的置信度得分,去除重叠框中得分较低的框,只保留得分最高的框。(Precision)
、召回率(Recall)
、F1
值、平均精度(Average Precision,AP)
、均值召回率(Mean Average Precision,mAP)
等。其中,AP
是一种常用的评估指标,用于衡量检测器在不同置信度阈值下的性能表现。而mAP
是AP
的平均值,通常作为衡量整个检测算法性能的指标。在测试阶段,首先需要输入一张待检测的图像。这张图像会被送入训练好的检测网络中进行处理,这个过程叫做前向传播(forward propagation)
。在检测网络中,图像会被分类,确定图像中存在哪些物体,并输出每个物体的位置信息。这些位置信息通常表示为边界框(bounding box)
,也可以表示为像素级的分割掩模(segmentation mask)
,它们描述了物体在图像中的位置和大小。
然而,在检测网络输出结果之后,可能会出现多个边界框或分割掩模与同一物体相关联的情况。这可能是因为图像中的物体形状、大小、角度等方面的变化,或者是因为图像的不同区域可能包含相同的物体。因此,需要对这些检测结果进行后处理,以便确定每个物体的最终边界框或分割掩模。
这个后处理过程的目标是为每个物体保留一个检测结果,并去除其他冗余的检测结果。这个过程被称为非极大值抑制(non-maximum suppression,NMS)
。它的基本思想是通过比较检测结果的分类得分和位置信息,为每个物体保留一个得分最高的检测结果。在执行 NMS
之后,每个物体将仅对应一个边界框或分割掩模,这是最终的检测结果。
论文地址:https://arxiv.org/pdf/1506.02640v5.pdf
YOLO(You Only Look Once)
是一种目标检测算法,它在单个神经网络中同时完成对象检测和分类的任务。相比传统的对象检测方法,YOLO
算法的速度更快,因为它只需要运行一次神经网络,而不是多次。
YOLO
的卷积神经网络架构是来自GoogleLeNet
模型,YOLO
的网络有24
层卷积和2
层全连接,与GoogLeNe
不同的地方在于作者在某些3×3
的卷积层前用了1×1
的卷积降维, 整体结构图如下图所示:
YOLO
算法的核心思想是将目标检测问题转化为回归问题。它将图像划分为一个固定数量的网格(比如7×7
),每个网格预测固定数量的边界框和它们的置信度和类别概率。边界框指的是目标在图像中的位置和大小,置信度表示边界框中是否存在目标,类别概率表示目标属于哪个类别。
具体来说,YOLO
算法将输入图像经过卷积神经网络提取特征后,得到一个S×S×(B×5+C)
的张量。其中,S
表示网格数量,B
表示每个网格预测的边界框数量,C
表示类别数量。张量中每个元素都表示一个边界框的信息,包括边界框的中心坐标、宽度、高度、置信度和类别概率。YOLO
算法通过对张量进行解码,得到图像中所有目标的位置和类别。
YOLO
算法的训练过程是基于交叉熵损失函数的反向传播。对于每个边界框,损失函数包括位置误差、置信度误差和类别误差。YOLO
算法通过反向传播更新神经网络的参数,提高目标检测的准确率。