mmdetection基于 PyTorch 的目标检测开源工具箱 入门教程

安装环境

MMDetection 支持在 Linux,Windows 和 macOS 上运行。它需要 Python 3.7 以上,CUDA 9.2 以上和 PyTorch 1.8 及其以上。

1、安装依赖

步骤 0. 从官方网站下载并安装 Miniconda。

步骤 1. 创建并激活一个 conda 环境。

conda create --name openmmlab python=3.8 -y
conda activate openmmlab

步骤 2. 基于 PyTorch 官方说明安装 PyTorch。

在 GPU 平台上:

conda install pytorch torchvision -c pytorch
在 CPU 平台上:
conda install pytorch torchvision cpuonly -c pytorch

步骤 3. 使用 MIM 安装 MMEngine 和 MMCV。

pip install -U openmim
mim install mmengine
mim install "mmcv>=2.0.0"

注意: 在 MMCV-v2.x 中,mmcv-full 改名为 mmcv,如果你想安装不包含 CUDA 算子精简版,可以通过 mim install "mmcv-lite>=2.0.0rc1" 来安装。

步骤 4. 安装 MMDetection。

方案 a:如果你开发并直接运行 mmdet,从源码安装它:

git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
pip install -v -e .
# "-v" 指详细说明,或更多的输出
# "-e" 表示在可编辑模式下安装项目,因此对代码所做的任何本地修改都会生效,从而无需重新安装。

方案 b:如果你将 mmdet 作为依赖或第三方 Python 包,使用 MIM 安装:

mim install mmdet

2、验证安装

为了验证 MMDetection 是否安装正确,我们提供了一些示例代码来执行模型推理。

步骤 1. 我们需要下载配置文件和模型权重文件。

mim download mmdet --config rtmdet_tiny_8xb32-300e_coco --dest .

下载将需要几秒钟或更长时间,这取决于你的网络环境。完成后,你会在当前文件夹中发现两个文件 rtmdet_tiny_8xb32-300e_coco.py 和 rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth

 步骤 2. 推理验证。

方案 a:如果你通过源码安装的 MMDetection,那么直接运行以下命令进行验证:

python demo/image_demo.py demo/demo.jpg rtmdet_tiny_8xb32-300e_coco.py --weights rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth --device cpu
cuda:
python demo/image_demo.py demo/demo2(1).jpg rtmdet_tiny_8xb32-300e_coco.py --weights rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth --device cuda

python demo/image_demo.py demo/demo.jpg rtmdet_tiny_8xb32-300e_coco.py --weights rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth --device cpu

 

 

 

你会在当前文件夹中的 outputs/vis 文件夹中看到一个新的图像 demo.jpg,图像中包含有网络预测的检测框。

方案 b:如果你通过 MIM 安装的 MMDetection,那么可以打开你的 Python 解析器,复制并粘贴以下代码:

from mmdet.apis import init_detector, inference_detector

config_file = 'rtmdet_tiny_8xb32-300e_coco.py'
checkpoint_file = 'rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth'
model = init_detector(config_file, checkpoint_file, device='cpu')  # or device='cuda:0'
inference_detector(model, 'demo/demo.jpg')

你将会看到一个包含 DetDataSample 的列表,预测结果在 pred_instance 里,包含有检测框,类别和得分。

目标检测+覆盖

mim download mmdet --config mask-rcnn_r101_fpn_2x_coco --dest models

python demo/image_demo.py demo/demo.jpg configs\mask_rcnn\mask-rcnn_r101_fpn_2x_coco.py  --weights models/mask_rcnn_r101_fpn_2x_coco_bbox.pth --device cuda

3.mmdetection算法速览

