關于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.pswp.cn/news/532509.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532509.shtml
英文地址,請注明出處:http://en.pswp.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…