实时目标检测使用SSDs Single Shot MultiBox检测器
探索实时目标检测:SSDs单镜头多盒检测器
介绍
在实时目标检测中,常用的方法论通常采用多步骤方法,包括提出边界框、像素或特征重采样,以及高质量的分类器应用。尽管这种方法在准确性上取得了很高的成就,但其计算需求常常限制了其适用于实时应用的能力。然而,单次多框检测器(SSD)代表了基于深度学习的目标检测的重大飞跃。SSD在显著提高检测速度的同时,保持了异常准确性,通过在边界框提议阶段消除像素或特征的重采样的需求。相反,SSD通过在特征图上应用小型卷积滤波器直接预测物体类别和边界框偏移。
![]()
研究人员试图通过优化此过程的不同阶段来制作更快的检测器,但通常会导致准确性降低。然而,本文介绍了一种称为SSD(单次多框检测器)的具有突破性的基于深度学习的目标检测器,它在显著提高速度的同时保持了准确性。SSD通过消除对边界框提议进行像素或特征重采样的需求,而直接预测物体类别和边界框偏移,从而实现了这一目标。
学习目标
- 了解SSD在图像和视频目标检测中的原理和架构。
- 探索SSD在速度和准确性方面相对于传统目标检测模型的优势。
- 了解默认边界框的概念及其在多尺度目标检测中的作用。
- 深入了解从SSD的高效目标检测能力中受益的各种应用和行业。
本文是作为数据科学博客马拉松的一部分发表的。
- 这篇AI论文揭示了上下文学习的秘密:语言模型如何将功能编码为向量魔法
- 认识Wonder3D:一种新颖的人工智能方法,可以从单视角图像高效生成高保真带纹理的网格模型
- 图灵的磨坊:AI超级计算机推动英国经济发展
什么是单次多框检测器(SSD)?
单次多框检测器(SSD)是一种创新的计算机视觉中的目标检测算法。它以其在图像或视频帧中迅速准确地检测和定位对象的能力而脱颖而出。SSD之所以与众不同的原因在于其能够在深度神经网络的一次通过中完成这一任务,这使得它异常高效,非常适合实时应用。
![]()
SSD通过在特征图的多个位置使用具有不同长宽比的锚框来实现这一目标。这些锚框使其能够有效处理不同大小和形状的对象。此外,SSD使用多尺度特征图来检测不同尺度的对象,以确保准确识别图像中的小型和大型对象。由于其能够同时检测多个对象类别,SSD对于涉及单个图像中多个对象类别的任务是一个有价值的工具。其在速度和准确性之间的平衡使其在行人和车辆检测以及更广泛的领域中的对象检测等应用中成为一个受欢迎的选择,如自动驾驶、监控和机器人技术等。
SSD以其实时执行目标检测的能力而闻名,并已广泛应用于自动驾驶、监控和增强现实等各种应用中。
SSD的主要特点
- 单次检测:与一些传统的目标检测模型使用两步法(首先提出感兴趣区域,然后分类这些区域)不同,SSD通过一次网络传递完成目标检测。它直接预测对象的存在和其边界框坐标,一次完成,使得速度更快、更高效。
- 多框:SSD在输入图像的多个位置使用一组不同尺度和宽高比的默认边界框(锚框)。这些默认框作为关于对象可能出现位置的先验知识。SSD预测对这些默认框进行调整以准确定位对象。
- 多尺度检测:SSD在多个具有不同分辨率的特征图上进行操作,使其能够检测不同大小的对象。预测在不同的尺度上进行,以捕捉不同级别的对象。
- 类别分数:SSD不仅预测边界框坐标,还为每个默认框分配类别分数,表示对象属于特定类别(例如汽车、行人、自行车)的可能性。
- 困难负样本挖掘:在训练中,SSD采用有害挖掘方法,专注于具有挑战性的例子,提高模型的准确性。
什么是SSD的关键概念?
单次多盒检测器(SSD)是一个复杂的目标检测模型,具有多个关键概念,使其能够实现高效准确的性能。以下是SSD的关键概念:
- 默认边界框(锚定框):SSD使用预定义的一组默认边界框,也称为锚定框。这些框具有不同的尺度和长宽比,提供有关目标在图像中可能的位置的先验知识。SSD预测这些默认框的调整以准确定位目标。
![]()
- 多尺度特征图:SSD在不同分辨率的多个特征图上操作。通过对输入图像应用卷积层来获取这些特征图。使用多个尺度的特征图使SSD能够检测不同大小的目标。
- 多尺度预测:对于每个默认边界框,SSD在具有不同分辨率的多个特征图层上进行预测。这使得模型能够捕捉到不同尺度的目标。这些预测包括不同目标类别的类别分数和调整默认框以匹配目标位置的偏移量。
- 长宽比处理:SSD针对不同边界框的长宽比使用单独的预测器(卷积滤波器)。这使其能够适应具有不同形状和长宽比的目标。
SSD的架构
Single Shot MultiBox Detector的架构是用于实时目标检测的深度卷积神经网络(CNN)。它结合了多个层,可以在单次前向传递中执行定位(边界框预测)和分类(目标类别预测)。
Single Shot MultiBox Detector(SSD)是基于前馈卷积神经网络(CNN)的强大对象检测框架。设计SSD的架构以生成一组固定的边界框和相关分数,指示这些边界框中是否存在对象类别实例。
关键组件和特征
以下是SSD方法的关键组件和特征的解释:
![]()
基础网络(截断用于分类):SSD从一个标准的CNN架构开始,通常用于高质量图像分类任务。但是,在SSD中,这个基础网络在任何分类层之前被截断。基础网络负责从输入图像中提取重要特征。
- 多尺度特征图:额外的卷积层被添加到被截断的基础网络中。这些层逐渐减小空间维度,同时增加通道数(特征通道)。这种设计使得SSD能够生成多个尺度的特征图。每个尺度的特征图适用于检测不同大小的目标。
- 默认边界框(锚定框):SSD将一组预定义的默认边界框(锚定框)与每个特征图单元相关联。这些默认框具有不同的尺度和长宽比。默认框相对于其对应的单元的放置是固定的,并遵循卷积网格模式。对于每个特征图单元,SSD预测调整这些默认框以适应对象的偏移量以及指示特定目标类别存在的类别分数。
![]()
- 长宽比和多个特征图:SSD使用具有不同长宽比的默认框,并将它们用于多个不同分辨率的特征图上。这种方法有效地捕捉可能的对象形状和大小范围。与其他模型不同,SSD不依赖于中间全连接层进行预测,而是直接使用卷积滤波器。
![]()
SSD是如何工作的?
- 打开笔记本:转到Google Colab(colab.research.google.com)并打开笔记本。
- 转到运行时菜单:在顶部菜单中点击“运行时”选项。
- 选择更改运行时类型:从下拉菜单中选择“更改运行时类型”。
- 选择硬件加速器:一个窗口将弹出。在此窗口中,从“硬件加速器”下拉菜单中选择“GPU”。
- 保存更改:点击“保存”应用更改。
%%bashpip install numpy scipy scikit-image matplotlib
输出:
![]()
预训练模型:加载通过深度学习框架(如TensorFlow或PyTorch)在COCO数据集上预训练的SSD(单次多框检测器)模型需要特定的代码实现和对相应库和模型库的访问。
import torchssd_model = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_ssd')utils = torch.hub.load('NVIDIA/DeepLearningExamples:torchhub', 'nvidia_ssd_processing_utils')
输出:
![]()
ssd_model.to('cuda')ssd_model.eval()
加载图片:为了准备用于物体检测的输入图片,您需要加载它们,将它们转换成与选择的物体检测模型兼容的格式,然后在这些图片上进行推理。
urls =["https://farm5.staticflickr.com/4080/4951482119_0ecd88aa33_z.jpg"]inputs = [utils.prepare_input(uri) for uri in urls]tensor = utils.prepare_tensor(inputs)
运行模型:运行SSD网络进行物体检测。
with torch.no_grad(): detections_batch = ssd_model(tensor) results_per_input = utils.decode_results(detections_batch)best_results_per_input = [utils.pick_best(results, 0.40) for results in results_per_input]
对图片训练:要访问COCO数据集的注释并将类别ID映射到物体名称,您可以使用COCO API。COCO API允许您检索有关COCO数据集的信息,包括对象类别及其对应的标签。
classes_to_labels = utils.get_coco_object_dictionary()
显示预测结果:使用COCO数据集的类别标签在图像上可视化检测结果。
from matplotlib import pyplot as pltimport matplotlib.patches as patchesfor image_idx in range(len(best_results_per_input)): fig, ax = plt.subplots(1) # 显示原始的、非归一化的图像... image = inputs[image_idx] / 2 + 0.5 ax.imshow(image) # ...以及检测结果 bboxes, classes, confidences = best_results_per_input[image_idx] for idx in range(len(bboxes)): left, bot, right, top = bboxes[idx] x, y, w, h = [val * 300 for val in [left, bot, right - left, top - bot]] rect = patches.Rectangle((x, y), w, h, linewidth=1, edgecolor='r',\ facecolor='none') ax.add_patch(rect) ax.text(x, y, "{} {:.0f}%".format(classes_to_labels[classes[idx] - 1],\ confidences[idx]*100), bbox=dict(facecolor='white', alpha=0.5))plt.show()
输出:
![]()
SSD方法的训练
- 分配真实信息:在SSD中,我们将地面实况信息(即实际物体位置和类别)分配给固定输出集合中的特定输出。这个过程对于训练模型正确识别对象非常重要。
- 匹配策略:在训练过程中,SSD会根据最佳Jaccard重叠将每个地面实况框与默认框进行匹配。Jaccard重叠度量预测框与地面实况框的重叠程度。只要默认框与地面实况框的Jaccard重叠度高于阈值(通常为0.5),就认为是匹配的。与其他方法(如MultiBox)不同,如果多个默认框与单个地面实况框的Jaccard重叠度超过阈值,则SSD允许多个默认框与该地面实况框匹配。这简化了学习问题,因为模型可以为多个重叠的默认框预测高分数,而不是被强制选择一个。
- 训练目标:SSD的训练目标源自MultiBox的训练目标,但扩展到处理多个物体类别。它包括定位损失(loc)和置信度损失(conf):
检测器输出
在SSD中,必须将真实的对象位置和类别信息分配给固定集合中的特定输出。
- 定位损失(Lloc):此损失度量预测的框参数(例如,框坐标)与真实的框参数之间的差异。它使用平滑的L1损失函数。
- 置信度损失(Lconf):使用多类别的softmax损失计算置信度损失。它度量预测的类别得分与真实的类别标签之间的差异。整体损失函数是定位损失和置信度损失的加权和。
- 难例挖掘:为了解决训练过程中正样本(匹配)和负样本(未匹配)的不平衡问题,SSD使用难例挖掘。它基于每个默认框的最高置信度损失选择一部分负样本。其目标是保持负样本和正样本之间的合理比例(通常约为3:1),以实现更高效和稳定的训练。
- 数据增强:应用数据增强来使模型对各种输入对象的尺寸和形状都具有鲁棒性。在训练过程中,每个输入图像可以经过多次转换,包括裁剪、缩放和水平翻转。这些增强操作有助于模型更好地适应真实场景。
总体而言,SSD的训练过程涉及将真实的对象信息分配给默认框、定义包括定位损失和置信度损失在内的训练目标、谨慎选择默认框的尺度和长宽比、处理正负样本不平衡问题以及进行数据增强以提高模型的鲁棒性。
与其他目标检测模型的比较
SSD在实时性能、简单性和准确性与速度之间取得了良好的平衡,因此非常适合许多应用场景,特别是那些需要实时或接近实时对象检测的场景。然而,在需要最高精度级别的任务中,尽管计算需求会增加,但Faster R-CNN、RetinaNet或级联R-CNN等模型可能更合适。选择哪种模型取决于应用的具体要求和限制。
SSD的应用
- 自动驾驶车辆:用于实时识别道路上的行人、车辆和障碍物。
- 监控系统:用于检测和跟踪受监控区域内的入侵者或可疑活动。
- 零售分析:零售商使用SSD来监控店铺货架,进行库存管理、分析客户行为和分析购物模式。
- 工业自动化:在制造环境中,SSD通过识别生产线上的产品缺陷来辅助质量控制。
- 无人机应用:装备了SSD的无人机可以通过从空中检测对象或异常来执行搜索和救援操作、农业监测和基础设施检查等任务。
SSD的挑战和限制
SSD的主要限制是在准确检测小物体、重叠严重的物体或具有极端长宽比的物体方面存在困难,这可能影响其在某些场景中的性能。
- 小物体检测:SSD的主要限制之一是在检测小物体方面的有效性。由于锚框未能有效地表示小物体的尺寸和形状,因此小物体可能会对检测的准确性带来挑战。
- 复杂背景:放置在复杂或杂乱背景中的物体可能对SSD构成挑战。模型可能因周围环境中的混乱视觉信息而产生误报或错误分类。
- 速度和准确性的权衡:尽管SSD在速度方面表现出色,但为了实现顶级准确性可能需要做出一些权衡。在精度至关重要的应用中,可能更倾向于使用其他更准确的目标检测方法,牺牲一些速度。如果需要快速预测,则使用SSD,但准确性较低。
- 定制开销:为特定应用进行SSD的微调可能需要大量的人力和资源。为了适应特定的使用场景,可能需要深度学习方面的专业知识进行定制和优化。
SSD 项目
碎纸机手部保护:该项目中使用 SSD(Single Shot MultiBox Detector)具有重要意义,因为它构成了用于识别和追踪碎纸机附近手部的目标检测模型的基础。以下是项目中如何利用 SSD:
要获取项目的源代码,请克隆存储库:
git clone https://github.com/NeHa77A/Shredder-Machine-Hand-Protection.git
![]()
![]()
- 目标检测:SSD 作为目标检测框架,用于实时视频数据中识别和定位手部。它特别适用于此任务,因为它提供高准确率和高效推理能力,对于及时检测碎纸机附近的手部至关重要。
- 实时处理:确保系统能够及时响应潜在的安全风险。它能够快速准确地识别手部,并使系统在毫秒级内发出警告和启动关闭。
- 定制:可以对 SSD 进行微调和定制,以适应项目的特定要求。通过使用来自操作碎纸机工人的注释数据训练 SSD 模型,它可以适应不同的工作条件和机器设计。
- 准确性和精度:SSD 在提供准确和精确的目标检测方面表现出色。在视频数据中区分手部和其他对象或背景元素非常重要,以确保只有在必要时触发安全措施。
- 效率:SSD 的效率对于保持系统性能至关重要。它经过优化,可以在各种硬件平台上运行,使其成为工业环境中部署的理想选择。
总之,SSD 对于该项目至关重要,因为它是目标检测模型的基础。它的实时处理、准确性和定制能力使安全系统能够有效地检测和响应碎纸机附近潜在的手部伤害。
实际案例研究
- 自动驾驶:Tesla 的自动驾驶汽车采用 SSD 和其他计算机视觉技术,用于检测和分类道路上的对象,如行人、车辆和道路标识。这项技术对于实现先进的驾驶辅助和完全自动驾驶功能至关重要。
- 机场安全:机场使用基于 SSD 的监控系统来监测乘客和行李。SSD 有助于识别可疑物品、无人看管行李和异常活动,提升安全措施。
- 零售库存管理:零售商使用 SSD 进行库存管理,能够快速准确地统计店铺货架上的产品。它有助于追踪库存水平,防止库存差异。
- 工业自动化:制造业利用 SSD 进行质量控制。它应用于检查产品缺陷、验证标签放置以及检查生产线上的污染。
- 机器人装配线:在机器人领域,使用 SSD 来识别和定位动态环境中的对象。这在拾取和放置操作以及其他机器人任务中特别有用。
这些实际案例展示了 SSD 在各个行业中的多功能性和重要性。
结论
总而言之,SSD 是一种突破性的目标检测模型,结合了速度和准确性。SSD 利用多尺度卷积边界框预测的创新方法,能够高效地捕捉各种形状和尺寸的对象。通过引入更多精心选择的默认边界框,提升了其适应性和性能。
SSD 是一种多功能独立的目标检测解决方案,也是更大系统的基础。它平衡了速度和精度,在实时目标检测、跟踪和识别中具有价值。总体而言,SSD 代表了计算机视觉领域的重大进展,有效应对了现代应用的挑战。
重点摘要
- 实证结果表明,SSD 在准确性和速度方面常常优于传统的目标检测模型。
- SSD 采用多尺度方法,能够高效地检测同一图像中不同尺寸的对象。
- SSD 是各种计算机视觉应用的多功能工具。
- SSD 以其实时或准实时的目标检测能力而闻名。
- 使用更多的默认框能够使 SSD 更好地适应复杂的场景和具有挑战性的对象变化。
常见问题
此文章中显示的媒体不归Analytics Vidhya所有,而是由作者自行决定使用。




