当前位置: 首页 > news >正文

MMDetection框架下的常见目标检测与分割模型综述与实践指南

目录

综述与实践指南

SSD (Single Shot MultiBox Detector)

基本配置和使用代码

RetinaNet

基本配置和使用代码

Faster R-CNN 

基本配置和使用代码

Mask R-CNN

基本配置和使用代码

Cascade R-CNN

基本配置和使用代码

总结


综述与实践指南

MMDetection是一个基于PyTorch的开源框架,是一个目标检测工具箱,包含了丰富的目标检测、实例分割、全景分割算法以及相关的组件和模块,支持多种经典和现代模型,如ResNet、VGG、EfficientNet等。它还集成了单阶段和两阶段检测器,如YOLO、SSD、Faster R-CNN等,并提供了模块化设计,简化了模型组合、调整和优化的流程。框架还包括数据处理、模型训练、验证和测试的集成解决方案,并附有详细的文档和示例。MMDetection 由 7 个主要部分组成,apis、structures、datasets、models、engine、evaluation 和 visualization。

MMDetection广泛应用于自动驾驶、安防监控等领域,为研究者和开发者提供了一个强大的工具,以促进深度学习目标检测的实践和创新。

图片

模型算法下载 

Coovally AI Hub公众号后台回复模型算法」,即可获取下载链接!


SSD (Single Shot MultiBox Detector)

SSD,是一种单阶段目标检测器。其优点是原始的YOLO和Faster R-CNN在推理速度和精度之间取得了更好的平衡。SSD模型是由Wei Liu等人在使用卷积神经网络(CNN)进行目标检测的研究中,提出的一种改进思路。

SSD用于图像分类、物体检测和语义分割等各种深度学习任务。相对于其他目标检测算法,SSD模型有更高的精度,而且速度也是非常快的。其主要思路是通过在CNN的最后几层添加多个预测层实现多尺度的目标检测,然后通过一个过滤策略对每个检测框进行筛选,最后输出最终的检测结果。

SSD模型结构分为两个部分,一个是特征提取网络,另一个是多尺度检测网络。SSD模型可以被应用在各种目标检测任务中,比如人脸检测、车辆检测等。

图片

基本配置和使用代码


# 配置文件路径
config_file = 'configs/ssd/ssd300_coco.py'# 模型权重路径
checkpoint_file = 'ssd300_coco_20200307-b3c19318.pth'# 创建模型
model = init_detector(config_file, checkpoint_file, device='cuda:0')# 测试单张图片
img = 'test.jpg'  # 测试图片路径
result = inference_detector(model, img)
# 可视化结果
show_result_pyplot(model, img, result)
  • 参考论文:SSD: Single Shot MultiBox Detector

  • 论文链接:https://arxiv.org/pdf/1512.02325


RetinaNet

RetinaNet来自FAIR 论文:Focal Loss for Dense Object Detection,其简要概述为:深入分析了极度不平衡的正负(前景背景)样本比例导致 one-stage 检测器精度低于 two-stage 检测器,基于上述分析,提出了一种简单但是非常实用的 Focal Loss 焦点损失函数,并且 Loss 设计思想可以推广到其他领域,同时针对目标检测领域特定问题,设计了 RetinaNet 网络,结合 Focal Loss 使得 one-stage 检测器在精度上能够达到乃至超过 two-stage 检测器。

总的来说,RetinaNet 有两个大创新:1.Focal Loss,2.RetinaNet网络。Focal Loss 几乎已经成为 one-stage 算法的标配,而 RetinaNet 网络结构也是目前主流的目标检测网络结构,其变体不计其数。

RetinaNet网络主要由ResNet作为主干网络、FPN(特征金字塔网络)作为 neck、以及分类和边框回归子网络作为head组成。RetinaNet模型的特点是它是一种单阶段目标检测器,与传统的两阶段检测器(如Faster R-CNN)相比,它更为简洁和高效。RetinaNet的结构主要包括三个部分:Backbone、Neck和Head。Backbone通常采用深度卷积神经网络来提取特征,Neck部分用于收集不同尺度的特征图,而Head则负责生成最终的检测结果。

图片

标准的 RetinaNet 骨架网络采用的是 ResNet 系列。由于骨架本身没有限制,MMDetection 中目前提供的预训练权重所涉及的骨架网络包括:ResNet50-Caffe、ResNet50-Pytorch、ResNet101-Caffe、ResNet101-Pytorch、ResNeXt101,非常丰富。

MMDetection RetinaNet包括了详细的配置和参数设置,这使得用户可以根据自己的需求灵活地调整模型。例如,用户可以自定义Backbone网络、调整锚点生成策略、选择不同的损失函数等。

