关于mmdetection上手的几点说明

关于mmdetection上手的几点说明

官方的文档很有参考价值,并且也有中文版,应当是大家上手 mmdetection 的第一参考,本文是记录一些笔者在小白阶段上手 mmdetection 时的一些心得,这些东西没有人提,可能是大佬们觉得这些再自然不过了,也可能是自己在一开始对 mmdet 项目的理解不够,在这里记录一下,如果能帮到其他刚入门的朋友就更好了。

注意:对于官方文档中已有的内容,本文不会重复介绍,二者配合阅读并动手实践是最佳的上手mmdetection的方式。如有问题或发现错误,欢迎留言交流。

1 关于不同的安装方式

官方文档提供了四种安装方式:

  • mim
  • pip
  • 源码安装
  • docker

docker 这里我们先不提,mim 和 pip 暂且看做一类。

pip/mim

通过 pip/mim 安装的 mmdet 会直接装在当前 python 的虚拟环境中,比如是在 conda 环境下的话,就会是在类似下面这样的路径中:

/home/song/anaconda3/envs/[YOUR_CONDA_ENV_NAME]]/lib/python[x.x]/site-packages/

这样,我们在激活这个环境之后,就可以正常的 import mmdet 中的各种组件了。就跟其他 python 包比如 pytorch 类似。注意:我们安装的这个包是叫做 mmdet ,而不是 mmdetection。

源码安装

我们如果是源码安装 mmdetection ,即类似(具体命令参考官方文档)

git clone ...
...
python setup.py ...

这样其实 mmdet 包也就装到我们当前的的 python 的虚拟环境中了。跟上面类似,同样要注意我们安装的这个包是叫做 mmdet ,而不是 mmdetection。

另外有一点,就是我们 clone 下来的这个项目目录在安装完毕之后还有什么用呢?这里就是本文要说明的一个点了。

2 关于mmdetection的目录结构

mmdet 子目录

注意我们这个 clone 下来的目录是叫做 mmdetection ,而不是 mmdet,mmdet 是其中的一个子目录。通常,整个 mmdetection 目录会包含以下内容:

.
|-- checkpoints
|-- CITATION.cff
|-- configs
|-- debug_icf_config.py
|-- demo
|-- docker
|-- docs
|-- LICENSE
|-- MANIFEST.in
|-- mmdet
|-- mmdet.egg-info
...
|-- setup.cfg
|-- setup.py
|-- tests
|-- tools
...

可以看到 mmdet 确实是其中一个子目录,而 mmdet 子目录的内容,我们上面提到过,在执行完 python setup.py ... 之后就已经安装到我们当前 python 的虚拟环境中了,比如 /home/song/anaconda3/envs/[YOUR_CONDA_ENV_NAME]]/lib/python[x.x]/site-packages/ 路径下。**其实可以说,我们 clone 下来的这个包含 mmdet 的 mmdetection 的项目目录,在安装完之后,就可以删了。不会影响到我们正常地 import mmdet 中的内容,我们在其他工作目录中 import mmdet 时也 不会再从 clone 下来的这个项目目录中 import 内容了,而是去上面提到的 python 虚拟环境路径中 import **,记住这一点,一会儿会提它的作用。

其他子目录

但是,那其他的子目录是做什么用的呢。mmdetection 这么优秀的开源项目,总不会放一些无关的东西在里面吧。而且官方教程中的很多例子都会用到 toolsconfigs 这些子目录中的内容,看起来很有用的样子。

**是的,这些东西确实很有用,它相当于官方为我们提供的一些使用 mmdet 库的例子。**通常,我们利用 mmdet 库跑检测模型也直接根据这些东西改就好了,完全不用自己从头实现。

比如,我们要跑一个 Faster RCNN 的模型,通常只需要在 mmdetection 目录下按照类似如下的方式启动训练:

python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py

关于怎么利用官方提供的其他这些子目录作为示例,构建自己的基于mmdet的项目并进行模型训练,请看下一小节。

3 关于构建自己的工作目录并启动训练

前面我们提到:

  • 不管通过哪一种方式完成了 mmdet (不叫mmdetecion)的安装之后,mmdet 这个包就已经在我们的 python 虚拟环境中了,我们可以在任何位置 import mmdet 中的内容。
  • 如果是通过源码安装,在安装完成后。clone 下来的 mmdetecion 项目目录(注意,mim/pip 方式安装从头到尾就不会见到这个目录)理论上就没有绝对存在的必要了。但是,其中的除了 mmdet 包本身之外的 tools、configs 等内容,相当于是官方为我们提供的一些实践,我们通常基于这些内容来稍微修改 configs(数据集、模型、数据预处理方式、损失函数等)进行训练。

