YOLOv5 on KL720 toolchain
嗨,大家好
Dongle PLUS的耐能範例nef物件偵測模型可以使用,不過因為我要訓練自己的類別,因此重新訓練yolov5s模型,也訓練成功,可以用GPU推論正常。
然後使用toolchain要量化成nef,可是發現卡在section 3 驗證模型層的部份!!!!!
現在KL720有支援YOLOv5嗎? 那有什麼層要替換嗎?! 我看toolchain kl720文件有支援concat,可是只有支援concate axis=-1,我用官方yolov5s訓出來的最後一個concat是axis=1,是這個原因嗎?
那我應該去怎麼修改呢?模型在附件。
=================================================
對了,我用的是YOLOv5s的6.0,因為最近改版,是這個原因嗎?
==================================================
Tagged:
The discussion has been closed due to inactivity. To continue with the topic, please feel free to post a new discussion.
Comments
onnx模型跟權重在這裡
Hello,
有關KL720支援的op可以參考章節2.3的列表 http://doc.kneron.com/docs/#toolchain/manual/#2-toolchain-docker-overview
看了你的onnx後發現了幾個問題可能要先修正
是的,我就是參考章節2.3才發這篇文的,因為看到有支援,可是跳出錯誤。
不好意思,我照片中的output2.onnx在這裡,我是使用toolchain裡面的指令
python /workspace/scripts/convert_model.py onnx /data1/yolov5s.onnx /data1/output2.onnx
這個跟你指的3.1.5是一樣的吧?!
因此我的問題是onnx轉換後,還是會產生這個錯誤,再麻煩協助解決了,謝謝。
Hello,
看了你的output2.onnx發現裡面還是有許多不支援的op,如resize, shape, reshape等,最後方一些不支援的部分因為沒有其他的神經網路op,所以可以整個砍掉,待推論結束後在cpu上補做即可,但模型中人有一些resize的部分可能先處理後才能夠執行toolchain後續的步驟
嗨,請問一下因為我是使用官方的yolov5s,不過我是看你們耐能文件上好像有支援yolov5s,所以看這狀況是不支援直接訓完的模型,還需要做修改嗎?!
好奇你們之前遇到這狀況是怎解決?
如resize, shape, reshape等都移除,然後推論結束後再到cpu上補做<========這流程是yolov5跑在耐能上固定都這樣做嗎?
有可能因為我訓官方yolov5s是用--img 256 的方式去訓,這個關係影響的嗎?
所以我需要用預設--img 640的方式重訓嗎?
Hi,
耐能的範例yolov5s是有針對模型的的layer作調整的,有關yolov5s的模型,過去有相關的討論串可以提供給你參考,可以用用看裡面提到的模型版本,不過當時toolchain僅支援opset = 9,現在的話請一律輸出opset =11,否則toolchain執行時會有錯誤
我訓練的是YOLOv5s的6.0版本,你貼的這串討論串上面寫說只支援2.0的版本~~~~~?
因此我要不重新訓練舊版2.0的YOLOv5s,要不就研究6.0怎麼應用在KL720?
可是剛剛我發現2.0的預訓練模型已經移除了......
那這樣我先訓練YOLOv5s的5.0看看,看看是否能在KL720上推論,不然6.0可能太新,還是有些東西要修。
對了,上面提供過的6.0版本yolov5s的output2.onnx 模型,我有嘗試調整最後一層的concat axis=1 變成 concat axis =-1,
然後現在錯誤變成這樣,好像還是像你說的reshape的關係,可是我要怎麼移除reshape層?
是reshape後面這些直接移除嗎....?還是說reshape我要用什麼去替代它?
是的,截圖中那些都要移除,相關工作在你收到三個輸出推論結果後再補做即可。
也提醒,yolov5s中的v4.0~v6.0用的activation是silu,耐能的NPU都不支援,若要使用v4.0~v6.0的話需要先將所有activation改成leakyRelu才行。
請問按照tutorial.ipynb
訓練出來 yolov5 on kl720 的模型出現明顯的類別判斷錯誤
例如應該是汽車判斷成下一個類別摩托車
可能是那個步驟的問題 ?
訓練結果如附檔
謝謝!
跑原來的520流程
除了出現 https://github.com/ultralytics/yolov5/issues/1552 這個issue
用https://github.com/ultralytics/yolov5/issues/1552#issuecomment-747832017
解決問題之外
訓練出來的yolov5模型
也一樣出現類別偵測錯誤 (shift by 1)
Hello,
偵測結果的類別會 shift by 1推測可能是類別index有偏移,建議可以再次確認類別表。
或是試著將訓練的類別降至一種,確認相關設定無誤後再回到原本預期的類別數量
另外也確認一下,所提供的結果照片是透過onnx直接推論,還是已經在KL720上實際執行的結果呢?
嗨 Ethon
我是上傳在ubuntu 版本 toolchain docker 裡的ai_training 目錄 到 google drive 用 colab 模擬
執行 /ai_training/detection/yolov5/yolov5/tutorial/tutorial.ipynb
訓練完模型, 測試集圖片推論正常,類別正確
透過onnx直接推論的(shift by 1)
Thanks
@Ethon Lin 請問一下 我已經找到之前你們模型的yolov5版本,我從官網的教學裡面的yolov5下去訓的,資料夾內inference.py 測試模型推論正常。
確實也可以經過docker toolchain量化完成,形成nef
可是現在遇到一個狀況,經過toolchain量化出來的nef,使用dongle的KL720DemoCamAppYoloInference.py腳本推論會跑出這個錯誤。
這是我toolchain量化的腳本
@Ethon Lin 這邊提供用toolchain轉換後的onnx跟nef
Hello,
目前examples內的yolo範例主要是針對耐能所提供的yolo NEF做處理,包含model id, post process function 都有相當的限制
若使用的是我們所提供的training script,建議改使用範例/kneron_plus/python/example_model_zoo/KL720KnModelZooGenericInferenceYolov5.py,也提醒,模型相關的參數如 model_id, image resolution, model input dimension, class list等相關參數需要自行針對修改
另外,此篇文章主要是要討論模型轉換的部分,若有KL720推論相關的問題,歡迎到KL720專區開新的討論串。
已經可以在Dongle上跑了,可是遇到一個狀況,我確定只是單純用這範例訓出來的模型會這樣,用預設PLUS的模型不會這樣。
問題就是,我用tutorial.ipynb的訓出來的模型執行到其中的這段之後
!python ../exporting/yolov5_export.py --data ../yolov5/data/pretrained_paths_720.yaml
然後會產生一個yolov5s.pt檔,之後再下
!python inference.py --data data/pretrained_paths_720.yaml --conf_thres 0.6 --img-path tutorial/demo/yolo_demo.jpg --save-path tutorial/demo/out.jpg
產生出來的圖片框框都會像是沒經過NMS耶....................同一個物件有兩三個框框................
我以下圖片是跑在Dongle上,也是這樣,可是我用Dongle預設的nef,不會有這種情況,請問為啥這版訓出來的模型會有這種狀況
另外我的類別只想要三種。
!python yolov5_generate_npy.py --input-h 256 --input-w 256
所以也有可能是這行的原因嗎? 那我應該要怎麼改 yolov5_generate_npy.py 檔案呢?
麻煩你們協助了,真的謝謝。
建議可以先確認訓練過程中的log數據皆正常合理,
如果出現不合理的log數據, 可以根據log數據中的發現, 對相應的訓練參數做嘗試與修改(加大訓練數據, 修正數據, 加大epoch ... etc).
Hi
我去官網下載教育版的yolov5 按照裡面的tutorial步驟來training 720
產出yolov5s-coco128.pt
測試集 類別正常
轉換yolov5s-coco128.onnx
簡化yolov5s-coco128_simply.onnx
onnx模型推論 類別正常
Thanks~