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

高效MMdetection(3.1.0)环境安装和训练自己数据集教程(实现于Linux(ubuntu),可在windows尝试)

一、前言

很久没用mmdetection了,作为目标检测常见的几个深度学习框架,mmdetection用的人还是很多的,其中比较吸引人的一点就是mmdetection集成了非常多的算法,对于想做实验对比和算法学习的人来说,基于这个框架可以事半功倍。因为外面提出的各种各样的算法依赖的环境会有所不同,数据集的格式也有区别,我们单独去跑这一个个算法实际上是很费劲的,所以mmdetection的出现直接把这些算法集成到一个统一的平台,对于大家系统性的学习非常便利。

最近几天摸索了一下,过程还比较顺利,但是摸索也耗时间,所以在这里记一下,既为以后使用方便,也为有需要的人提供参考。

重点说明,本环境未使用 mim库进行环境安装,使用常规的conda、pip安装,过程非常简单高效。以前大致瞅见过 mim库,估计是可以自动检测软硬件环境以匹配合适的库进行安装,命令可能是模仿的 pip,这个库一般来说可以避免使用,所以这里未考虑使用mim库。

官网安装教程如下,网址:https://mmdetection.readthedocs.io/zh_CN/latest/get_started.html在这里插入图片描述

下面是本文推荐的安装教程。

二、环境安装

1、下载mmdetection框架的所有文件,可以:

git clone https://github.com/open-mmlab/mmdetection.git

也可以直接去官网:https://github.com/open-mmlab/mmdetection 下载压缩包
我下载的是3.1.0版本的压缩包
在这里插入图片描述
2、创建运行需要的虚拟环境
很常规的操作,不熟悉的需要时间理解摸索一下,
①一般涉及到使用的操作系统,Linux或windows,这里用的是Linux下的Ubuntu 16.04。
②然后是显卡驱动软件,深度学习要用显卡计算一般得有,显卡驱动的版本一般有12基本够用,显卡驱动软件版本就是nvidia-smi右上角的cuda version,表示环境中cudatoolkit可以安装的最高版本号。(之前有段时间以为需要单独安装CUDA,实际发现只需要安装显卡驱动软件 + 虚拟环境安装cudatoolkit 就可以跑深度学习代码)
③然后就是常规的虚拟环境创建,安装相关库。

假设创建一个名称为mmlab的虚拟环境

conda create -n mmlab python=3.8 -y

激活进入虚拟环境

conda activate mmlab

安装pytorch等深度学习库,我的显卡驱动软件是12.2的版本,我选择装CUDA11.3版本的pytorch,其他具体命令可去pytorch官网查询,我的是

conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch

这时可以验证一下pytorch库是否可以调用显卡,进入python环境

import torch
torch.cuda.is_available()
True

输出True则说明可正常调用显卡

接着是安装 mmengine

pip install mmengine

然后是mmcv,官网给了一个版本推荐:
在这里插入图片描述
我是根据这个推荐尝试了的,但是发现后面会报错,无法导入mmdet,而且提示我mmcv版本不对,所以不能完全按照教程来。后面我看了一下可能是装的mmdetection是3.x版本的,而教程里是2.X版本的教程。
我安装能用的是:

pip install mmcv==2.0.0rc4

这条命令的安装时间很长,估计有半小时以上

装完之后,可以进入python命令行测试一下

import mmdet

如果可以正常导入的话,说明库之间的调用是没问题的
最后就是进入mmdetection进行编译

cd mmdetection-main
pip install -v -e .

运行完就会提示安装成功。
上述就是我装环境的过程,完全没有使用mim,而且安装起来也不复杂,我提供的这个版本也是验证了可以使用的。总共没几条命令,特别简单,就是要花点时间。

三、训练自己的数据集

1、数据集准备
mmdetection要求数据集的格式是coco形式的,即训练、测试图片+两个各自的json文件,具体格式自行查询coco数据集制作或介绍的内容
2、网络配置
以前配置网络感觉过程还挺复杂的,在一些文件里 加数据集路径+数据集类别名等,现在不用这么复杂了,可以自己写一个配置文件覆盖掉提供的文件,基于自己提供的信息去训练网络。

①我一般在configs文件夹下创建一个专门用来跑自己想跑的算法的文件夹,假设为test_task
②把要跑的算法拷贝test_task,假设是fcos.py
③把_base_要求的文件也拷进来,可能会改内容。在test_task文件夹下创建一个_base_文件夹,放coco_detection.py , schedule_1x.py , default_runtime.py 代码,注意在fcos.py里修改相对路径

④自己写一个配置文件,比如fcos_base.py,用来给fcos.py继承,注意配置文件fcos_base.py的内容必须是fcos.py出现了的变量,仅是覆盖掉之前的配置,示例fcos_base.py内容主要如下:

""" 表示继承自fcos.py"""
_base_ = './fcos.py'"""更改 model 中的 num_classes 以匹配数据集中的类别数,本地加载预训练模型加checkpoint参数,建议绝对路径"""
model = dict(backbone =dict(init_cfg=dict(checkpoint='./resnet50.pth')),bbox_head=dict(num_classes=1))"""修改数据集相关配置,dataroot建议数据集的绝对路径,metainfo给出数据集的类别,训练集和验证集的ann_file写自己的数据集路径和名称,batch_size也可以设置"""
data_root = 'data/balloon/'
metainfo = {'classes': ('balloon', )}
train_dataloader = dict(batch_size=1,dataset=dict(data_root=data_root,metainfo=metainfo,ann_file='train/annotation_coco.json',data_prefix=dict(img='train/')))
val_dataloader = dict(dataset=dict(data_root=data_root,metainfo=metainfo,ann_file='val/annotation_coco.json',data_prefix=dict(img='val/')))
test_dataloader = val_dataloader# 修改评价指标相关配置
val_evaluator = dict(ann_file=data_root + 'val/annotation_coco.json')
test_evaluator = val_evaluator

所以基本上用着一个配置文件就可以完成个性化的训练任务,不需要去改那么多的参数和文件了

训练命令:

python tools/train.py configs/test_task/fcos_base.py

这样就可以开始训练了。
我的训练界面:
在这里插入图片描述
在这里插入图片描述

相关文章:

高效MMdetection(3.1.0)环境安装和训练自己数据集教程(实现于Linux(ubuntu),可在windows尝试)

一、前言 很久没用mmdetection了,作为目标检测常见的几个深度学习框架,mmdetection用的人还是很多的,其中比较吸引人的一点就是mmdetection集成了非常多的算法,对于想做实验对比和算法学习的人来说,基于这个框架可以事…...

软考-入侵检测技术原理与应用

本文为作者学习文章,按作者习惯写成,如有错误或需要追加内容请留言(不喜勿喷) 本文为追加文章,后期慢慢追加 by 2023年10月 入侵检测技术概念 入侵检测技术是指一种计算机安全技术,旨在监测计算机系统、…...

openGaussDatakit让运维如丝般顺滑!

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…...

整理MongoDB文档:身份验证

整理MongoDB文档:身份验证 个人博客,求关注。 文章概叙 本文主要讲MongoDB在单机状态下的账户配置。理解了MongoDB的语法,对于如何配置用户权限会知道怎么配置,但是请注意给谁配置什么权限才是最重要的。 最小权限原则 系统的每个程序或者…...

逐字稿 | 视频理解论文串讲(下)【论文精读】

1 为什么研究者这么想把这个双流网络替换掉,想用3D 卷积神经网络来做? 大家好,上次我们讲完了上半部分,就是 2D 网络和一些双流网络以及。它们的。变体。今天我们就来讲一下下半部分,就是 3D 网络和 video Transformer…...

【C++入门:C++世界的奇幻之旅】

1. 什么是C 2. C发展史 3. C的重要性 4. C关键字 5. 命名空间 6. C输入&输出 7. 缺省参数 8. 函数重载 9. 引用 10. 内联函数 11. auto关键字(C11) 12. 基于范围的for循环(C11) 13. 指针空值---nullptr(C11)05. 1. 什么是C C语言是结构化和模块化的语言&…...

rancher2.6.4配置管理k8s,docker安装

docker快速安装rancher并管理当前k8s集群。 1、拉镜像 docker pull rancher/rancher:v2.6.4 2、启动rancher 启动很慢 --privileged必须拥有root权限,并挂载卷 docker run --privileged -d --restartunless-stopped -p 80:80 -p 443:443 -v /usr/local/docker_vo…...