了解了这些之后,要基于 mmdet 训练自己的检测模型其实就有两种方式:

直接基于mmdetecion项目目录

在通过源码安装完成之后,我们可以直接把 clone 下来的 mmdetection 项目目录当做自己的工作目录,学习官方文档的快速启动、教程,都可以在本目录下进行实操。在过完官方教程之后,相必对于各个子目录的功能以及如何构建自己的工作目录就了如指掌了。

自己新建工作目录

前面提到过,对于 pip/mim 方式安装,从头到尾就不会见到 mmdetection 这个项目目录,不过之前也说了,完成安装之后,这个项目目录就没有一定要存在的必然性了。此时自然也不能共上面一种方式来构建了,但我们完全可以自己新建一个自己的工作目录,通过已经安装好的 mmdet 库,实现必要的功能、训练脚本和config文件等来进行模型训练。这也并不是特别复杂,一般来说,最简单的训练功能只需要 train.py 和 config 文件就可以开始了,这两样是必要的的。

笔者目前的做法还是借用官方仓库中 tools/train.py 和官方的一些基础的 base config 文件稍作修改,训练自己的模型。也建议新手入门先直接通过 clone 下来官方仓库,走一下官方教程,慢慢熟悉,后面再实现自己想要的比较定制化的功能。

实际上,对于检测模型的调整无非就是在数据集、模型、数据预处理方式、损失函数等方面,这也都可以通过自己实现自己定制化的模块并注册进 mmdet 包,并在 config 文件中调用。这就是下面要介绍的自定义注册的内容。

4 关于自己自定义注册的内容

关于自己自定义注册的内容,首先要去参考官方文档教程3-6,其实文档中的教程写的很清楚,文章开头也说过本文不会重复教程中已有的内容。因此这一小节主要介绍一个关于自己自定义注册的内容需要注意的点。

注意

不管是是哪种安装方式,我们在其他工作目录中 import mmdet 时不会再从 mmdetection 项目目录中 import 内容,而是去上面提到的 python 虚拟环境路径中 import ,笔者之前特意强调了这一点,需要注意的地方就在这里。

由于我们不会在 mmdetecion 项目目录中 import 内容,而是到虚拟环境路径下对应的文件中 import,那这里就要注意,自己实现的自定义内容要注册在虚拟环境路径下对应的文件中,而不要写到 clone 下来的目录中,那样我们 import 的时候会 import 不到自己实现并注册的内容。

尾记

就先介绍这么多,笔者本身也是刚刚正式接触 mmdetection,确实是一个很好用的检测工具箱,自己在之前理解不当的时候一直觉得很麻烦,甚至觉得学这学那的 config、注册自定义内容,还不如直接自己写训练流程。澄清了上面几个点之后算是了解了整个项目的基本运作方式,真香。

有问题或者有理解不当的地方欢迎留言交流。

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

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

相关文章

docker gpu报错Error response from daemon: could not select device driver ““ with capabilities: [[gpu]]

Docker容器中使用Nvidia GPU报错 docker: Error response from daemon: could not select device driver “” with capabilities: [[gpu]]. 问题出现 我们知道,想要在 docker19 及之后的版本中使用 nvidia gpu 已经不需要单独安装 nvidia-docker 了,这…

CUDA环境详解

CUDA环境详解 本文主要介绍 CUDA 环境,这一堆东西网上有很多博客介绍过了,我再来一篇:),参考前辈们的文章,看能不能写的更清楚一点。读后仍有问题,欢迎留言交流。 CUDA APIs CUDA是由NVIDIA推出的通用并行计算架构&…

共享内存简介及docker容器的shm设置与修改

共享内存简介及docker容器的shm设置与修改 共享内存简介 共享内存指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存&#xff…

对Docker镜像layer的理解

对Docker镜像layer的理解 转自:https://blog.csdn.net/u011069294/article/details/105583522 FROM python:3.6.1-alpine RUN pip install flask CMD [“python”,“app.py”] COPY app.py /app.py上面是一个Dockerfile的例子,每一行都会生成一个新的l…

ssh免密登录配置方法及配置

ssh免密登录配置方法及配置 直接上步骤,记我们本机为机器A,而机器B、机器C等是我们的服务器,我们要配置的是A到B、C等的 ssh 免密登录。 1 在机器A上生成秘钥对 ssh-keygen会得到输出: Generating public/private rsa key pai…

机器学习系统:设计与实现 计算图

机器学习系统:设计与实现 计算图 转自:https://openmlsys.github.io/chapter_computational_graph/index.html 在上一章节中,我们展示了用户利用机器学习框架所编写的程序。这些用户程序包含了对于训练数据,模型和训练过程的定义。然而为了…

常见浮点数格式梳理

