使用MMDetection进行目标检测、实例和全景分割
MMDetection 是一个基于 PyTorch 的目标检测开源工具箱,它是 OpenMMLab 项目的一部分。包含以下主要特性:
- 支持三个任务
- 目标检测(Object Detection)是指分类并定位图片中物体的任务
- 实例分割(Instance Segmentation)是指分类,分割图片物体的任务
- 全景分割(Panoptic Segmentation)是统一了语义分割(对图像的每个像素进行分类)和实例分割(检测出对象实例并进行分割)的检测任务
- 模块化设计以灵活支持 6 个数据集,57 种不同算法和丰富的数据增强,提供 450+ 个预训练模型
- 支持数十个算法模型的部署
安装(目标检测)
使用下面的命令快速生成虚拟环境:
$ python -m venv venv
# Windows 下进入虚拟环境
$ venv/Scripts/activate
提前看下 MMDetection 和 MMCV 版本兼容性 里 PyTorch + MMDetection + MMCV 的匹配版本号,比如我当下看到的版本要求是:
- PyTorch: 1.3+
- MMDetection: 2.28.1
- MMCV: >=1.3.17, <1.8.0
MMDetection 是基于 PyTorch 的检测框架,首先安装 torch 库:
$ pip install torch
$ pip install opencv-python
$ pip install torchvision
MMDetection 包括 MMDetection 和 MMCV,两者是一体的,需要安装 MMCV,按 安装 MMCV - 使用 mim 安装 的说明使用 mim(OpenMMLab项目的包管理工具)安装:
$ pip install openmim
$ mim install mmcv-full==1.7.1
然后再安装 MMDetection,(重要的事说两遍)提前看下 MMDetection 和 MMCV 版本兼容性 里 PyTorch + MMDetection + MMCV 的匹配版本号,选择合适的版本安装,建议直接用 mim 快速安装:
$ mim install mmdet==2.28.1
在 Windows 系统下,如果安装过程中遇到下面的异常:
$ error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
$ [end of output]
$
$ note: This error originates from a subprocess, and is likely not a problem with pip.
$ ERROR: Failed building wheel for pycocotools
$ Failed to build pycocotools
$ ERROR: Could not build wheels for pycocotools, which is required to install pyproject.toml-based projects
可以按照 《Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools"的解决办法》 提供的方法解决。
安装完成后,执行下面的 Python 代码(demo.py)验证是否正确安装了 MMDetection 和所需的环境:
import mmcv
from mmdet.apis import init_detector, inference_detector# 一、指定模型的配置文件和 checkpoint 文件路径
# 下载 https://github.com/open-mmlab/mmdetection 项目并解压
# 把 mmdetection-master/configs/_base_ 文件夹复制到当前项目 configs/ 目录下
# 把 mmdetection-master/configs/faster_rcnn 文件夹复制到当前项目 configs/ 目录下
config_file = 'configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py'
# 从 model zoo 下载 checkpoint 并放在 `checkpoints/faster_rcnn/` 文件下
# 网址为: http://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth
checkpoint_file = 'checkpoints/faster_rcnn/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'# 二、根据配置文件和 checkpoint 文件构建模型
# 有 GPU 时使用 device = 'cuda:0'
device = 'cpu'
# 初始化检测器
model = init_detector(config_file, checkpoint_file, device=device)# 三、测试单张图片并展示结果
# 图像地址: https://github.com/open-mmlab/mmdetection/blob/master/demo/demo.jpg
img = mmcv.imread('demo/demo.jpg')
# 推理演示图像, 结果是一个 `numpy.ndarray` 列表
result = inference_detector(model, img)
# 将结果可视化
model.show_result(img, result)
# 将可视化结果保存为图片
model.show_result(img, result, out_file='demo/demo_result.jpg')
这个时候的项目目录结构如下:

如果成功安装 MMDetection,则上面的代码可以完整地运行,并顺利生成下面的 demo/demo_result.jpg 文件:

实例分割
实例分割(Instance Segmentation)是指分类,分割图片物体的任务。打开 MMDetection - 模型库/MMDetection 并选择 Instance Segmentation 任务类型:

挑选一个 AP(平均精确度)值 较高,而且年份比较新的算法,比如当下看到的算法名是 SCNet(算法 RF-Next 需要 GPU 才能跑起来),就在前面下载好的 mmdetection-master/configs/ 目录下找到对应的 scnet 文件夹及其依赖的 htc 文件夹,并将它们复制到当前项目 configs/ 目录下。点击 算法名 进入算法详情页面:

同样的,挑选一个 AP(平均精确度)值 较高的模型,这里先复制 模型名称 的文本,然后在 configs/scnet/metafile.yml 文件中搜索这个文本:

搜索完成可以获得两个配置及参数:
- Config: 模型的配置文件路径(
config_file = 'xxx.py') - Weights: 模型的下载网址,通过这个地址下载模型文件(
checkpoint_file = 'xxx.pth')
完成上面的准备工作后,执行下面的 Python 代码(demo.py)验证是否可以对图像进行分类、分割物体目标的任务:
import mmcv
from mmdet.apis import init_detector, inference_detectorprint('指定模型的配置文件和checkpoint文件路径')
config_file = 'configs/scnet/scnet_r50_fpn_1x_coco.py'
checkpoint_file = 'checkpoints/scnet/scnet_r50_fpn_1x_coco-c3f09857.pth'
print('根据配置文件和checkpoint文件构建模型')
device = 'cpu'
model = init_detector(config_file, checkpoint_file, device=device)
print('测试单张图片并展示结果')
img = mmcv.imread('demo/demo.jpg')
result = inference_detector(model, img)
model.show_result(img, result)
model.show_result(img, result, out_file='demo/demo_result.jpg')
这个时候的项目目录结构如下:

如果上面代码中 MMDetection 的实例分割任务可以完整地运行,就会顺利生成下面的 demo/demo_result.jpg 文件:

全景分割
全景分割(Panoptic Segmentation)是统一了语义分割(对图像的每个像素进行分类)和实例分割(检测出对象实例并进行分割)的检测任务。同前面一样,打开 MMDetection - 模型库/MMDetection 并选择 Panoptic Segmentation 任务类型:

这里的算法目前就只有一个,只能选择 PanopticFPN 算法,还是在前面下载好的 mmdetection-master/configs/ 目录下找到对应的 panoptic_fpn 文件夹,并将其复制到当前项目 configs/ 目录下。点击 算法名 进入算法详情页面:

再从中选一个模型,复制 模型名称 的文本,到 configs/panoptic_fpn/metafile.yml 文件中搜索:

搜索完成可以获得 Config(config_file = 'xxx.py')和 Weights 下载后文件路径(checkpoint_file = 'xxx.pth')配置参数。然后执行下面的 Python 代码(demo.py)验证是否可以对图像进行对每个像素进行分类同时检测出对象实例并进行分割的任务:
import mmcv
from mmdet.apis import init_detector, inference_detector# 上面代码没有变,就下面两个变量的值改一下
config_file = 'configs/panoptic_fpn/panoptic_fpn_r50_fpn_1x_coco.py'
checkpoint_file = 'checkpoints/panoptic_fpn/panoptic_fpn_r50_fpn_1x_coco_20210821_101153-9668fd13.pth'
# 下面代码也没有变
device = 'cpu'
model = init_detector(config_file, checkpoint_file, device=device)
img = mmcv.imread('demo/demo.jpg')
result = inference_detector(model, img)
model.show_result(img, result)
model.show_result(img, result, out_file='demo/demo_result.jpg')
这时项目的目录结构如下:

如果上面代码里的全景分割任务可以顺利运行,就会生成下面的 demo/demo_result.jpg 文件:

实践完成到这里,就会发现,其实调用代码是一样的,就是改一下配置文件和模型文件,就可以实现不同的功能!
相关文章:
使用MMDetection进行目标检测、实例和全景分割
MMDetection 是一个基于 PyTorch 的目标检测开源工具箱,它是 OpenMMLab 项目的一部分。包含以下主要特性: 支持三个任务 目标检测(Object Detection)是指分类并定位图片中物体的任务实例分割(Instance Segmentation&a…...
使用ThreadLocal实现当前登录信息的存取
有志者,事竟成 文章持续更新,可以关注【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。 文章目录一、使用…...
高通平台开发系列讲解(Android篇)AudioTrack音频流数据传输
文章目录 一、音频流数据传输通道创建1.1、流程描述1.2、流程图解二、音频数据传输2.1、流程描述2.2、流程图解沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要图解AudioTrack音频流数据传输 。 一、音频流数据传输通道创建 1.1、流程描述 AudioTrack在set函…...
BUUCTF-firmware1
题目下载:下载 新题型,记录一下 题目给出了flag形式,md5{网址:端口},下载发现是一个.bin文件 二进制文件,其用途依系统或应用而定。一种文件格式binary的缩写。一个后缀名为".bin"的文件&#x…...
【C++之容器篇】二叉搜索树的理论与使用
目录前言一、二叉搜索树的概念二、二叉搜素树的模拟实现(增删查非递归实现)1. 二叉搜素树的结点2. 二叉搜索树的实现(1). 二叉搜索树的基本结构(2)构造函数(3)查找函数(4…...
爬虫神级解析工具之XPath:用法详解及实战
一、XPATH是什么 Xpath最初被设计用来搜寻XML文档,但它同样适用于HTML文档的搜索。通过简洁明了的路径选择表达式,它提供了强大的选择功能;同时得益于其内置的丰富的函数,它可以匹配和处理字符串、数值、时间等数据格式,几乎所有节点我们都可以通过Xpath来定位。 在Pyth…...
Markdown编辑器
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…...
数据结构<堆>
🎇🎇🎇作者: 小鱼不会骑车 🎆🎆🎆专栏: 《数据结构》 🎓🎓🎓个人简介: 一名专科大一在读的小比特,努力学习编程是我唯一…...
Linux下Socket编程利用多进程实现一台服务器与多台客户端并发通信
文章目录前言一、服务器 server二、客户端 client三、并发通信演示四、程序源码前言 前些日子同“ Linux应用编程 ”专栏中发布过的TCP及UDP在Linux或Windows下的通信都为单进程下的Socket编程,若还存在一些套接字相关函数模糊不清,读者可移步“Socket编…...
【MySQL】数据库基础
目录 1、什么是数据库 2、 数据库基本操作 2.1 查看当前数据库 2.2 创建一个数据库 2.3 选中数据库 2.4 删除数据库 3、常见的数据类型 3.1 数值类型 3.2 字符串类型 3.3 日期类型 4、表的操作 4.1 创建表 4.2 查看指定数据库下的所有表 4.3 查看表的结构 4.…...
Microsoft Office 2021 / 2019 Direct Download Links
前言 微软Office在很长一段时间内都是最常用和最受欢迎的软件。从小型创业公司到大公司,它的使用比例相当。它可以很容易地从微软的官方网站下载。但是,微软只提供安装程序,而不提供完整的软件供下载。这些安装文件通常比较小。下载并运行后,安装的文件将从后端服务器安装M…...
XX 系统oracle RAC+ADG 数据库高可用容灾演练记录
停止备库监听,避免强制关机时切换到备库 su - grid lsnrctl stop 主库高可用重启测试 /u01/app/19c/grid/bin/crsctl stop crs sync;sync;reboot --/u01/app/19c/grid/bin/crsctl start crs 机器重启后自动起的 /u01/app/19c/grid/bin/crsctl stat res -t 主库容…...
JSP与Servlet
一、什么是JSP? JSP(java Service Pages)是由Sun Microsystems公司倡导、许多公司参与一起建立的动态技术标准。 在传统的HTML文件(*.htm 、 *.html)中加入Java程序片段(Scriptlet)和JSP标签,构成了JSP网页。 1.1 JSP页面的运行原理 客户…...
C++之迭代器
迭代器C中,迭代器就是类似于指针的对象,但比指针的功能更丰富,它提供了对对象的间接访问,每个迭代器对象代表容器中一个确定的地址。举个例子:void test() {vector<int> vv{1,2,3,4,5};for(vector<int>::i…...
2023-02-16:干活小计
数学公式表示学习: 大约耗时:2 hours 在做了一些工作后重读论文:MathBERT: A Pre-Trained Model for Mathematical Formula Understanding 这是本篇论文最重要的idea:Current pre-trained models neglect the structural featu…...
Linux上安装LaTeX
Linux上安装LaTeX1. 安装1.1 下载安装texlive1.2 配置中文1.3 安装XeLatex1.4 安装编辑器1.5 设置默认支持中文编译1.6 配置环境路径2. latex配置2.1 latex自动安装宏包2.2 latex手动安装宏包2.2.1. 查找包2.2.2. 生成.sty文件2.2.3. 复制到配置文件夹3. 更新包3. 卸载参考链接…...
webpack -- 无法将“webpack”项识别为 cmdlet
webpack : 无法将“webpack”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。 1.检测是否是版本太高而只能使用脚手架进行打包 webpack4.x的打包已经不能用webpack 文件a …...
对齐与非对齐访问
对齐与非对齐访问 什么是非对齐访问 在机器指令层面,当尝试从不能被 N 整除 (addr % N ! 0) 的起始地址读取 N 字节的数据时即发生了非对齐内存访问。举例而言,从地址 0x10004 读取 4 字节是可以的,然而从地址 0x10005 读取 4 字节数据将会…...
基于感知动作循环的层次推理用于视觉问答
title:Hierarchical Reasoning Based on Perception Action Cycle for Visual Question Answering 基于感知动作循环的层次推理用于视觉问答 文章目录title:[Hierarchical Reasoning Based on Perception Action Cycle for Visual Question Answering](…...
python中的.nc文件处理 | 05 NetCDF数据的进一步分析
NetCDF数据的进一步分析 比较不同数据集、不同季节的气候数据 import os import numpy as np import pandas as pd import matplotlib.pyplot as plt import cartopy.crs as ccrs import cartopy.feature as cfeature import seaborn as sns import geopandas as gpd import…...
基于Tauri与Bun的本地多智能体AI助手YouClaw:架构、配置与实战
1. 项目概述:一个桌面端的多智能体AI助手运行时 最近在折腾AI智能体(Agent)的本地化部署和集成,发现了一个挺有意思的开源项目——YouClaw。简单来说,它是一个基于Tauri 2构建的桌面应用,核心是一个支持多…...
从nano-SIM标准之争看硬件设计:兼容性、防呆与产业博弈
1. 项目概述:一场关于“小卡片”的巨头战争 在消费电子行业,我们常常把目光聚焦在芯片制程、屏幕刷新率或者摄像头传感器尺寸这些“大件”上。但作为一名浸淫硬件设计多年的工程师,我深知,真正决定用户体验和产品成败的࿰…...
AutoDock-Vina终极指南:快速掌握分子对接的完整教程
AutoDock-Vina终极指南:快速掌握分子对接的完整教程 【免费下载链接】AutoDock-Vina AutoDock Vina 项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina AutoDock-Vina是一款开源的分子对接工具,专门用于模拟小分子(配体&…...
Google Meet开启Gemini字幕后CPU飙升300%?资深SRE教你用Chrome Tracing+Gemini Profiling Dashboard精准定位瓶颈
更多请点击: https://intelliparadigm.com 第一章:Google Meet开启Gemini字幕后CPU飙升300%?资深SRE教你用Chrome TracingGemini Profiling Dashboard精准定位瓶颈 当团队在Google Meet中启用Gemini实时字幕功能后,参会终端Chrom…...
EurekaClaw:多智能体AI研究助手,自动化实现从灵感到论文的完整流程
1. 项目概述:从灵感到论文的自动化研究助手在科研工作中,最令人兴奋又最耗费精力的,莫过于从零散的文献、模糊的直觉中,一步步构建出严谨的、可发表的成果。这个过程通常需要经历文献调研、假设生成、理论证明、实验验证和论文撰写…...
String、StringBuilder、StringBuffer 学习与深入
1 学习的知识是什么 String:字符串,一旦创建里面的内容就不可变,每次使用拼接都创建一个新的对象而原有的对象依旧存在。 StringBuilder:可变字符串线程不安全,…...
三步解决Zotero中文文献管理难题:茉莉花插件完整指南
三步解决Zotero中文文献管理难题:茉莉花插件完整指南 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 你是否在使用Zot…...
别再只会用Matplotlib画基础热力图了!这5个高级定制技巧让你的图表更专业
别再只会用Matplotlib画基础热力图了!这5个高级定制技巧让你的图表更专业 热力图是数据可视化中最直观的展示方式之一,但大多数数据分析师止步于基础用法。当你的图表需要出现在学术论文、商业报告或投资人演示中时,默认参数生成的热力图往往…...
从PC到移动:DRAM市场如何从周期性震荡走向结构性稳定
1. DRAM市场格局的深层演变:从周期性震荡到结构性稳定干了十几年硬件设计和供应链的活儿,我算是亲眼见证了DRAM这个行当的“过山车”行情。早些年,跟同行聊起内存,大家第一反应都是“又涨了?”或者“崩盘了?…...
【信息科学与工程学】【安全领域】第二十七篇 几何学在网络安全的应用(1)
网络安全中的几何学应用全景 一、几何学与网络安全的核心联系框架 1.1 几何思维在网络安全的映射 几何概念 网络安全映射 安全价值 应用本质 空间与距离 特征空间、异常距离 相似性度量、异常检测 量化“正常”与“异常”的距离 拓扑结构 网络连接图、攻击路径 …...