albu_example - 示例使用Albumentations数据增强库
atss - Anchor-free一阶段目标检测模型
autoassign - 自动分配样本到计算资源的示例
boxinst - BoxInst目标实例分割模型
bytetrack - 基于ByteTrack的多目标跟踪
carafe - CARAFE通道注意力模块
cascade_rcnn - Cascade R-CNN级联RCNN目标检测模型
cascade_rpn - CascadeRPN用于Faster R-CNN的级联RPN
centernet - CenterNet中心点检测模型
centripetalnet - CentripetalNet边缘眼动检测模型
cityscapes - Cityscapes城市场景数据集
common - 通用配置和脚本
condinst - 基于条件CondiInst目标实例分割
conditional_detr - 基于DETR的条件目标检测
convnext - ConvNeXt图像分类模型
cornernet - CornerNet角点检测模型
crowddet - 群众密集场景检测模型CrowdDet
dab_detr - DAB-DETR对抗学习增强的DETR
dcn - 可变形卷积网络
dcnv2 - 可变形卷积网络v2
ddod - DDOD端到端目标检测
deepfashion - DeepFashion人体解析数据集
deepsort - DeepSORT深度学习多目标跟踪
deformable_detr - 基于可变形卷积的DETR
detectors - 通用目标检测器配置
detr - DETR (DEformable DEtection TRansformer)
dino - DINO自监督预训练模型
double_heads - Double-Heads双头目标检测
dsdl - DSdL场景文本检测
dyhead - DyHead动态头注意力
dynamic_rcnn - Dynamic R-CNN动态RCNN
efficientnet - EfficientNet图像分类网络
empirical_attention - Empirical Attention注意力机制
faster_rcnn - Faster R-CNN两阶段目标检测模型
fast_rcnn - Fast R-CNN较早的两阶段目标检测模型
fcos - FCOS全景分割目标检测
foveabox - FoveaBox凝视预测模块
fpg - Feature Pyramid Grids
free_anchor - FreeAnchor自由锚框检测
fsaf - Feature Selective Anchor-Free模块
gcnet - GCNet场景图卷积网络
gfl - Generalized Focal Loss
ghm - Gradient Harmonizing Mechanism
glip - Global Local Image Pyramid
gn - Group Normalization
gn+ws - Group Normalization + Weight Standardization
grid_rcnn - Grid R-CNN网格RCNN
groie - Gradient-weighted R-CNN Object IoU Estimation
guided_anchoring - Guided Anchoring定向锚框
hrnet - High-Resolution Network高分辨率网络
htc - Hybrid Task Cascade模块
instaboost - Instance Boostraping样本选择算法
lad - Lightweight ADetector轻量级检测器
ld - Localization Distillation知识蒸馏模块
legacy_1.x - 早期MMDetection 1.x版本配置
libra_rcnn - Libra R-CNN均衡RCNN
lvis - LVIS大词汇数据集
mask2former - Mask2Former 基于transformer的实例分割
maskformer - MaskFormer transformer based实例分割
masktrack_rcnn - MaskTrack R-CNN视频实例分割跟踪
mask_rcnn - Mask R-CNN实例分割模型
misc - 其他独立模块
ms_rcnn - Multi-Scale RCNN多尺度RCNN
nas_fcos - NAS-FCOS神经结构搜索FCOS
nas_fpn - NAS-FPN神经结构搜索特征金字塔
objects365 - Objects365数据集
ocsort - 一种基于检测的跟踪方法
openimages - OpenImages数据集
paa - Pooling-based Anchor Assignment
pafpn - Path Aggregation Network
panoptic_fpn - Panoptic FPN全景分割FPN
pascal_voc - PASCAL VOC数据集
pisa - Prime Sample Attention采样注意力
point_rend - PointRend点分割
pvt - Pyramid Vision Transformer金字塔视觉transformer
qdtrack - Quality Aware Network for Multiple Object Tracking
queryinst - QueryInst基于query的实例分割
regnet - RegNet网络结构
reid - 人员重识别模型
reppoints - RepPoints角点检测
res2net - Res2Net网络结构
resnest - ResNeSt网络结构
retinanet - RetinaNet单阶段目标检测模型
rpn - Region Proposal Network
rtmdet - Real-time Multi-scale Detector实时多尺度检测器
sabl - Side-Aware Boundary Localization
scnet - SCNet场景解析模型
scratch - 从零开始训练配置
seesaw_loss - Seesaw Loss
selfsup_pretrain - 自监督预训练模型
simple_copy_paste - Simple Copy-Paste数据增强方法
soft_teacher - Soft Teacher Semi-Supervised Object Detection
solo - Segmenting Objects by Locations单阶段实例分割
solov2 - SOLOv2
sort - SORT简单联合检测和跟踪算法
sparse_rcnn - Sparse R-CNN稀疏RCNN
ssd - SSD单阶段目标检测模型
strongsort - StrongSORT强化的SORT算法
strong_baselines - 一些强基准模型配置
swin - Swin Transformer
timm_example - 使用timm库的示例
tood - TOOD场景文本检测器
tridentnet - TridentNet三叉网络
vfnet - VarifocalNet变焦点网络
wider_face - WIDER FACE人脸数据集
yolact - YOLACT实时实例分割
yolo - YOLO系列目标检测模型
yolof - YOLOF快速Yolo模型
yolox - YOLOX优化的Yolo模型
base - 基础模块和脚本

