YOLOX目標(biāo)檢測之入門實戰(zhàn)-win10+cpu運(yùn)行YOLOX
YOLOX 是曠視開源的高性能檢測器。曠視的研究者將解耦頭、數(shù)據(jù)增強(qiáng)、無錨點以及標(biāo)簽分類等目標(biāo)檢測領(lǐng)域的優(yōu)秀進(jìn)展與 YOLO 進(jìn)行了巧妙的集成組合,提出了 YOLOX,不僅實現(xiàn)了超越 YOLOv3、YOLOv4 和 YOLOv5 的 AP,而且取得了極具競爭力的推理速度。
前言: 不少開發(fā)者對 YOLOX 很感興趣 , 希望在自己的筆記本安裝測試,哪怕速度慢一些, 但筆記本一般都沒有配置帶CUDA 核心的GPU
YOLOX 在CPU 環(huán)境中碰到的問題及解決方法 , 總結(jié)了一下, 大部分是缺少判斷GPU 導(dǎo)致的cuda 類的錯誤 !
一、 配置基礎(chǔ)環(huán)境
本機(jī)的環(huán)境:
操作系統(tǒng) | Win10 |
Python版本 | 3.8.10 |
Pytorch版本 | 1.12+cpu |
Cuda版本 | None |
1.1 下載源碼
GitHub地址:https://github.com/Megvii-BaseDetection/YOLOX,下載完成后放到D盤根目錄
然后執(zhí)行下面的命令,
1) 安裝所有的依賴包。
pip install -r requirements.txt
錯誤提示 : error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsof
t C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/
選擇合適的版本, (注意, 如果是 windows7 ,則需要找到對應(yīng)的老版本, 如 :vs_BuildTools_2019)
完成安裝后,再執(zhí)行
pip install -r requirements.txt
2) 執(zhí)行安裝 yolox setp 命令
python setup.py install
二、 驗證預(yù)測環(huán)境
下載預(yù)訓(xùn)練模型,本文選用的是YOLOX-s,下載地址:https://github.com/Megvii-BaseDetection/YOLOX/releases/download/0.1.1rc0/yolox_s.pth。
下載完成后,將預(yù)訓(xùn)練模型放到工程的根目錄,如下圖:
然后驗證環(huán)境,執(zhí)行:
python tools/demo.py image -f exps/default/yolox_s.py -c ./yolox_s.pth --path assets/dog.jpg --conf 0.3 --nms 0.65 --tsize 640 --save_result --device cpu
打開提示中的圖片文件
/YOLOX_outputs\yolox_s\vis_res\2022_10_20_17_36_48\dog.jpg
看到上圖說明預(yù)測的環(huán)境沒有問題了。(訓(xùn)練的環(huán)境更復(fù)雜)
三、 配置訓(xùn)練所需環(huán)境
2.1 準(zhǔn)備數(shù)據(jù)
下載地址 :http://www.newxtc.com/download.php?id=10
將下載的 VOCdevkit.zip 解壓縮到 yolox根目錄\yolox\data\
2.2 修改類別
1) 文件路徑:exps/example/yolox_voc/yolox_voc_s.py,本次使用的類別有2類,所以將num_classes修改為2
2) 打開yolox/data/datasets/voc_classes.py文件,修改為自己的類別名:
3) 修改一個BUG: 打開yolox/data/datasets/voc.py文件,找到 _do_python_eval 方法
修改前 : annopath = os.path.join(rootpath, "Annotations", "{:s}.xml")
問題導(dǎo)致,目錄被截斷, 始終輸出 {:s}.xml
修改后: annopath = os.path.join(rootpath, "Annotations") + "\{:s}.xml"
4)
2.3 修改數(shù)據(jù)集目錄
文件路徑:exps/example/yolox_voc/yolox_voc_s.py,
找到 wait_for_the_master 方法
data_dir修改為“D:\YOLOX-main\yolox\data\VOCdevkit”,
image_sets刪除2012的,最終結(jié)果如下:
接著往下翻,找到 get_eval_loader ,如下圖:
2.4 修改tools/train.py cpu 參數(shù)
執(zhí)行訓(xùn)練腳本:
python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 1 -b 4 --fp16 -c yolox_s.pth
torch 報錯
在tools/train.py中修改 1 個地方,
2.5 修改 yolox/core/train.py cpu 參數(shù)
打開 yolox/core/trainer.py 文件
1)找到 train_one_iter方法,
執(zhí)行訓(xùn)練腳本:
python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 1 -b 4 --fp16 -c yolox_s.pth
數(shù)據(jù)預(yù)加載部分報錯
2)找到 train_one_iter方法,根據(jù)顯卡設(shè)備數(shù)判斷是否加載預(yù)加載方法
3) 找到 after_iter 方法, 根據(jù)顯卡設(shè)備數(shù)判斷是否執(zhí)行 random resizing 方法 :
2.6 修改 voc_evaluator.py cpu 參數(shù)
打開YOLOX/evaluators/voc_evaluator.py 文件
1) 找到 evaluate 方法, 判斷 是否為 GPU ,將 tensor_type = torch.cuda.FloatTensor
修改為 tensor_type = torch.FloatTensor
2) 同方法中, 往下翻頁, 判斷 是否為 GPU , 將statistics = torch.cuda.FloatTensor(xxx)
修改為statistics = torch.FloatTensor(xxx)
四、 訓(xùn)練數(shù)據(jù)及驗證結(jié)果
1 開始訓(xùn)練數(shù)據(jù)(CPU速度慢,2天左右)
執(zhí)行訓(xùn)練腳本:
python tools/train.py -f exps/example/yolox_voc/yolox_voc_s.py -d 1 -b 4 --fp16 -c yolox_s.pth
CPU 版本根據(jù)機(jī)器配置不同速度不同,本例中跑一個 epoch 大概為 10分鐘, 300個 epoch 為 50個小時
2 驗證結(jié)果
執(zhí)行 demo 腳本
python tools/demo_air.py image -f exps/example/yolox_voc/yolox_voc_s.py -c ./yolox_air.pth --path assets/aircraft_107.jpg --conf 0.8 --nms 0.65 --tsize 640 --save_result
python tools/demo_air.py image -f exps/example/yolox_voc/yolox_voc_s.py -c ./yolox_air.pth --path assets/oiltank_406.jpg --conf 0.8 --nms 0.65 --tsize 640 --save_result
查看輸出結(jié)果 YOLOX_outputs\yolox_voc_s\vis_res\xxxx_xx_xx\*.jpg