​​​​​​​Python---练习:使用while嵌套循环打印 9 x 9乘法表

案例 使用while嵌套循环打印 9 x 9乘法表 思考 之前做过打印出三角形,那个三角形是5行的,这次打印9行的三角形。可以先使用while嵌套循环打印9行的直角三角形 相关链接Python---练习:打印直角三角形(利用wihle循环嵌套&#xf…...

仅手机大小!极空间T2随身数据魔盒发布:既是NAS 又是U盘

今天极空间召开新品发布会,带来了极空间T2随身数据魔盒,售价1999元起。 极空间T2随身数据魔盒体积仅手机大小,充电宝可供电。既是个NAS,又是个U盘。 其具备双M.2插槽,可安装两块固态硬盘。4G内存支持docker&#xff0c…...

设计院图纸加密防泄密方案——天锐绿盾加密软件@德人合科技

天锐绿盾是一款专业的企业信息化防泄密软件,主要针对文档全生命周期进行加密保护,包括创建、修改、传输、归档、分发、销毁等全过程。它可以加强外发数据及终端离线的管理,对正常授权外带范围内的数据流程进行规范。设计图纸、文档等成果数据…...

AD9371 官方例程HDL详解之JESD204B TX侧时钟生成 (二)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 : AD9371 官方…...

实用新型和发明的区别

实用新型专利:是指对产品的形状、构造或者其结合所提出的适于实用的新的技术方案,指对有具体产品结构提出的改进或创造。与发明相比,实用新型专利申请对于技术的要求更低一点,在审查的时候不会进行详细的检索和对比,授…...

Oracle通过透明网关查询SQL Server 报错ORA-00904

Oracle通过透明网关查询SQL Server 报错ORA-00904 问题描述: 只有全表扫描SELECT * 时SQL语句可以正常执行 添加WHERE条件或指定列名查询,查询语句就报错 问题原因: 字段大小写和SQLSERVER中定义的不一致导致查询异常 解决办法: 给…...

MySQL表操作—存储

建表: mysql> create table sch( -> id int primary key, -> name varchar(50) not null, -> glass varchar(50) not null -> ); Query OK, 0 rows affected (0.01 sec) 插入数据: mysql> insert into sch (id,name,…...

Android Studio Gradle中没有Task任务,没有Assemble任务,不能方便导出aar包

Gradle中,没有Assemble任务 1. 在编译aar包或者编译module的时候,没有release包,我们一般都是通过assemble进行编译。 如果在Gradle中找不到task。 可以通过设置File->setting -->Experimental→取消勾选“Do not build Gradle task …...

重复性管理--从泛值到泛型以及泛函(中)--泛函是什么及为什么

在前面, 我们探讨了泛型范式在解决重复性问题上的应用, 在这里, 将继续探讨泛函范式在解决重复性问题上的作用. 注: 关于"泛函(functional)“这一名称, 前面说了, 泛型的本质是"参数化类型”, 那么, 按照这一思路, 泛函的意思也可以理解为"函数的参数化"或…...

Arm推出Total Design生态系统,优化基于Neoverse CSS的SoC开发流程

目录 构建生态系统 将Arm架构小芯片带给大众 关于Arm Total Design的结语 我们最近报道了Arm的Neoverse CSS Genesis N2平台的发布,这是一个近乎现成的计算子系统设计,旨在加快尖端基础设施中定制加速器的上市时间。我们当时评论说,我们可…...

30天精通Nodejs--目录与说明

说明 本系列博客主要针对nodejs零基础的小伙伴,涵盖了Node.js从基础到高级的各个方面。 前置条件,有js的基础,了解css和html。 nodejs版本20.8.1。 目录 基础知识 第1天:基础介绍 第2天:模块系统与npm 第3天&#…...

如何创建前端绘图和图表?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…...

Python基础入门例程3-NP3 读入字符串

描述 小白正在学习Python,从变量输出开始。请使用input函数读入一个字符串,然后将其输出。 输入描述: 输入一行字符串。 输出描述: 将读入的变量输出。 示例1 输入: Nowcoder 复制输出: Nowcoder…...

XML Group端口详解

在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

SpringCloudGateway 自定义局部过滤器

场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...