常见浮点数格式梳理 IEEE 754 标准 浮点数转换网站:https://www.h-schmidt.net/FloatConverter/IEEE754.html IEEE二进制浮点数算术标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值&am…

Python拾遗1:collections、itertools和内存io

Python拾遗1:collections、itertools和内存io 转自:https://www.liaoxuefeng.com/wiki/1016959663602400 本系列旨在补充python中一些很好用但是并非常规课程主线中的知识。 collections collections是Python内建的一个集合模块,提供了许…

混合精度训练

混合精度训练 转自:https://zhuanlan.zhihu.com/p/441591808 通常我们训练神经网络模型的时候默认使用的数据类型为单精度FP32。近年来,为了加快训练时间、减少网络训练时候所占用的内存,并且保存训练出来的模型精度持平的条件下&#xff0…

拓扑排序C++

拓扑排序C 几个基本概念的介绍 入度和出度 图中的度:所谓顶点的度(degree),就是指和该顶点相关联的边数。在有向图中,度又分为入度和出度。 入度 (in-degree) :以某顶点为弧头,终止于该顶点的边的数目称为该顶点的…

C++面试常考题——编译内存相关

C面试常考题——编译内存相关 转自:https://leetcode-cn.com/leetbook/read/cpp-interview-highlights/e4ns5g/ C程序编译过程 编译过程分为四个过程:编译(编译预处理、编译、优化),汇编,链接。 编译预处…

C++遍历删除元素

C遍历删除元素 转自:http://zencoder.info/2019/10/11/erase-element-from-container/ 今天看到一个patch fix从std::map中遍历删除元素导致crash问题,突然意识到自己对如何正确地从map等C容器中删除元素也没有很牢固清醒的认知。重新梳理了下这块的正…

关键字库函数

关键字库函数 转自&#xff1a;https://leetcode-cn.com/leetbook/read/cpp-interview-highlights/ej3mx1/ sizeof和strlen的区别 strlen 是头文件<cstring> 中的函数&#xff0c;sizeof 是 C 中的运算符。 strlen 测量的是字符串的实际长度&#xff08;其源代码如下&…

memcpy和memmove的区别以及内存重叠问题

memcpy和memmove的区别以及内存重叠问题 转自&#xff1a;https://www.codecomeon.com/posts/89/ 区别 memcpy() 和 memmove() 都是C语言中的库函数&#xff0c;在头文件 string.h 中&#xff0c;作用是拷贝一定长度的内存的内容&#xff0c;原型分别如下&#xff1a; void…

从头搭建一个深度学习框架

从头搭建一个深度学习框架 转自&#xff1a;Build a Deep Learning Framework From Scratch 代码&#xff1a;https://github.com/borgwang/tinynn 当前深度学习框架越来越成熟&#xff0c;对于使用者而言封装程度越来越高&#xff0c;好处就是现在可以非常快速地将这些框架作为…

关于python import的sys.path路径问题

关于python import的sys.path路径问题 sys.path 先说一下 sys.path 这个变量&#xff0c;该变量需要导入 sys 官方库方可使用&#xff0c;它是一个列表&#xff0c;是当前 python 文件 import 库时会逐个搜索列表中的路径。 初始化 sys.path 从这些位置初始化&#xff1a; …

python pdb调试基本命令整理

python pdb调试基本命令整理 使用简介 启动调试 侵入式 在 py 文件内部设置&#xff1a; import pdb; pdb.set_trace()程序会在运行到这一行时停下来&#xff0c;进入 pdb 交互。 非侵入式 在运行 py 脚本时&#xff1a; python -m pdb main.py程序会在一启动时就进入 pdb 交…

Docker概念理解

Docker概念理解 本文非Docker命令大全&#xff0c;而是对Docker的概念、原理等作说明&#xff0c;适合有一定实操经验后来加深理解。 转自&#xff1a;docker从入门到实践 Docker简介 本章将带领你进入 Docker 的世界。 什么是 Docker&#xff1f; 用它会带来什么样的好处&a…

Dockerfile详解

Dockerfile详解 转自&#xff1a;https://yeasy.gitbook.io/docker_practice/ 使用Dockerfile定制镜像 从刚才的 docker commit 的学习中&#xff0c;我们可以了解到&#xff0c;镜像的定制实际上就是定制每一层所添加的配置、文件。如果我们可以把每一层修改、安装、构建、操…

Dockerfile最佳实践

Dockerfile最佳实践 本文是原作者对 Docker 官方文档中 Best practices for writing Dockerfiles 的理解与翻译。 转自&#xff1a;附录四&#xff1a;Dockerfile 最佳实践 一般性指南和建议 容器应该是短暂的 通过 Dockerfile 构建的镜像所启动的容器应该尽可能短暂&#xf…