mmLab系列使用方法

news2024/11/30 10:41:42

mmLab系列使用方法

    • 环境搭建
    • mmdetection
      • 检查
      • 数据集
      • 运行
      • 部署
    • mmdeploy
      • 环境搭建
      • 使用
    • mmOCR
    • mmsegmentation

环境搭建

Windows最推荐安装方法:

  1. 首先需要查好自己gpu的CUDA版本,根据版本到pytorch官方网站查找对应的pytorch版本(!!!只查找不下载!)https://pytorch.org/get-started/locally/

示例:gpu为3060

cmd中使用下列命令查看cuda版本:这查看的是CUDA最高支持的版本,并不一定是你环境里的版本!

nvidia-smi

在这里插入图片描述
cmd中查看CUDA版本nvcc -V,这里查看的是你安装的CUDA Toolkit版本,如果没有的话,再根据上面CUDA Version信息下载

在这里插入图片描述
到官网进行查看

在这里插入图片描述
在这里插入图片描述
这里获得需要下载的命令,注意!!不要再cmd中使用该命令下载,也不要使用清华源下载,这样非常容易默认安装成cpuonly的版本,导致无法使用GPU!坑很多

  1. 根据上述命令,到轮子网站https://download.pytorch.org/whl/torch_stable.html添加链接描述中CTRL +F 查找对应版本进行下载
    一定要对应好你的python版本,cuda版本以及windows版本
    在这里插入图片描述
    在这里插入图片描述

  2. 创建新的虚拟环境

conda create -n mmlab python=3.7
conda avtivate mmlab

cd 进入下载好的whl文件位置,pip进行安装

pip install E:/torch-1.8.0+cu101-cp37-cp37m-win_amd64.whl
  1. 测试gpu是否可用
import torch
flag = torch.cuda.is_available()
print(flag)
 
ngpu= 1
# Decide which device we want to run on
device = torch.device("cuda:0" if (torch.cuda.is_available() and ngpu > 0) else "cpu")
print(device)
print(torch.cuda.get_device_name(0))
print(torch.rand(3,3).cuda()) 
  1. 下载mmlab需要的环境mmcv
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/{cu_version}/{torch_version}/index.html

其中{cu_version}/{torch_version}填写自己的版本,我的是

pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.12.1/index.html

6.官网下载对应的代码安装包zip,并进行环境配置

  • 检测mmdetection
    https://github.com/open-mmlab/mmdetection.git
  • 分割 mmsegmentation
    https://github.com/open-mmlab/mmsegmentation
  • 字符识别 mmocr
    https://github.com/open-mmlab/mmocr
  • 部署 mmdeploy
    https://github.com/open-mmlab/mmdeploy

在对应的文件夹中安装对应配置

cd 你下载解压好的文件夹
python setup.py develop

mmdetection

检查

  1. 检测是否安装成功
    安装pip install -U openmim
    下载mim download mmdet --config yolov3_mobilenetv2_320_300e_coco --dest .
python demo/image_demo.py demo/demo.jpg yolov3_mobilenetv2_320_300e_coco.py yolov3_mobilenetv2_320_300e_coco_20210719_215349-d18dff72.pth --device cpu --out-file result.jpg

运行成功且result.jpg有对应框

数据集

  1. 准备数据集
    将数据组织成COCO格式的数据

注意:MMDetection 现只支持对 COCO 格式的数据集进行 mask AP 的评测。

以能够同时分割检测的mask-rcnn 为例

{
    "images": [image],
    "annotations": [annotation],
    "categories": [category]
}


image = {
    "id": int,
    "width": int,
    "height": int,
    "file_name": str,
}

annotation = {
    "id": int,
    "image_id": int,
    "category_id": int,
    "segmentation": RLE or [polygon],
    "area": float,
    "bbox": [x,y,width,height],
    "iscrowd": 0 or 1,
}

categories = [{
    "id": int,
    "name": str,
    "supercategory": str,
}]

这里有之前写好的labelme2coco.py进行转化

import json
import os
#读入没有标注的测试集,转换成coco的json模式
pic_dir = 'D:\MyDatasets\qisheng_tianjiao\qs-front-coco/images/test'  # 图片存放文件夹名
# root为文件夹的名字,dirs  , files为由文件夹内的每个文件的名称组成数组
jpg_num=0


#print("发现label:{}张",jpg_num)
list=[]
for jpg_file_ in os.listdir(pic_dir):
    list.append(jpg_file_)
    print(jpg_file_)

print(list)
print(len(list))
def get_json_data():  # 获取json里面数据
    dicts = {}  # 用来存储数据
    with open('D:\MyDatasets\qisheng_tianjiao\qs-front-coco/annotations/instances_test2017.json', 'r', encoding='utf8') as f:
        json_data = json.load(f)
        features = json_data["images"]
        #print(features)
        i=0

        for feature in features:
            if i < len(list):
            #filename=feature['file_name']
                feature['file_name']=list[i]
                dicts = json_data
                print(feature['file_name'])
                print(i)
            i = i + 1
        dicts = json_data  # 将修改后的内容保存在dict中
    return dicts


def write_json_data(dict):  # 写入json文件
    with open('D:\MyDatasets\qisheng_tianjiao\qs-front-coco/annotations/instances_test2017.json', 'w') as r:
        json.dump(dict, r)

file = get_json_data()
write_json_data(file)
  1. 准备配置文件
# 这个新的配置文件继承自一个原始配置文件,只需要突出必要的修改部分即可
_base_ = 'mask_rcnn/mask_rcnn_r50_caffe_fpn_mstrain-poly_1x_coco.py'

# 我们需要对头中的类别数量进行修改来匹配数据集的标注
model = dict(
    roi_head=dict(
        bbox_head=dict(num_classes=1),
        mask_head=dict(num_classes=1)))

# 修改数据集相关设置
dataset_type = 'CocoDataset'
classes = ('balloon',)
data = dict(
    train=dict(
        img_prefix='balloon/train/',
        classes=classes,
        ann_file='balloon/train/annotation_coco.json'),
    val=dict(
        img_prefix='balloon/val/',
        classes=classes,
        ann_file='balloon/val/annotation_coco.json'),
    test=dict(
        img_prefix='balloon/val/',
        classes=classes,
        ann_file='balloon/val/annotation_coco.json'))

# 我们可以使用预训练的 Mask R-CNN 来获取更好的性能
load_from = 'checkpoints/mask_rcnn_r50_caffe_fpn_mstrain-poly_3x_coco_bbox_mAP-0.408__segm_mAP-0.37_20200504_163245-42aa3d00.pth'

运行

  1. 训练模型
python ./tools/train.py ./configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco_YUAN.py
  1. 测试模型
python tools/test.py configs/mask_rcnn/mask_rcnn_r50_fpn_1x_coco.py work_dirs/mask_rcnn_r50_fpn_1x_coco/latest.pth --eval bbox  --show --show-dir work_dirs/mask_rcnn_r50_fpn_1x_coco/result

部署

具体环境配置等部署相关内容见下面mmdeploy,这里先展示相应命令

  1. 导出的模型储存在mmdeploy文件夹下
  2. 导出模型
    将训练好的pytorfch权重文件.pth 转化为onnx并且转为tensorrt需要的.engine文件
python tools/deploy.py 
configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py 
../mmdetection-master/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py 
../mmdetection-master/checkpoints/best_101.pth 
../mmdetection-master/demo/1.jpg 
--work-dir ../mmdeploy_out/mmdet/faster_rcnn_r50_trt/ --device cuda:0 --dump-info
  1. 使用c++生成的exe运行测试
object_detection.exe cuda 
权重————E:\\PycharmProjects\\mmdeploy_out\\mmdet\\faster_rcnn_r50_trt 
图片————E:\PycharmProjects\mmdetection-master\data\coco\val2017\

mmdeploy

这里只有我们所用的c++接口,匹配tensorRT的部署方法
最好在训练模型之前查看支持部署的模型
https://github.com/open-mmlab/mmdeploy/blob/master/README_zh-CN.md
推荐参考https://blog.csdn.net/qq_39435411/article/details/126010874

环境搭建

在已经搭建好mmdetection的情况下

  1. 安装 MMDeploy SDK 依赖
    安装OpenCV并且添加至系统变量

  2. 安装vs2019(不支持vs2017)

  3. 安装pplcv
    pplcv 是 openPPL 开发的高性能图像处理库
    在以下链接下载https://github.com/openppl-public/ppl.cv.git

cd ppl.cv
git checkout tags/v0.7.0 -b v0.7.0

将ppl.cv的文件夹放入环境变量

mkdir pplcv-build
cd pplcv-build
cmake .. -G "Visual Studio 16 2019" -T v142 -A x64 -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=install -DPPLCV_USE_CUDA=ON -DPPLCV_USE_MSVC_STATIC_RUNTIME=OFF
cmake --build . --config Release -- /m
cmake --install . --config Release
cd ../..

使用

  1. 在官网下载mmdeploy安装包
    https://github.com/open-mmlab/mmdeploy 并解压

  2. 新建build文件夹,cd进去

  3. 编译(复制后要删除空行)
    填好对应文件夹位置

#vs2019
cmake .. -G "Visual Studio 16 2019" -A x64 -T v142 
-DMMDEPLOY_BUILD_SDK=ON -DMMDEPLOY_TARGET_DEVICES="cuda" 
-DMMDEPLOY_TARGET_BACKENDS="trt" 
-DMMDEPLOY_CODEBASES="all" 
-Dpplcv_DIR="E:\PycharmProjects\mmdetection-master\ppl.cv\pplcv-build\install\lib\cmake\ppl" 
-DTENSORRT_DIR="E:\PycharmProjects\mmdetection-master\ppl.cv\pplcv-build\install\lib\cmake\ppl" 
-DCUDNN_DIR="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.3"
cmake --build . --config Release -- /m
cmake --install . --config Release
  1. 编译mmdeploy example
cd $env:MMDEPLOY_DIR\build\install\example
mkdir build -ErrorAction SilentlyContinue
cd build
cmake .. -G "Visual Studio 16 2019" -A x64 -T v142 ` -DMMDeploy_DIR="E:\\PycharmProjects\\mmdeploy-master\\build\\install\\lib\\cmake\\MMDeploy"

cmake --build . --config Release -- /m
  1. 推理测试
cd Release
object_detection.exe cuda F:\mmdeploy_c_sdk_demo\models\yolox_s F:\\gy77\\mmdetection\\demo\\demo.jpg

在Release文件夹下生成了mmdeploy支持部署的各种exe文件,可以导入对应转换好的engine文件进行测试

mmOCR 和mmSegmentation具体使用方法以及部署方法同类似,以下只放出对应命令,具体使用可以参考官方文档

mmOCR

Libra-Rcnn

1. python ./tools/train.py ./configs/libra_rcnn/libra_faster_rcnn_r50_fpn_1x_coco.py
2.python tools/test.py configs/libra_rcnn/libra_faster_rcnn_r50_fpn_1x_coco.py work_dirs/libra_faster_rcnn_r50_fpn_1x_coco/best_bbox_mAP_epoch_136.pth --eval bbox  --show --show-dir work_dirs/libra_faster_rcnn_r50_fpn_1x_coco/result
3.python tools/deploy.py configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py ../mmdetection-master/configs/libra_rcnn/libra_faster_rcnn_r50_fpn_1x_coco.py  ../mmdetection-master/work_dirs/libra_faster_rcnn_r50_fpn_1x_coco/best_bbox_mAP_epoch_136.pth ../mmdetection-master/demo/1.jpg --work-dir ../mmdeploy_out/mmdet/libra_faster_rcnn_r50_fpn_1x_coco/ --device cuda:0 --dump-info

mmsegmentation

训练

python tools/train.py E:\PycharmProjects\mmsegmentation-master\configs\bisenetv2\bisenetv2_fcn_4x4_1024x1024_160k_cityscapes.py 
--work-dir workplace

测试

python tools/test.py configs/bisenetv2/bisenetv2_fcn_4x4_1024x1024_160k_cityscapes.py 
workplace/latest.pth --show-dir workplace/output_dir

部署

python tools/deploy.py configs/mmdet/detection/detection_tensorrt_dynamic-320x320-1344x1344.py 
../mmdetection-master/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py 
../mmdetection-master/checkpoints/latest.pth ../mmdetection-master/demo/1.jpg --work-dir ../mmdeploy_out/mmdet/faster_rcnn_r50_trt/ 
--device cuda:0 --dump-info

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mybatis源码分析(七)MapperMethod的INSERT分析

目录一 INSERT 语句1.1 参数的对应解析convertArgsToSqlCommandParam1.2 ID获取对应的MappedStatement1.3 MappedStatement交给执行器执行1.4 不同的执行器获取不同的StatementHandler1.5 根据参数获取BoundSql1.6 执行器配置参数处理器ParameterHandler1.7 拿到StatementHandl…

人工智能-http协议和静态服务器

目录1、HTTP协议1.1 网址1.2 http协议的介绍1.3 http请求报文1.&#xff14; http响应报文1.&#xff15;查看http协议的通信过程&#xff12;、静态web服务器程序开发2.1 搭建python自带的静态web服务器2.2 静态web服务器-返回固定页面数据1、HTTP协议 1.1 网址 网站又称为U…

【报错】assert failed: xQueueSemaphoreTake queue.c:1545 (( pxQueue ))

&#x1f331; hi&#xff0c;最近开始写嵌入式&#xff0c;碰到蛮多新的问题&#xff0c;也调bug到凌晨五点过。欢迎关注我&#xff0c;一起讨论交流 开发环境 在VScode中使用Arduino&#xff0c;开发板ESP32S3 报错代码 使用队列接收服务器消息&#xff0c;FIFO依次处理消…

ROS1学习笔记:参数的使用与编程方法(ubuntu20.04)

参考B站古月居ROS入门21讲&#xff1a; 参数的使用与编程方法 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录一、概念图讲解二、创建功能包三、参数命令行的使用方法&#xff1a;rosparam显示某个参数值&#xff1a;rosparam get设定某个参数值&#xff1a;rosparam set将…

linux小程序—进度条(动态演示)

文章目录1. \n与\r的区别1. linux环境下2. windows环境下2. 缓冲区问题1.\n的情况2.\r的情况3. \n与\r的情况对比4. 使用fflush函数观察\r情况5. 不为\n与\r的情况3.进度条的实现1. printf 打印字符问题1. 修改前2.修改后2 . 注意事项3. 整体实现1. makefile(自动化编译工具&am…

一篇文章教会你Linux下《常用操作指令》

基本指令首言ls&#xff08;查看目录&#xff09;pwds&#xff08;显示用户当前所在目录&#xff09;cd&#xff08;改变工作目录&#xff09;mkdir&#xff08;创建目录&#xff09;rmdir&#xff08;删除目录&#xff09;touch &#xff08;新建文件或更新文件时间&#xff0…

【Python】获取视频弹幕并生成词云

目录一、摘要二、获取目标视频cid三、获取视频弹幕xml文件四、处理弹幕文件五、生成词云六、完整参考代码一、摘要 就是那个大家都用的弹幕视频网站&#xff0c;不写名字了&#xff0c;写了老是不能通过。 获取视频的弹幕文件&#xff08;xml&#xff09;&#xff0c;并生成如图…

认真分享一个让我变厉害的小建议

很多朋友&#xff0c;加我好友之后&#xff0c;第一句话通常是&#xff1a;我想提高英语&#xff0c;有什么资料推荐&#xff1f; 这要看你学英语的目的了。 我们学英语是为了什么? 理由可能很多&#xff0c;我就说个最俗的目的吧&#xff0c;为了发财。 想发财应向谁学习&…

代码随想录第31天|● 455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和

455.分发饼干 大尺寸的饼干既可以满足胃口大的孩子也可以满足胃口小的孩子&#xff0c;那么就应该优先满足胃口大的。 这里的局部最优就是大饼干喂给胃口大的&#xff0c;充分利用饼干尺寸喂饱一个&#xff0c;全局最优就是喂饱尽可能多的小孩。 可以尝试使用贪心策略&#xf…

[ 数据结构 ] 最小生成树(MST)--------普里姆算法、克鲁斯卡尔算法

0 修路问题 有胜利乡有 7 个村庄(A, B, C, D, E, F, G) &#xff0c;现在需要修路把 7 个村庄连通各个村庄的距离用边线表示(权) &#xff0c;比如 A – B 距离 5 公里问&#xff1a;如何修路保证各个村庄都能连通&#xff0c;并且总的修建公路总里程最短? 思路: 将 10 条边&a…

Java常用工具类方法(上)

1. Collections首先出场的是java.util包下的Collections类&#xff0c;该类主要用于操作集合或者返回集合&#xff0c;我个人非常喜欢用它。1.1 排序在工作中经常有对集合排序的需求。看看使用Collections工具是如何实现升序和降序的&#xff1a;List<Integer> list new…

揭秘链动2+1商业模式玩法

链动21模式主要是打造裂变团队的同时又能快速地将平台销售额提升起来&#xff0c;链动模式可以说颠覆传统的分销&#xff0c;算是一个创新更能吸引用户&#xff0c;稳住会员&#xff0c;拓展新客户的商业模式。 链动21模式有两个身份&#xff0c;分别是代理和老板 【代理商】…

Java高手速成 | 高质量代码编写最佳实践

程序员之间交流时&#xff0c;会经常使用非程序员无法理解的行话&#xff0c;或者使用令操不同编程语言的程序员理解起来比较模糊的行话。 但是&#xff0c;那些操相同编程语言的程序员理解起来不会产生什么问题。 这有时也取决于程序员所掌握知识的渊博程度。 一个新手或许不理…

以 Animated Drawings APP 为例,用 TorchServe 进行模型调优

内容导读 上节介绍了 TorchServe 模型部署调优的 5 个步骤&#xff0c;将模型部署到生产环境中。本节以 Animated Drawings APP 为例&#xff0c;实际演示 TorchServe 的模型优化效果。 本文首发自微信公众号&#xff1a;PyTorch 开发者社区 去年&#xff0c;Meta 凭借 Animate…

win系统重装系统后提示 BitLocker(磁盘加密)密钥查找及如何关闭

文章目录前言如何找到恢复秘钥&#xff0c;解锁磁盘1、打开链接&#xff1a;[https://support.microsoft.com/zh-cn/help/4026181/windows-10-find-my-bitlocker-recovery-key](https://support.microsoft.com/zh-cn/help/4026181/windows-10-find-my-bitlocker-recovery-key)2…

Nuxt3+ElementPlus构建打包部署手记

文章目录为何选Nuxt.js?工程package.json参考目录结构页面之间的关系几个主要命令动态组件获取后台数据SSR打包方式部署参考文档为何选Nuxt.js? 在前后端分离出现之前&#xff0c;传统的web页面都是服务端渲染的&#xff0c;如JSP、PHP、Python Django&#xff0c;还有各种模…

06【Filter】

文章目录06【Filter】一、过滤器简介1.1 Filter概述1.2 Filter的使用1.2.1 Filter快速体验1.2.2 XML配置Filter1.2.3 Filter的拦截规则1.3 Filter的生命周期1.3.1 Filter生命周期介绍1.3.2 Filter生命周期相关方法1.3.3 FilterConfig类1.4 Filter的拦截方式1.4.1 REQUEST1.4.2 …

Linux系统编程——管道

文章目录一、管道1.管道的特质2.管道的用法——pipe函数3.管道的读写行为4..管道的优劣二.实战练习&#xff1a;实现ls | wc -l 指令三、fifo实现非血缘关系进程间通信一、管道 1.管道的特质 实现原理: 内核借助环形队列机制&#xff0c;使用内核缓冲区实现。 特质: 1.伪文件…

接口测试 Mock 实战(二) | 结合 jq 完成批量化的手工 Mock

一、应用背景因为本章的内容是使用jq工具配合完成&#xff0c;因此在开始部分会先花一定的篇幅介绍jq机器使用&#xff0c;如果读者已经熟悉jq&#xff0c;可以直接跳过这部分。先来看应用场景&#xff0c;App 经常会有一些信息展示的列表页&#xff0c;比如商家的菜品、股票的…

真无线蓝牙耳机怎么选?分体式蓝牙耳机选购攻略及推荐

近年来&#xff0c;随着智能手机终端市场的崛起&#xff0c;无线蓝牙耳机的产销也随之呈持续增长的态势。真无线蓝牙耳机凭借其时尚、便捷性&#xff0c;迅速成为年轻人出门必备的数码单品之一。蓝牙耳机经过多年发展&#xff0c;其产品种类、品牌型号数不胜数。导致&#xff0…