基本配置和使用代码


# 配置文件路径
config_file = 'configs/retinanet/retinanet_r50_fpn_1x_coco.py'
# 模型权重路径
checkpoint_file = 'retinanet_r50_fpn_1x_coco_20200130-c2398f9e.pth'# 创建模型
model = init_detector(config_file, checkpoint_file, device='cuda:0')# 测试单张图片
img = 'test.jpg'  # 测试图片路径
result = inference_detector(model, img)
# 可视化结果
show_result_pyplot(model, img, result)
  • 参考论文:Focal Loss for Dense Object Detection

  • 论文链接:https://arxiv.org/abs/1708.02002


Faster R-CNN 

Faster R-CNN是目标检测领域最为经典的方法之一,通过 RPN(Region Proposal Networks) 区域提取网络和 R-CNN 网络联合训练实现高效目标检测。其简要发展历程为:R-CNN➡Fast R-CNN➡Faster R-CNN。

Faster R-CNN是在Fast R-CNN基础上引入了RPN,Faster R-CNN 的出现改变了整个目标检测算法的发展历程。之所以叫做 two-stage 检测器,原因是其包括一个区域提取网络 RPN 和 RoI Refine 网络 R-CNN,同时为了将 RPN 提取的不同大小的 RoI 特征图组成 batch 输入到后面的 R-CNN 中,在两者中间还插入了一个 RoI Pooling 层,可以保证任意大小特征图输入都可以变成指定大小输出。简要结构图如下所示:

图片

由于 Faster R-CNN 是后续各个算法的 baseline 且用途非常广泛,OpenMMLab 提供了非常多的模型配置供研究或者不同任务 fintune 用,几乎覆盖了所有常用配置,如下所示:

  • 1x、2x 和 3x 的模型配置和权重;

  • 多尺度训练配置和权重;

  • 不同骨架的配置和权重;

  • PyTorch 和 Caffe style 的配置和权重;

  • 各种 loss 对比配置和权重;

  • 不包含 FPN 的 Faster R-CNN 配置和权重;

  • 常用类别例如 person 的配置和权重,可作为下游任务例如行人检测的预训练权重,性能极佳。

图片

基本配置和使用代码

# 测试单张图片
img = 'path/to/test/image.jpg'  # 图片路径
result = inference_detector(model, img)# 可视化结果
show_result_pyplot(model, img, result)# 如果你需要批量处理图片,可以使用以下代码
# images = ['path/to/image1.jpg', 'path/to/image2.jpg', ...]
# for img in images:
#     result = inference_detector(model, img)
#     show_result_pyplot(model, img, result)
  • 参考论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

  • 论文链接:https://arxiv.org/pdf/1506.01497


Mask R-CNN

在 FPN 提出后,Kaiming He 等进一步对其进行任务扩展,提出了 Mask R-CNN,通过新增 mask 掩码分支实现实例分割任务,其最大特点是任务扩展性强,通过新增不同分支就可以实现不同的扩展任务。例如可以将 mask 分支替换为关键点分支即可实现多人姿态估计。除此之外,为解决特征图与原始图像上的 RoI 不对准的问题,提出了 ROIAlign 模块。

Mask R-CNN 和 Faster R-CNN 的区别主要包括两个方面:

  • R-CNN 中额外引入 Mask Head,从而可以实现实例分割任务;

  • 针对特征图与原始图像上的 RoI 不对准问题,提出了 RoIPool 的改进版本 RoIAlign 。

图片

Mask R-CNN 易于推广到其他任务例如,我们可以在同一框架内实现多人姿态估计。我们在 COCO 整套挑战赛的所有三个赛道上都取得了优异成绩,包括实例分割、边界框对象检测和人物关键点检测。在没有任何附加功能的情况下,Mask R-CNN 在每项任务中的表现都优于所有现有的单一模型参赛者,包括 COCO 2016 挑战赛的获奖者。我们希望我们简单有效的方法能成为一个坚实的基线,并为未来的实例级识别研究提供帮助。

图片

基本配置和使用代码


# 配置文件路径
config_file = 'configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py'
# 模型权重路径
checkpoint_file = 'mask_rcnn_r50_fpn_1x_coco_20200205-d4b0c5d6.pth'# 创建模型
model = init_detector(config_file, checkpoint_file, device='cuda:0')# 测试单张图片
img = 'test.jpg'  # 测试图片路径
result = inference_detector(model, img)
# 可视化结果
show_result_pyplot(model, img, result)
  • 参考论文:Mask R-CNN

  • 论文链接:https://arxiv.org/pdf/1703.06870