目标检测

图片目标检测

视频检测

命令行

mim download mmdet --config faster-rcnn_r101_fpn_2x_coco --dest models
python demo/webcam_demo.py configs/faster_rcnn/faster_rcnn_r101_fpn_2x_coco.py models/faster_rcnn_r101_fpn_2x_coco_bbox.pth --file 漫步在闵行莘庄老街道.mp4

import argparse
import os
import cv2 as cv
import torch
import argparse
import numpy as np

from mmdet.apis import inference_detector, init_detector

file_path = __file__
dir_path = os.path.dirname(file_path)
output_video_path = os.path.join(dir_path, 'result.mp4')


def main():
    args = {"file": "Nan", "checkpoint": "Nan", "config": "Nan",
            "out": "Nan", "device": "Nan", "camera_id": "Nan", "score_thr": "Nan", }
    args = argparse.Namespace(**args)
    # 自定义输入    args.device = "cuda:0"
    args.file = '/home/sha/PycharmProjects/mmdetection/workdir_hurricane/videos_test/video5.MP4'
    args.checkpoint = '/home/sha/PycharmProjects/mmdetection/workdir_hurricane/traffic_dataset_fasterRCNN/latest.pth'
    args.config = '/home/sha/PycharmProjects/mmdetection/workdir_hurricane/faster_rcnn_r101_fpn_2x_coco.py'
    args.out = 'workdir_hurricane/result.mp4'
    args.device = 'cuda:0'
    args.camera_id = 0
    args.score_thr = 0.5

    print("*" * 50)
    print(args)
    print("*" * 50)

    if not args.file:
        print('No target file!')
        exit(0)

    device = torch.device(args.device)

    print('device:', args.device)

    model = init_detector(args.config, args.checkpoint, device=device)

    camera = cv.VideoCapture(args.file)

    camera_width = int(camera.get(cv.CAP_PROP_FRAME_WIDTH))
    camera_hight = int(camera.get(cv.CAP_PROP_FRAME_HEIGHT))

    print(camera_hight, camera_width)
    fps = camera.get(cv.CAP_PROP_FPS)

    video_writer = cv.VideoWriter(args.out, cv.VideoWriter_fourcc(*'mp4v'),
                                  fps, (camera_width, camera_hight))

    count = 0

    print('Press "Esc", "q" or "Q" to exit.')
    while True:
        torch.cuda.empty_cache()
        ret_val, img = camera.read()
        if ret_val:
            if count < 0:
                count += 1
                print("Write {} in result Successfuly!".format(count))
                continue
            result = inference_detector(model, img)
            print("*" * 50)
            print(result)
            print("*" * 50)
            result_int = result[1][0:3]
            result_int = result_int.astype(int)        
            left_top = (result_int[0][0], result_int[0][1])
            right_bottom = (result_int[0][2], result_int[0][3])
            
            cv.rectangle(img, left_top, right_bottom, (0, 0, 255), 2)
            cv.imshow("img", img)
            # cv.resizeWindow("img",300,300)
            cv.waitKey(0)
            cv.destroyWindow("img")

            ch = cv.waitKey(1)
            if ch == 27 or ch == ord('q') or ch == ord('Q'):
                break

            frame = model.show_result(img, result, score_thr=args.score_thr, wait_time=1, show=False)
            cv.imshow('frame', frame)
            if len(frame) >= 1:
                video_writer.write(frame)
                count += 1
                print("Write {} in result Successfuly!".format(count))

        else:
            print('Load fail!')
            break
    camera.release()
    video_writer.release()
    cv.destroyWindow()


