关于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 这么优秀的开源项目,总不会放一些无关的东西在里面吧。而且官方教程中的很多例子都会用到 tools
,configs
这些子目录中的内容,看起来很有用的样子。
**是的,这些东西确实很有用,它相当于官方为我们提供的一些使用 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、注册自定义内容,还不如直接自己写训练流程。澄清了上面几个点之后算是了解了整个项目的基本运作方式,真香。
有问题或者有理解不当的地方欢迎留言交流。