YOLOX之Windows環境配置
Windows下的安裝配置步驟
-
從github上clone yolox項目到本地磁盤
-
創建新的環境或者使用之前已經創建完成的環境,查看requirements.txt文件中所要求的依賴庫是否都已安裝。
我這里是在conda環境下,使用的之前在用的環境,所以大部分的依賴庫都已安裝完成
-
在YOLOX根目錄下打開新的終端,conda切換到剛才創建的環境下,執行以下命令:
python setup.py develop
如果成功,顯示如下:
-
安裝
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
,安裝完成
-
安裝
apex
按照以下步驟安裝即可,沒有遇到問題:
git clone https://github.com/NVIDIA/apex cd apex python setup.py install
-
測試
從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
這里的解決方法是在train.py中,添加sys路徑,寫在代碼上面:
import sys
sys.path.append("../")
錯誤出現分析
當前出現導包的錯誤,主要有兩點:
- yolox包與yolox.py 文件同名,導包錯誤
- 路徑的錯誤問題,大體就是包內文件相互導入時的問題
這里包的導入相關理解不是特別深刻。請多批評指正。
環境: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)
文件同名,導致的導包錯誤。
如果有類似下面的錯誤,
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等一些操作也調用了這個函數。所以這里我們對這個函數進行修改,以適應自定義的數據集格式以及路徑
- 定義一個全局變量,指向VOCViket文件夾的上一層目錄。或者這里隨便修改,返回值保證為VOCdevkit文件夾的上一層文件夾路徑即可
這個步驟是為了不再復制一遍數據集
-
注意調整數據集中,VOC2007\ImageSets\Main這個路徑下,數據集文件索引的文件名稱。與代碼中對應。或者修改代碼也可以。
-
修改yolox\data\datasets\voc_classes.py 文件中的VOC_CLASS
如果你是自定義的數據集,那么在VOC_CLASS中,修改為自定義的類別
-
修改voc.py中標簽讀取的代碼。
這個部分是我根據自己的數據集進行的處理,請忽略
之前制作的VOC數據集,有從其它數據集中直接拿過來使用的數據。自定義的目標類別有兩類,但是拿過來的數據集中,關於我自定義的一個類別,它們又分了很多小類別。使用時,我是直接把這些小類別統一弄成了一個大類別,寫在了txt文件中。
結束: