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等热门算法全部包含,用户可一键进行下载。

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/505561.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据库系统概论】第5章 数据库完整性【!触发器】

目录 5.1数据库完整性概述 5.2 实体完整性 5.3 参照完整性 5.4 用户定义的完整性 属性上的约束 1. 列值非空(NOT NULL) 2. 列值唯一(UNIQUE) 3. 检查列值是否满足条件(CHECK) 元组上的约束 5.5 完…

rk3568 , buildroot , qt ,使用sqlite, 动态库, 静态库

问题说明: 客户反馈 ,buildroot 系统 ,使用qt 使用sqlite ,有报错,无法使用sqlite. 测试情况说明: 我自己测试,发现, buildroot 自己默认就是 使能了 sqlite 的。 是否解决说明&…

机器学习实战——决策树:从原理到应用的深度解析

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​ ​​​ ​​ 决策树(Decision Tree)是一种简单而直观的分类与回归模型,在机器学习中广泛应用。它的…

MySQL 如何赶上 PostgreSQL 的势头?

原文地址 我与 MySQL 社区的前辈交谈时,经常遇到这个问题:「为什么 MySQL 这么棒,而且(至少根据 DB-Engines 的计算)仍然比 PostgreSQL 更流行;但它的地位在下降,PostgreSQL 却势不可挡地越来越…

Linux 下信号的保存和处理

信号的几个状态 信号抵达: 当接收到的信号被处理时, 此时就成为信号的抵达信号的未决: 从信号的产生到信号抵达这个时间段之间, 称为信号未决信号阻塞: 当进程设置了某个信号为阻塞后, 这个进程就不会在接收到这个信号信号忽略: 将信号设置为忽略后, 接收到这个信号, 对这个信…

mybatisX插件的使用,以及打包成配置

装mybatisX插件; idea连接数据库; 点击mybatisx-generator,设置自己装mybatisX插件; idea连接数据库; 点击mybatisx-generator,设置自己要的包和类; 如果要把自己的配置设置成一个自定义模板&a…

AAAI2023《Controllable Image Captioning via Prompting》

摘要 文章提出了一种通过提示学习(prompt learning)嵌入到图像描述生成框架中的方法,以实现对图像描述的可控生成。具体来说,设计了一组提示来微调预训练的图像描述生成器,这些提示使模型能够吸收来自不同领域的风格化…

AR 眼镜之-拍照/录像动效切换-实现方案

目录 📂 前言 AR 眼镜系统版本 拍照/录像动效切换 1. 🔱 技术方案 1.1 技术方案概述 1.2 实现方案 1)第一阶段动效 2)第二阶段动效 2. 💠 默认代码配置 2.1 XML 初始布局 2.2 监听滑动对 View 改变 3. ⚛️…

kubeneters-循序渐进Cilium网络(二)

文章目录 概要IP 地址配置接口配置解析结论 概要 接续前一章节,我们还是以这张图继续深入Cilium网络世界 IP 地址配置 通过检查 Kubernetes 集群的当前环境,可以获取实际的 IP 地址和配置信息。这些信息将被补充到之前的网络示意图中,以使…

宝塔安装mongodb后,写脚本监控运行状态,关闭后自动重启

最近项目用上了mongodb,但是每天晚上 mongodb都回自动关闭,没办法 只能写个监视服务的脚本 在关闭的话就直接重启,创建个计划任务,每三分钟执行一次 # 检查mongo是否还在进程中 countps aux|grep mongo| grep -v grep |wc -l echo…

备忘录记事工具 四款好用的电脑备忘录记事本分享

在信息爆炸的时代,选择一个合适的备忘录记事工具显得尤为重要。无论是记录工作上的重要事项、学习笔记还是生活中的点滴灵感,一个好的备忘录应用都能成为您得力的小助手。今天,我将为大家深入评测四款各具特色的电脑备忘录记事本软件。 印象…

深入理解 C 语言中浮点型数据在内存中的存储

文章目录 一、浮点型数据存储格式(IEEE 754 标准)二、举例说明单精度浮点数存储过程三、绘图说明四、双精度浮点数存储示例(以1.5为例) 在 C 语言的世界里,数据类型丰富多样,而浮点型数据用于表示实数&…

sql server cdc漏扫数据

SQL Server的CDC指的是“变更数据捕获”(Change Data Capture)。这是SQL Server数据库提供的一项功能,能够跟踪并记录对数据库表中数据所做的更改。这些更改包括插入、更新和删除操作。CDC可以捕获这些变更的详细信息,并使这些信息…

vue3如何使用bus(事件总线)

🚀 个人简介:某大型国企资深软件开发工程师,信息系统项目管理师、CSDN优质创作者、阿里云专家博主,华为云云享专家,分享前端后端相关技术与工作常见问题~ 💟 作 者:码喽的自我修养&#x1f9…

Spring IoC DI 入门 和 使用

Spring IoC & DI入门 和 使用 1. IoC & DI入门1.1 Spring 是什么?1.1.1 什么是容器?1.1.2 什么是IoC? 1.2 IoC介绍1.2.1 传统程序开发1.2.2 问题分析1.2.3 解决方案1.2.4 IoC程序开发1.2.5 IoC优势 1.3 DI介绍 2. IoC 和 DI使用 1. IoC & DI入门 1.1 Spring 是…

计算机网络(三)——局域网和广域网

一、局域网 特点:覆盖较小的地理范围;具有较低的时延和误码率;使用双绞线、同轴电缆、光纤传输,传输效率高;局域网内各节点之间采用以帧为单位的数据传输;支持单播、广播和多播(单播指点对点通信…

mapbox基础,style样式汇总,持续更新

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言二、🍀根属性2.1 so…

551 灌溉

常规解法&#xff1a; #include<bits/stdc.h> using namespace std; int n,m,k,t; const int N105; bool a[N][N],b[N][N]; int cnt; //设置滚动数组来存贮当前和下一状态的条件 //处理传播扩散问题非常有效int main() {cin>>n>>m>>t;for(int i1;i&l…

jenkins入门10--自动化构建

build periodically&#xff1a;设定类似cron周期性时间触发构建 * * * * * (五颗星&#xff0c;中间用空格隔开&#xff09; 第一颗表示分钟&#xff0c;取值0~59 第二颗表示小时&#xff0c;取值0~23 第三颗表示一个月的第几天&#xff0c;取值1~31 第四颗表示第几月&#xf…

[0405].第05节:搭建Redis主从架构

Redis学习大纲 一、3主3从的集群配置&#xff1a; 1.1.集群规划 1.分片集群需要的节点数量较多&#xff0c;这里我们搭建一个最小的分片集群&#xff0c;包含3个master节点&#xff0c;每个master包含一个slave节点&#xff0c;结构如下&#xff1a; 2.每组是一主一从&#x…