關于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、注冊自定義內容,還不如直接自己寫訓練流程。澄清了上面幾個點之后算是了解了整個項目的基本運作方式,真香。
有問題或者有理解不當的地方歡迎留言交流。