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

news/2024/7/10 2:45:47 标签: ubuntu, mmdetection, python, 目标检测

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

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

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

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

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

二、环境安装
1、下载mmdetection框架的所有文件,可以:

python">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的虚拟环境

python">conda create -n mmlab python=3.8 -y

激活进入虚拟环境

python">conda activate mmlab

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

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

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

python">import torch
torch.cuda.is_available()
True

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

接着是安装 mmengine

python">pip install mmengine

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

python">pip install mmcv==2.0.0rc4

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

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

python">import mmdet

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

python">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内容主要如下:

python">""" 表示继承自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">python tools/train.py configs/test_task/fcos_base.py

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


http://www.niftyadmin.cn/n/5112129.html

相关文章

“暂停加息,股市低迷:242只股票创新低,比特币突破2.8万美元后看涨趋势不可挡!“

11 月1日 FOMC 会议 美联储主席杰罗姆鲍威尔周五在纽约发表讲话,毫不意外地,他采取了更加鸽派的立场,因为在不确定的世界中,美国政府的过度杠杆化和可能即将到来的经济衰退已成为共识。 根据鲍威尔对未来加息的最低限度讨论&…

vue项目编译、打包、部署服务器运行

在vue项目执行npm run build,生成dis目录 打包dis上传 安装npm install -g http-server或者apt install node-http-server 运行http-server

【LeetCode 算法专题突破】滑动窗口(⭐)

文章目录 前言1. 长度最小的子数组题目描述代码 2. 无重复字符的最长子串题目描述代码 3. 最大连续1的个数 III题目描述代码 4. 将 x 减到 0 的最小操作数题目描述代码 5. 水果成篮题目描述代码 6. 找到字符串中所有字母异位词题目描述代码 7. 串联所有单词的子串题目描述代码 …

进阶高级,接口+接口自动化测试疑难解答,一篇带你策底打通...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、你们做接口测试…

进程(1)——什么是进程?【linux】

进程(1)——什么是进程?【linux】 一. 什么是进程?二. 管理进程:2.1 怎么管理:2.2 PCB2.3.1 task_struct2.3.2 组织task_struct: 三.查看进程3.1 ps ajx3.2 ls /proc 四. 父子进程4.1 什么是父子…

以太网——ARP协议工作原理

ARP目录 MAC地址一、ARP是什么?二、ARP工作原理工作机制总结三、ARP报文结构四、ARP缓存MAC地址 我们知道别人的 IP 地址后,就能够向这个 IP 地址所在的主机发送数据包。但是IP 地址只是标识网络层的地址,那么在网络层下方数据链路层是不是也有一个地址能够告诉对方主机自己…

linux api官网

www.kernel.org/doc/html/

虚函数实例

1.声明&#xff1a;virtual 同名成员名 可实现父类访问子类中与其同名的成员 #include<iostream> using namespace std; class A{protected:int x;public:A(int x10):x(x1){}virtual void print(){//在类A中定义print为虚函数cout<<"A类中的x"<<x…