if __name__ == '__main__':
    main()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

windows中安装sqlite

1. 下载文件 官网下载地址&#xff1a;https://www.sqlite.org/download.html 下载sqlite-dll-win64-x64-3430000.zip和sqlite-tools-win32-x86-3430000.zip文件&#xff08;32位系统下载sqlite-dll-win32-x86-3430000.zip&#xff09;。 2. 安装过程 解压文件 解压上一步…

Hystrix: Dashboard流监控

接上两张服务熔断 开始搭建Dashboard流监控 pom依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocat…

“R语言+遥感“水环境综合评价方法

详情点击链接&#xff1a;"R语言遥感"水环境综合评价方法 一&#xff1a;R语言 1.1 R语言特点&#xff08;R语言&#xff09; 1.2 安装R&#xff08;R语言&#xff09; 1.3 安装RStudio&#xff08;R语言&#xff09; &#xff08;1&#xff09;下载地址 &…

ChatGPT在高等教育中的应用利弊探讨

​人工智能在教育领域的应用日益广泛。2022年11月OpenAI开发的聊天机器人ChatGPT在全球范围内流传开来&#xff0c;其中用户数量最多的国家是美国(15.22%)。由于ChatGPT应用广泛&#xff0c;具有类似人类回答问题的能力&#xff0c;它正在成为许多学生和教育工作者的可信赖伙伴…

Unity——DOTween插件使用方法简介

缓动动画既是一种编程技术&#xff0c;也是一种动画的设计思路。从设计角度来看&#xff0c;可以有以下描述 事先设计很多基本的动画样式&#xff0c;如移动、缩放、旋转、变色和弹跳等。但这些动画都以抽象方式表示&#xff0c;一般封装为程序函数动画的参数可以在使用时指定&…

【80天学习完《深入理解计算机系统》】第十一天 3.4 跳转指令

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

【FreeRTOS】【应用篇】任务管理相关函数

文章目录 前言一、函数解析1. 任务挂起 vTaskSuspend()① 使用场景② 设计思路③ 代码 2. 任务恢复 vTaskResume()① 作用② 设计思路③ 代码 3. 挂起任务调度器 vTaskSuspendAll()① 作用② 代码 4. 恢复任务调度器 xTaskResumeAll()① 设计思路② 代码 5. 任务删除函数 vTask…

人脸识别平台批量导入绑定设备的一种方法

因为原先平台绑定设备是通过一个界面进行人工选择绑定或一个人一个人绑定设备。如下&#xff1a; 但有时候需要在几千个里选择出几百个&#xff0c;那这种方式就不大现实了&#xff0c;需要另外一种方法。 目前相到可以通过导入批量数据进行绑定的方式。 一、前端 主要是显示…

Linux操作系统--克隆虚拟机

1.概述 我们在搭建大数据或者是集群的过程中,需要使用到许多配置相同或者相类似的环境。这一个时候就需要使用到克隆虚拟机的功能。 2.克隆虚拟机过程 (1).从现有虚拟机(关机状态)克隆出新虚拟机,右键选择管理=>克隆,如下所示 (2).直接点击下一步。如下所示 (3).选择…