Cascade R-CNN

Cascade R-CNN,即级联区域卷积神经网络,是一种高效的目标检测算法。它的出现解决了传统R-CNN系列算法在处理小目标、重叠目标和背景混杂等复杂场景时的困扰。Cascade R-CNN通过多阶段精细化的检测过程,克服了单阶段处理器在处理复杂场景时的不足,显著提升了目标检测的性能。

在目标检测中,需要使用IoU阈值来区分正负样本。一个使用低IoU阈值(比如0.5)训练的目标检测器,往往会产生噪声检测结果。但是,增加IoU阈值往往又会导致检测性能下降。这主要是由于两个原因:①在训练过程中,正样本数目呈指数级减少而导致过拟合;②推理过程中,训练检测器时的IoU和预测结果时的IoU不匹配(mismatch,这一点后面会具体解释)。针对这些问题,论文中提出了一种多阶段目标检测结构Cascade R-CNN。它由一系列随着IoU阈值增加训练而成的检测器组成,对close false positives具有更高的选择性。这个算法是分阶段训练的,每个阶段的检测器的输出都会获得一个更好的分布,从而以该输出作为新的输入来训练下一个更高质量的检测器。通过逐步改进预测输出结果的重采样可以保证所有检测器在训练时都有一个大小相当的正样本集,从而减少了过拟合问题。在推理阶段会采用相同的级联过程,使得每个阶段的hypotheses和detector quality更加匹配。Cascade R-CNN在COCO数据集上的表现超过了所有单阶段目标检测模型。实验表明,Cascade R-CNN适用于不同的检测器结构,并且取得了一致性的提升。

Cascade R-CNN与Faster R-CNN流程对比图,如下图所示。

图片

论文中提出了多阶段/多阈值的cascade rcnn网络,主要目的就是通过级联的、逐渐提升iou阈值的head,有选择性的抑制很相近的假阳样本(close false positives), 尤其是“close but not correct” bounding boxes,从而提升整体检测效果。该网络结构清晰,效果显著,并且能简单移植到其它detector中,带来2-4%的性能提升。

图片

基本配置和使用代码


# 配置文件路径
config_file = 'configs/cascade_rcnn/cascade_rcnn_r50_fpn_1x_coco.py'
# 模型权重路径
checkpoint_file = 'cascade_rcnn_r50_fpn_1x_coco_20200316-3dc56deb.pth'# 创建模型
model = init_detector(config_file, checkpoint_file, device='cuda:0')# 测试单张图片
img = 'test.jpg'  # 测试图片路径
result = inference_detector(model, img)
# 可视化结果
show_result_pyplot(model, img, result)
  • 参考论文:Cascade R-CNN: High Quality Object Detection and Instance Segmentation

  • 论文链接:https://arxiv.org/pdf/1906.09756


总结

MMDetection计算机视觉系列模型在目标检测领域不断刷新纪录,从精度到效率均取得了显著成就,推动了多个领域的AI发展。

值得一提的是,Coovally模型训练平台涵盖了国内外开源社区1000+模型算法,本期文章中的SSD、Faster R-CNN等热门算法全部包含,用户可一键进行下载。

图片

相关文章:

MMDetection框架下的常见目标检测与分割模型综述与实践指南

目录 综述与实践指南 SSD (Single Shot MultiBox Detector) 基本配置和使用代码 RetinaNet 基本配置和使用代码 Faster R-CNN 基本配置和使用代码 Mask R-CNN 基本配置和使用代码 Cascade R-CNN 基本配置和使用代码 总结 综述与实践指南 MMDetection是一个基于Py…...

怎么实现Redis的高可用?

大家好,我是锋哥。今天分享关于【怎么实现Redis的高可用?】面试题。希望对大家有帮助; 怎么实现Redis的高可用? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 为了实现 Redis 的高可用性,我们需要保证在发…...

OpenCV实现Kuwahara滤波

Kuwahara滤波是一种非线性的平滑滤波技术,其基本原理在于通过计算图像模板中邻域内的均值和方差,选择图像灰度值较为均匀的区域的均值来替代模板中心像素的灰度值。以下是Kuwahara滤波的详细原理说明: 一、基本思想 Kuwahara滤波的基本思想…...

WINFORM - DevExpress -> DevExpress总结[安装、案例]

安装devexpress软件 路径尽量不换,后面破解不容易出问题 vs工具箱添加控件例如: ①使用控制台进入DevExpress安装目录: cd C:\Program Files (x86)\DevExpress 20.1\Components\Tools ②添加DevExpress控件: ToolboxCreator.exe/ini:toolboxcreator…...

