從0開始學習KL520 AI訓練
您好,
目前敝人想透過Yolo v3製作新的AI模組,並透過UART燒錄KL520的FLASH,
根據文檔提示,得知燒錄的flash_bin會包含以下四個BIN檔案,
├── boot_spl.bin // bool spl bin file
├── fw_ncpu.bin // SCPU FW bin file (generated by Keil)
├── fw_scpu.bin // NCPU FW bin file (generated by Keil)
├── models_520.nef // model information(copied from [host_lib]/input_models/KL520/[app]/)
想請問前三者BIN檔,我該如何產生或該參照哪篇文章,亦或者可以直接使用KL520 SDK內的BIN檔?
想請問NEF檔,我可以參照Firmware SDK / KL520 SDK / v1.5.0.0 / 6. build ...所產生的nef檔來使用?
或是我必須按照此篇文章https://doc.kneron.com/docs/#model_training/OpenMMLab/YoloX/所寫之內容操作?
亦或是有其他方法或文章能參照?
希望您能給予協助,
非常謝謝您。
Best regards,
FAE Pin 陳品笙
隆電股份有限公司 LONG TRUMP CORP.
114 台北市內湖區內湖路一段250號11樓
Mobile: 0987-560-583
Tel: 886-2-26275966 ext.220
E-mail: pin_chen@longtrump.com.tw
The discussion has been closed due to inactivity. To continue with the topic, please feel free to post a new discussion.
Comments
Hi Pin,
-boot_spl.bin在KL520 SDK裡面,可以直接使用 (在KL520_SDK的utils/bin_gen/flash_bin裡)
-fw_ncpu.bin和fw_scpu.bin在Kneron PLUS的firmware資料夾裡面,如果要改firmware,需要下載Keil並購買Keil的license,就可以用Keil改KL520 SDK的firmware後build新的fw_ncpu.bin和fw_scpu.bin
-models_520.nef在Kneron PLUS的models資料夾裡面。如果要用自己的模型,可以參考您放上的連結去訓練及轉換
用UART燒到KL520 flash的kdp2_flash_image.bin還有包含更多檔案,您可以參考這個連結的 3.3 Firmware Binary Generation: Flash Management - Document Center (kneron.com)
-fw_loader.bin (也在Kneron PLUS裡面)
-prog_fw_loader_flash-boot.bin (在KL520_SDK的utils/JLink_programmer裡)
@Pin_Chen
HI Pin,
因為您是 從0開始學習KL520 AI訓練 ,建議您也可以從這個地方 (以下連結) 開始下手。
https://doc.kneron.com/docs/#model_training/object_detection_yolov5/
您使用 KL520 可以使用 (YOLOv5s (no upsample) model。
您好,
想請問諸位幾個問題
tutorial
資料夾,想請問這部分相關資料放在哪裡?附上個人所產生的best.pt檔案給諸位參考。
希望您能給予協助,
非常謝謝您。
Best regards,
Pin 陳品笙
@Pin_Chen
HI Pin,
1.關於第一點,您可以從資料夾 Kneron Toolchain docker 的資料夾內找到,路徑位置為: /workspace/ai_training/detection/yolov5/yolov5。
在您的 case, 如何使用 Kneron ToolChain docker 您可以參考: https://doc.kneron.com/docs/#toolchain/manual_1_overview/ (1.1. Introduction ~ 1.3. Toolchain Docker Deployment)
2. 您提供的此網頁 (https://officeguide.cc/pytorch-yolo-v5-object-egg-detection-models-tutorial-examples/) 並非 Kneron 的 training flow,所以不是我提到的 yolov5s-noupsample model,所以建議您不要往下使用,承第一點,kneron flow yolov5s 的訓練模型與模型的部屬流程可以在 /yolov5/yolov5/tutorial/tutorial.ipynb 裡面找到。
3.承第二點,建議您使用 Kneron 的 AI training flow 再往下 Save and Convert to ONNX。
如果您使用的不是 Kneron 的 AI training flow 轉出來的 model 後續您可能得自行編寫 model 的 postporcess。
您好,
根據您的建議,從此https://doc.kneron.com/docs/#model_training/object_detection_yolov5/網址開始下手,
使用的原先內部提供的模型與yaml檔練習,但在Save and Convert to ONNX的Exporting ONNX model in the PyTorch 1.7 environment階段卻發生Error,如下圖
請問我該如何修正?
謝謝您。
Best regards,
陳品笙 Pin.
@Pin_Chen
HI Pin,
不好意思,晚回了,看您的截圖是在 Kneron Toolchain docker 內環境,您可以進入下一層的 yolov5 這個資料夾內 (/workspace/ai_training/detection/yolov5/yolov5) 再下指令 (e. g. python ../exporting/yolov5_export.py --data data/pretrained_paths_520.yaml) 下指令之前,記得在同一層資料夾底下要有一個 best.pt ,以範例為例,將會是 yolov5s-noupsample 的 best.pt (/workspace/ai_training/detection/yolov5/yolov5/best.pt), 放好了就可以順利執行且應該能解決您的問題。
您好,
後來,我依照您的建議網址(https://doc.kneron.com/docs/#model_training/object_detection_yolov5/)自行訓練了一個模組。
使用的是labelimg,得到txt資料,
訓練時由於電腦負荷緣故將Train的程式碼
CUDA_VISIBLE_DEVICES='0' python train.py --data coco.yaml --cfg yolov5s-noupsample.yaml --weights '' --batch-size 64 的batch-size 修改為12,
最後先簡單製作出了辨識雞蛋的best.pt 與轉換的ONNX檔案。
雖然使用過文中的inference段程式碼,稍微測試過功能是可行的。
但仍怕過程中有所問題,故附上檔案給您檢查。
接著是,我將上述的ONNX檔案,打算轉成NEF檔案。
參照網址是https://doc.kneron.com/docs/#520_1.5.0.0/getting_start/#6-build-new-model-binary-based-on-mobilenet-v2-image-classification
但卻不太確定是否需要做6.2 Model editing "remove softmax"這個動作。
嘗試該動作時,遇到以下問題
當直接略過該步驟,嘗試6.3 Model compile flow步驟時,
似乎也發生部分錯誤,如下圖
希望能獲得您的引導,
盡快讓我製作出nef檔案,
非常謝謝您。
Best regards,
陳品笙 Pin.
Hi Pin_Chen,
看過您提供的 "PRETRAINED_PATH_KL520.yaml" 檔了,這裡面因為您的 class 只有一個(雞蛋),所以 nc: 80 需要改成 nc:1。
因為您使用的 class 只有 1 (egg),所以您使用的 coco.yaml 可能也需要一起改 (nc:80 改成 nc:1, names: ['egg'])。
都修改後,最後在下訓練指令:
CUDA_VISIBLE_DEVICES='0' python train.py --data coco.yaml --cfg yolov5s-noupsample.yaml --weights '' --batch-size 16
接著是您提供的 ONNX (yolov5s-noupsample.onnx),
後續的動作您可以參考 (https://doc.kneron.com/docs/#model_training/object_detection_yolov5/, Converting onnx by toolchain) 使用
python pytorch_exported_onnx_preprocess.py output.onnx output_optimized.onnx
(不用使用python -m onnxsim input_onnx_model output_onnx_model
) 得到一個 output_optimized.onnx,得到這個 .onnx 之後就可以順利過 Kneron ToolChain 並得到 nef 了。這裡還有連結可以給您參考:
https://www.kneron.com/forum/discussion/comment/1141#Comment_1141
您好,
謝謝您的檢查,重新訓練並使用PYTHON程式後所獲得的output_optimized.onnx如附件所示,給您檢查是否符合轉換成NEF檔的規則。
附件中的yolov5-tiny_opt.onnx檔是我把output_optimized.onnx在經過onnx2onnx.py轉換後得出的檔案,不確定是否需要執行這樣的轉換,
希望您能協助檢查與解答。
接著是轉換NEF檔過程中所產生的問題,根據您所給予的參考連結(https://www.kneron.com/forum/discussion/comment/1141#Comment_1141),他人會使用Kneron Toolchain WebGUI來進行轉換,但我在網路上並無搜索到相關的網站,想請問您,我的狀況是否合適使用Kneron Toolchain WebGUI來進行,是否會比較簡單,如果合適,是否能請您提供網址或連結至網站的方式?
而目前自己在嘗試轉換NEF的過程,是依照此連結(https://doc.kneron.com/docs/#520_1.5.0.0/getting_start/)的6.3項去執行,卻發生錯誤無法正確生成NEF檔案(錯誤如附圖),目前所使用的batch_compile_input_params.json檔案如附件所示。想請問是否有需要修改之處?或有任何特別需要注意的地方?
希望您能給予協助,非常謝謝您。
Best regards,
陳品笙 Pin.
Hello,
WebGUI的部分可以參考連結的說明,會需要先在docker中啟動程序後再開啟瀏覽器輸入ip位址
https://doc.kneron.com/docs/#toolchain/appendix/toolchain_webgui/
您好,
謝謝您的提供的WebGUI連結說明。
目前我依照https://ithelp.ithome.com.tw/articles/10264674此網站的說明,
轉換出了模型的NEF檔案,如附件。
不確定是否符合之後輸入至KL520的要求,還希望您能協助檢查與指教。
再者,目前使用KL520的USB Dongle與之後目標是將檔案透過UART燒錄至其他帶有KL520的板子上。
目前希望能透過KL520的USB Dongle(搭配鏡頭)對模型進行基本測試,再轉換成UART能燒錄的模式。
想請問,
希望能得到您的指教。
非常謝謝您。
Best regards,
陳品笙 Pin.
Hello,
能夠轉出NEF即代表成功將模型轉換成KL520能支援的格式,但執行推論時須配合模型訓練、轉換過程中的相關設定,因此需請你確認相關參數來比對答案與原始模型是否有差異
USB BOOT與FLASH BOOT的差異在於FW的取得來源,FLASH BOOT的情況下需要先將FW燒錄至flash後,開機時再由flash來取得,而USB BOOT則是開機後系統會待命等待指令,直到由USB傳入要運行的FW後再繼續工作。相關API操作可以參考連結
https://doc.kneron.com/docs/#plus_c/introduction/run_examples_enterprise/#4-update-kdp2-firmware-to-kdp2-flash-boot
KDP為舊版本的SDK架構,新版本在開發上預設採取USB BOOT,所以燒錄時只會先在flash內燒入KDP2 Loader,也因為KDP是舊架構,我們不鼓勵使用者從dkp2燒回KDP。
也提醒,因為KL520有多種使用模式,USB BOOT僅限於有HOST透過USB連接的場景下使用(如dongle接在PC上),除此之外的產品請依據實際應用來選擇需要的BOOT架構。