從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

Tagged:

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。

  • 您好,


    想請問諸位幾個問題

    1. 您建議的連結"https://doc.kneron.com/docs/#model_training/object_detection_yolov5/"中,第三行有提到tutorial資料夾,想請問這部分相關資料放在哪裡?
    2. 目前依照此網頁"https://officeguide.cc/pytorch-yolo-v5-object-egg-detection-models-tutorial-examples/"的方式,自行產生了一個辨識雞蛋的best.pt檔案,想請問網頁上的方式是否為您所提到的no upsample的model?可否繼續往下進行轉換使用?
    3. 承接第二點,想知道如果要繼續進行轉換並使用,best.pt,是否可以使用export.py轉換成ONNX檔案?會有什麼需要特別注意的地方嗎?

    附上個人所產生的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.

  • edited December 2022

    @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能燒錄的模式。

    想請問,

    1. KneronDFUT的Update to USB BOOT與Update to FLASH BOOT兩者有何區別?還是兩者都必須設定使用?而NEF檔案也必須Update到Flash嗎?有操作步驟或網站可以參考嗎?
    2. 在操作KneronDFUT時,FW Type似乎會從KDP轉成KDP2 Loader,請問兩者有何差別?,使用時有需要特別注意甚麼嗎?要如何在兩者間進行切換?(似乎經常卡在KDP2 Loader階段,無法回到KDP)

    希望能得到您的指教。

    非常謝謝您。


    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架構。

The discussion has been closed due to inactivity. To continue with the topic, please feel free to post a new discussion.