Golang学习笔记_22——Reader示例

Golang学习笔记_19——Stringer Golang学习笔记_20——error Golang学习笔记_21——Reader 文章目录 io.Reader 示例从字符串中读取从文件中读取从HTTP响应中读取从内存的字节切片中读取自定义io.Reader实现 源码 io.Reader 示例 从字符串中读取 func ReadFromStrDemo() {str…...

【2024年华为OD机试】(A卷,100分)- 猜字谜(Java JS PythonC/C++)

一、问题描述 小王设计了一个简单的猜字谜游戏,游戏的谜面是一个错误的单词,比如 nesw,玩家需要猜出谜底库中正确的单词。猜中的要求如下: 对于某个谜面和谜底单词,满足下面任一条件都表示猜中: 变换顺序…...

iostat命令详解

iostat 命令是 I/O statistics(输入/输出统计)的缩写,用来报告系统的 CPU 统计信息和块设备及其分区的 IO 统计信息。iostat 是 sysstat 工具集的一个工具,在 Ubuntu 系统中默认是不带 iostat 命令的,需要自行安装: $ sudo apt in…...

Linux:操作系统简介

前言: 在本片文章,小编将带大家理解冯诺依曼体系以及简单理解操作喜欢,并且本篇文章将围绕什么以及为什么两个话题进行展开说明。 冯诺依曼体系: 是什么: 冯诺依曼体系(Von Neumann architecture&#xff…...

企业级信息系统开发讲课笔记4.12 Spring Boot默认缓存管理

文章目录 1. Spring Boot默认缓存管理2. Spring的缓存机制2.1 缓存机制概述2.2 缓存接口和缓存管理接口3. 声明式缓存注解3.1 @EnableCaching注解3.2 @Cacheable注解3.2.1 value/cacheNames属性3.2.2 key属性3.2.3 keyGenerator属性3.2.4 cacheManager/cacheResolver属性3.2.5 …...

2025制定一个高级java开发路线:分布式系统、多线程编程、高并发经验

1-熟悉分布式系统的设计和应用,熟悉分布式、缓存、消息、负载均衡等机制和实现者优先。 2-熟悉多线程编程,具备高并发经验优先。 技术学习规划:熟悉分布式系统和高并发技术 以下是针对目标要求的系统性学习规划,分为 阶段目标 和…...

20250110_ PyTorch中的张量操作

文章目录 前言1、torch.cat 函数2、索引、维度扩展和张量的广播3、切片操作3.1、 encoded_first_node3.2、probs 4、长难代码分析4.1、selected4.1.1、multinomial(1)工作原理: 总结 前言 1、torch.cat 函数 torch.cat 函数将两个张量拼接起来,具体地是…...

hadoop-yarn常用命令

一、YARN命令介绍 1. YARN命令简介 YARN提供了一组命令行工具,用于管理和监控YARN应用程序和集群。 2. yarn application命令 (1) yarn application命令的基本语法 yarn application命令的基本语法如下: yarn application [genericOptions] [comma…...

LabVIEW滤波器功能

程序通过LabVIEW生成一个带噪声的正弦波信号,并利用滤波器对其进行信号提取。具体来说,它生成一个正弦波信号,叠加高频噪声后形成带噪信号,再通过低通滤波器滤除噪声,提取原始正弦波信号。整个过程展示了信号生成、噪声…...

【Unity3D日常开发】Unity3D中打开Window文件对话框打开文件(PC版)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群:398291828小红书小破站 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 这篇文章继续讲如何使用Unity3D打开Window文…...

ros2笔记-6.2 使用urdf创建机器人模型

本节主要跟着小鱼老师的视频操作,不同的仿真平台有不同的建模语言,但是几乎都支持URDF。 本节使用URDF创建一个机器人模型。 6.2.1 帮机器人创建一个身体 URDF使用XML来描述机器人的结构和传感器、执行器等信息。 在chapt6/chap6_ws/src创建功能包:r…...

【centos】校时服务创建-频率修改

在 NTP 配置中,校时频率通常是由 NTP 协议自动管理的,NTP 会根据网络延迟和时间偏差动态调整校时频率。不过,您可以通过配置文件中的一些参数来影响 NTP 的行为。 如果想要更改 NTP 的校时频率,可以考虑以下几个方面:…...

J.U.C(1)

目录 JUC(一)一:AQS二:reentrantlock原理1:加锁:2:解锁3:可重入锁原理4:可打断原理5:公平锁原理6:条件变量 三:读写锁(ree…...

计算机网络之---静态路由与动态路由

静态路由 静态路由是由网络管理员手动配置并固定的路由方式。路由器通过静态配置的路由条目来转发数据包,而不会自动调整。它不依赖于任何路由协议。 特点: 手动配置:网络管理员需要手动在路由器中配置每条静态路由。不自动更新:…...

Kubernetes1.28 编译 kubeadm修改证书有效期到 100年.并更新k8s集群证书

文章目录 前言一、资源准备1. 下载对应源码2.安装编译工具3.安装并设置golang 二、修改证书有效期1.修改证书有效期2.修改 CA 证书有效期 三、编译kubeadm四、使用新kubeadm方式1.当部署新集群时,使用该kubeadm进行初始化2.替换现有集群kubeadm操作 前言 kubeadm 默认证书为一…...

C++----STL(string)

引言:STL简介 什么是STL STL(standard template libaray-标准模板库): 是 C标准库的重要组成部分(注意:STL只是C标准库里的一部分,cin和cout也是属于C标准库的),不仅是一个可复用的组件库&…...

适合地产人用的中介房源管理系统

在房产经纪行业,房源管理与客源管理是经纪人日常工作的核心,直接影响业务效率与成交转化。选择一套适配行业需求的中介房源管理系统,能帮助中介团队规范流程、降低运营成本、大幅提升业绩。今天我们以客观视角,详细解析全房源系统…...

SSE 基础知识

SSE 基础知识 一、概念定义 SSE 全称 Server-Sent Events,是基于HTTP协议的服务器单向数据推送技术。 建立一次长连接后,服务端可主动持续向前端推送数据,无需客户端反复轮询请求。 二、核心特点 单向通信:仅服务器 → 客户端发送…...

贵阳婚礼西服定制攻略:面料、工艺、版型避坑指南

婚礼西装是男士婚礼造型的核心,区别于日常商务正装,婚礼西服更看重版型精致度、面料质感、上身挺拔感以及镜头适配度。在贵阳备婚的新人,大多会放弃成品西装,选择专属定制服务。但本地婚礼西服定制市场参差不齐,很多新…...

Scroll Reverser:让Mac的多设备滚动体验回归直觉的免费神器

Scroll Reverser:让Mac的多设备滚动体验回归直觉的免费神器 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 你是否曾经在MacBook的触控板和鼠标之间切换时&#xff0…...

AI写的论文双率如何压到20%以下?这几款工具实测有效

毕业季、投稿季用AI写论文已经成为不少人的高效选择,但查重率飘红、AIGC疑似率超标两大问题,让很多人犯了难。2026年学术检测标准持续收紧,知网、维普及主流AIGC检测系统同步上线双检规则,两项指标均控制在20%以下才符合基本提交要…...

Web渗透测试能力成长地图:从工具使用到漏洞认知跃迁

1. 这不是工具清单,而是一张Web渗透测试的“能力成长地图”你刚点开这篇文章,大概率正站在两个路口之间:一边是网上铺天盖地的“十大免费扫描器推荐”,点进去全是截图下载链接一句“一键扫漏洞”,结果装完跑两下&#…...

Unity动态自然系统:Forest Environment-Dynamic Nature深度解析

1. 这不是“贴图堆砌”,而是自然系统级建模:Forest Environment-Dynamic Nature 的真实定位你有没有试过在Unity里拖进几棵树、铺点草、加个天空盒,然后发现场景像一张静止的风景明信片——风不动、叶不摇、雨不落、雾不散?我做过…...

从开题到定稿零焦虑:okbiye AI 论文写作,帮你把毕业季的 “大山” 变成坦途

okbiye-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPT毕业论文 - Okbiye智能写作https://www.okbiye.com/ai/bylw 毕业季的深夜,宿舍台灯下的屏幕亮着刺眼的光,文档里的字数停留在三位数,而 deadline 正一天天逼近。你是…...

Allegro PCB设计小技巧:如何让Route Keepout区域既能走线又能打过孔(附详细步骤图)

Allegro PCB设计实战:Route Keepout区域的灵活控制技巧 在高速PCB设计中,Route Keepout区域的管理常常让工程师陷入两难境地——元件封装自带的限制区域与实际布线需求产生冲突。特别是处理PCIE等高速信号时,这种矛盾尤为突出。传统做法要么完…...

机器学习驱动储氢材料发现:从特征工程到DFT/MD验证的完整指南

1. 项目概述与核心思路氢能被视为未来清洁能源体系的关键一环,但如何安全、高效、经济地储存氢气,一直是制约其大规模应用的瓶颈。在众多储氢技术路线中,固态储氢,特别是基于金属氢化物的储氢材料,因其高体积储氢密度和…...