热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SSD算法:实现目标检测的有效方法

目标检测算法总体分为:基于区域的算法和基于回归的算法1)基于区域的算法:RCNN,FastRCNN,FasterRCNN,MaskRCN

目标检测算法总体分为:基于区域的算法和基于回归的算法

1)基于区域的算法: RCNN, Fast RCNN, Faster RCNN, Mask RCNN 等。整个检测过程分为两个阶段。在第一个阶段,检测器需要找到一些假设的区域 (ROI);在第二个阶段,检测器需要在这些假设区域上进行分类 (classification) 和 位置回归 (bounding box regression)。

2)基于回归的算法:YOLO系列 等。检测是一个端到端 (end-to-end) 的过程,直接回归出物体的类别和位置。

SSD(Single Shot MultiBox Detector)是一个one stage的检测算法。它可以认为是 Faster RCNN 和 YOLO 的结合:采用了基于回归的模式(类似于YOLO),在一个网络中直接回归出物体的类别和位置,因此检测速度很快。同时也利用了基于区域的概念(类似于Faster RCNN),在检测的过程中,使用了许多候选区域作为ROI。

Faster RCNN的回顾:

Faster RCNN存在的问题:

1)对小目标检测效果很差(只在一个特征层进行预测,这个特征层已经经过很多卷积层之后的,经过的越多,抽象层次越高,图像的细节信息保留越少,小目标效果越差,要在相对低层次上的特征来进行预测)

2)模型大,检测速度慢(两次预测,two stages方法的通病)

SSD网络

在不同特征尺度上预测不同尺度的目标

骨干网络:

SSD的骨干网络是基于传统的图像分类网络,采用了vgg16的部分网络作为基础网络。如图所示,经过10个卷积层(conv layer) 和 3个池化层(max pooling) 的处理,我们可以得到一个尺寸为 38×38×512 的特征图 (Conv4_3 feature map)。下一步,我们需要在这个特征图上进行回归,得到物体的位置和类别。

回归 (Regression):

和 YOLO 的回归操作相似,首先我们先考虑在特征图的每个位置上,有且只有一个候选框(default box)的情况。

1)位置回归:检测器需要给出框中心偏移量 (cx,cy),相对于图片尺寸的宽度和高度 (w,h),总计需要回归4个参数。(Fast RCNN是每一个类别都要一个回归框,总共(N+1)*4个参数)

2)分类: 对于每一个 bounding box,我们需要给出 20个类别+1个背景类的得分(score)。

对于每一个位置,我们需要一个25维的向量来存储检测物体的位置和类别信息。对于我们的38×38的特征图,我们需要一个维度为 38×38×25 的空间来存储这些信息。因此,检测器需要学习特征图(38×38×512)到检测结果(38×38×25)的映射关系。这一步转换,使用的是卷积操作:使用25个3×3的卷积核,对特征图进行卷积。到这里,我们已经完成了在每个位置上回归一个框的操作。

3)多个候选框:SSD在每个位置上,希望回归k个基于不同尺寸的框。因此在每个位置上需要 25×k 维的空间,存储这些框的回归和分类信息,因而卷积操作变成了使用 25×k个3×3的卷积核,来获得 38×38×25k 维度的检测结果图(score map)。

4)多个特征图:对于神经网络,浅层的特征图包含了更较多的细节信息,更适合进行小物体的检测;而较深的特征图包含了更多的全局信息,更适合大物体的检测。因此,通过在不同的特征图上对不同尺寸的候选框进行回归,可以对不同尺寸的物体有更好的检测结果。

SSD的检测精度和速度都非常出色,76.8 mAP  22FPS 超过了Faster RCNNYOLO


推荐阅读
  • 本文探讨了卷积神经网络(CNN)中感受野的概念及其与锚框(anchor box)的关系。感受野定义了特征图上每个像素点对应的输入图像区域大小,而锚框则是在每个像素中心生成的多个不同尺寸和宽高比的边界框。两者在目标检测任务中起到关键作用。 ... [详细]
  • 深入解析Android自定义View面试题
    本文探讨了Android Launcher开发中自定义View的重要性,并通过一道经典的面试题,帮助开发者更好地理解自定义View的实现细节。文章不仅涵盖了基础知识,还提供了实际操作建议。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 深入解析JVM垃圾收集器
    本文基于《深入理解Java虚拟机:JVM高级特性与最佳实践》第二版,详细探讨了JVM中不同类型的垃圾收集器及其工作原理。通过介绍各种垃圾收集器的特性和应用场景,帮助读者更好地理解和优化JVM内存管理。 ... [详细]
  • 本文介绍如何使用Objective-C结合dispatch库进行并发编程,以提高素数计数任务的效率。通过对比纯C代码与引入并发机制后的代码,展示dispatch库的强大功能。 ... [详细]
  • 本文详细介绍了如何在BackTrack 5中配置和启动SSH服务,确保其正常运行,并通过Windows系统成功连接。涵盖了必要的密钥生成步骤及常见问题解决方法。 ... [详细]
  • This guide provides a comprehensive step-by-step approach to successfully installing the MongoDB PHP driver on XAMPP for macOS, ensuring a smooth and efficient setup process. ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • 本文详细介绍了Java中org.eclipse.ui.forms.widgets.ExpandableComposite类的addExpansionListener()方法,并提供了多个实际代码示例,帮助开发者更好地理解和使用该方法。这些示例来源于多个知名开源项目,具有很高的参考价值。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • 本文深入探讨了 Java 中的 Serializable 接口,解释了其实现机制、用途及注意事项,帮助开发者更好地理解和使用序列化功能。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • Android 渐变圆环加载控件实现
    本文介绍了如何在 Android 中创建一个自定义的渐变圆环加载控件,该控件已在多个知名应用中使用。我们将详细探讨其工作原理和实现方法。 ... [详细]
author-avatar
超级放开祢旳掱
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有