Android Studio中引入MagicIndicator

1.github中下载文件 GitHub - hackware1993/MagicIndicator: A powerful, customizable and extensible ViewPager indicator framework. As the best alternative of ViewPagerIndicator, TabLayout and PagerSlidingTabStrip —— 强大、可定制、易扩展的 ViewPager 指示器框…

【Unity3D赛车游戏】【五】Unity中汽车加速效果是如何优化的?

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;Uni…

Python如何进行基本的数学运算

Python进行基本的数学运算 Python是一门功能强大且易于学习的编程语言&#xff0c;它不仅可以用于开发应用程序&#xff0c;还可以用于执行各种数学运算。让我们一起来看看如何在Python中进行基本的数学运算。 加法、减法、乘法和除法 Python支持常见的加法、减法、乘法和除…

Linux操作系统--包管理yum

1.概述 YUM(全称为 Yellow dog Updater, Modified)是一个在 Fedora 和 RedHat 以及 CentOS中的 Shell 前端软件包管理器。基于 RPM 包管理,能够从指定的服务器自动下载 RPM 包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。…

Redis数据结构全解析【超详细万字分析】

文章目录 前言一、SDS1、SDS的必要性2、SDS的数据结构3、SDS的优势O&#xff08;1&#xff09;复杂度获取字符串长度二进制安全不会发生缓冲区溢出节省空间 二、链表1、结构设计2、优缺点 三、压缩列表1、结构设计2、连续更新3、压缩列表的缺陷 四、哈希表1、结构设计2、哈希冲…

开发新能源的好处

风能无论是总装机容量还是新增装机容量&#xff0c;全球都保持着较快的发展速度&#xff0c;风能将迎来发展高峰。风电上网电价高于火电&#xff0c;期待价格理顺促进发展。生物质能有望在农业资源丰富的热带和亚热带普及&#xff0c;主要问题是降低制造成本&#xff0c;生物乙…

深入分析负载均衡情景

本文出现的内核代码来自Linux5.4.28&#xff0c;为了减少篇幅&#xff0c;我们尽量不引用代码&#xff0c;如果有兴趣&#xff0c;读者可以配合代码阅读本文。 一、有几种负载均衡的方式&#xff1f; 整个Linux的负载均衡器有下面的几个类型&#xff1a; 实际上内核的负载均衡…

C#_委托详解

委托是什么&#xff1f; 字面理解&#xff1a;例如A要建一栋别墅&#xff0c;找到B建筑施工队&#xff0c;请B来建筑别墅。 委托类型规定方法的签名&#xff08;方法类型&#xff09;&#xff1a;返回值类型、参数类型、个数、顺序。 委托变量可以用来存储方法的引用&#x…

基于微信小程序的垃圾分类系统设计与实现(2.0 版本,附前后端代码)

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 1 简介 视频演示地址&#xff1a; 基于微信小程序的智能垃圾分类回收系统&#xff0c;可作为毕业设计 小…

【系统】win11怎么退回win10

根据微软官方提供的回滚方案显示&#xff0c;在升级Win11之后的10天之内&#xff0c;用户可以通过系统恢复选项将Win11还原Win10。操作方式也比较简单&#xff0c;大家可以打开系统设置&#xff0c;找到相应选项&#xff0c;选择并确认后即可轻松将Win11回退早期版本。详细操作…

darknet yolo make报错,缺少instance-segmenter.o的规则

文章目录 darknet yolo make报错&#xff0c;缺少instance-segmenter.o的规则报错原因解决办法新问题解决办法 补充g编译选项Makefile编译规则 darknet yolo make报错&#xff0c;缺少instance-segmenter.o的规则 报错原因 Makefile没有识别到对于instance-segmenter.o的编译…