目標檢測之YOLOX--Windows系統下的環境配置


YOLOX之Windows環境配置

Windows下的安裝配置步驟

  1. 從github上clone yolox項目到本地磁盤

  2. 創建新的環境或者使用之前已經創建完成的環境,查看requirements.txt文件中所要求的依賴庫是否都已安裝。

    我這里是在conda環境下,使用的之前在用的環境,所以大部分的依賴庫都已安裝完成

  3. 在YOLOX根目錄下打開新的終端,conda切換到剛才創建的環境下,執行以下命令:

    python setup.py develop
    

    如果成功,顯示如下:

    在這里插入圖片描述

  4. 安裝 pycocotools

    根據 安裝pycocotools 安裝,

    a) git clone [https://github.com/cocodataset/cocoapi.git](https://github.com/cocodataset/cocoapi.git)

    b) 進入到PythonAPI文件夾中,執行 python setup.py build_ext install ,出現了如下報錯:

    cl: 命令行 error D8021 :無效的數值參數“/Wno-cpp”

    根據 鏈接【上述問題解決方案】 修改 setup.py文件如下:
    在這里插入圖片描述

    執行 python [setup.py](http://setup.py) build_ext --inplace ,

    執行 python [setup.py](http://setup.py/) build_ext install ,安裝完成

在這里插入圖片描述

  1. 安裝 apex

    按照以下步驟安裝即可,沒有遇到問題:

    git clone https://github.com/NVIDIA/apex
    cd apex
    python setup.py install
    
  2. 測試

    從github主頁的benchmark中下載模型,將模型放在 YOLOX的根目錄下,執行如下命令:

    python .\tools\demo.py image -f exps/default/yolox_l.py -c yolox_l.pth --path .\assets\dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device cpu
    

在這里插入圖片描述

上圖時yoloxl的執行結果,當使用yolox_s時,結果挺差,就不上圖了。

關於導包錯誤:No module named xxx

在windows下的VScode下,嘗試運行train.py,但是顯示報錯No module named yolox

Untitled

這里的解決方法是在train.py中,添加sys路徑,寫在代碼上面:

import sys
sys.path.append("../")

錯誤出現分析

當前出現導包的錯誤,主要有兩點:

  1. yolox包與yolox.py 文件同名,導包錯誤
  2. 路徑的錯誤問題,大體就是包內文件相互導入時的問題

這里包的導入相關理解不是特別深刻。請多批評指正。
環境:win10 + conda+ torch1.7 + vscode

出現問題的位置主要在yolox.models下的文件導包位置,這里對出現上述問題以及解決方法做下記錄

首次出現的問題是:

yolox.py 文件中不能導入同級文件

在這里插入圖片描述
在這里插入圖片描述

解決的方法:

yolo_head.py文件 中,其它同級目錄文件中也可以借鑒, 有 from yolox.utils import xxx ,這里,將添加 utils 包的路徑到 sys.path ,然后直接導包 utils ,原因大概是 yolox包與 同級目錄下的 [yolox.py](http://yolox.py) 文件同名,導致的導包錯誤。

Untitled

如果有類似下面的錯誤,

Traceback (most recent call last):
  File "e:/Code/Git/yolox2/YOLOX/yolox/models/yolox.py", line 14, in <module>
    from yolo_pafpn import YOLOPAFPN
  File "e:\Code\Git\yolox2\YOLOX\yolox\models\yolo_pafpn.py", line 9, in <module>
    from .network_blocks import BaseConv, CSPLayer, DWConv
ImportError: attempted relative import with no known parent package

可以嘗試將包名錢面的 . 去掉

如果仍然出現找不到包的問題,添加上一層,也就是文件所在的包

實際使用中,仍然會出現

ImportError: attempted relative import with no known parent package
  • 這樣的報錯,在報錯的導包語句那里修改,添加該文件的上一層,即包名添加上。如果提示找不到上層包,sys.path添加上層的路徑。

  • 非yolox包下的文件,如果出現導包錯誤的問題,可以添加工程根目錄的相對路徑

    如:voc.py文件中導入voc_classes時出現錯誤,我這樣導入,就可以了:

    ​ from yolox.data.datasets.datasets_wrapper import Dataset

    ​ from yolox.data.datasets.voc_classes import VOC_CLASSES

注意導包時,如果文件與yolox.py同級目錄,那么導入包內的文件要干掉yolox包名

例如:

yolox_head.py 文件中有 from yolox.utils import xxx, 這里通過上一步添加包之后,直接可以從 utils 包中導入,避免出現yolox。

訓練自定義數據集

使用自定義數據集,數據集采用的是VOC格式,兩個類別。官方教程中是為數據添加軟連接。當前環境是Widows,所以需要對代碼進行部分修改,避免數據集重復存放。

自定義VOC數據集添加到工程中

通過代碼回溯,我們找到獲取加載數據集的dataloader是在exp文件中的。而默認是加載coco格式的數據集的。這里通過自定義exp以及修改yolox/data/dataloading.py中的get_yolox_datadir()函數【這里是為了避免再把數據集復制一遍,可以不處理,按照官方教程來】來實現。

  • 自定義expfile,

    根據exps/custom/yolox_voc/yolox_voc_s.py來自定義exp,注意這里修改類別以及網絡尺寸。

  • 在train.py中,命令行解析的位置,修改exp_file的默認值為自定義的expfile,或者命令行中指定

  • 在yolox_voc_s.py文件中,數據集文件夾路徑是通過 get_yolox_datadir()函數 來獲取的。而且后面eval等一些操作也調用了這個函數。所以這里我們對這個函數進行修改,以適應自定義的數據集格式以及路徑

    1. 定義一個全局變量,指向VOCViket文件夾的上一層目錄。或者這里隨便修改,返回值保證為VOCdevkit文件夾的上一層文件夾路徑即可

    這個步驟是為了不再復制一遍數據集

  • 注意調整數據集中,VOC2007\ImageSets\Main這個路徑下,數據集文件索引的文件名稱。與代碼中對應。或者修改代碼也可以。

  • 修改yolox\data\datasets\voc_classes.py 文件中的VOC_CLASS

    如果你是自定義的數據集,那么在VOC_CLASS中,修改為自定義的類別

  • 修改voc.py中標簽讀取的代碼。

    這個部分是我根據自己的數據集進行的處理,請忽略

    之前制作的VOC數據集,有從其它數據集中直接拿過來使用的數據。自定義的目標類別有兩類,但是拿過來的數據集中,關於我自定義的一個類別,它們又分了很多小類別。使用時,我是直接把這些小類別統一弄成了一個大類別,寫在了txt文件中。


結束:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM