litehrnet to onnx模型轉換問題
操作系統為ubuntu18.04,以下都是在toolchain最新的v0.18.0版本裡面操作,在使用litehrnet之前,有照著http://doc.kneron.com/docs/#model_training/regression/ 此篇官方教學進行使用前設定,但在跑litehrnet to onnx模型轉換的code時發生錯誤
附件為跑
kneron-mmpose/tools/deployment/pytorch2onnx_kneron.py以及libs/ONNX_Convertor/optimizer_scripts/pytorch2onnx.py的使用指令以及相對應的錯誤
請問是有需要修改哪個地方的程式嗎?
希望您們能幫我解惑,拜託您們了。
The discussion has been closed due to inactivity. To continue with the topic, please feel free to post a new discussion.
Comments
您好:
不好意思,可能我的資訊提供的不夠多,導致您可能不太知道我問題在哪裡,所以補充說明如下:
要轉換的litehrnet code 是kneron-mmpose/configs/body/2d_kpt_sview_rgb_img/topdown_heatmap/coco/litehrnet_30_coco_256x192.py(無修改)
使用的checkpoint檔案為litehrnet30_coco_256x192-4176555b_20210626.pth
感謝您
@盧俊佑
Hi 俊佑,
您可能也要提供一下您的 .pth,這樣方便重現您的錯誤訊息,並找出原因。
您好:
我寄出之後跳出如下訊息,請問這樣您會收到嗎?
Your comment will appear after it is approved.
好的,沒問題,不好意思.pth檔案沒辦法丟上來,我把我下載的網址給您,再麻煩您了。
https://mmpose.readthedocs.io/en/latest/topics/body%282d%2Ckpt%2Csview%2Cimg%29.html
點開之後按ctrl+f尋找litehrnet,我是載紅色圈起來的那一個的ckpt。
感謝您
@盧俊佑
Hi 俊佑,
這裡可以看的到您的留言喔。
您好:
請問上述問題原因為何?還是我需要再提供什麼資料?
Best Regards 俊佑
@盧俊佑
Hi 俊佑,
不好意思讓您久等了,這裡幫您確認過,因為您提供的 ckpt(.pth) 只含 model weight,不含 model structure,所以必須提供一個 config,讓 .pth 順利轉成 onnx。
根據參考連結:http://doc.kneron.com/docs/#model_training/regression/
在您的 case,您提供第一張圖上的指令是下錯的,不是使用 (pytorch2onnx_kneron.py),您提供的第三張圖上的指令也是下錯的,不是使用 (pytorch2onnx.py),
是使用,python export2onnx.py ${CONFIG_FILE} ${CHECKPOINT_FILE} 去產生出 onnx ,請參考連結的 Convert to ONNX。
產生出 onnx 之後,您可以參考: http://doc.kneron.com/docs/#toolchain/python_api/ 去進一步的對 onnx optimizers 最後再轉成 .nef。
您好:
我想請問一下,CONFIG_FILE是不是副檔名是.cfg的檔案,像yolov3-tiny.cfg就是yolov3-tiny的model structure之類的?
但我在網路上找很久都沒有litehrnet_30_coco_256x192的cfg檔都只有.py檔,
如果您那邊有的話,方便麻煩您提供一下嗎?還是有什麼方法可以litehrnet_30_coco_256x192.py將轉成cfg檔?
不好意思,因為是第一次使用貴公司的產品,我對這方面又不太熟,所以問題有比較多且有的問題可能比較無腦,請您多多包涵,感謝您
Best Regards 俊佑
@盧俊佑
Hi 俊佑,
沒事的,不用覺得不好意思,提出問題、解決問題可以使 Kneron 更好甚至可以幫助到任何使用者。
Q. CONFIG_FILE 是不是副檔名是 .cfg 的檔案。 A.因您是想使用 Kneron toolchain docker 上提供的 ai_training\regression,所以 config_file 指的是 config 內的 .py (e.g. ai_training\regression\litehrnet\configs\top_down\lite_hrnet\*\*.py),其中您的 config_file 會根據您的 checkpoint (.pth) 去做選擇。
您好:
我有依照您所說,改用python export2onnx.py ${CONFIG_FILE} ${CHECKPOINT_FILE},詳細指令如下圖
CONFIG_FILE是使用ai_training\regression\litehrnet\configs\top_down\lite_hrnet\coco\litehrnet_30_coco_256x192.py
CHECKPOINT_FILE是使用提供給您參考的.pth檔
但還是會出現如下圖之錯誤
所使用的kneron_toolchain版本是最新的v0.18.0,請問是我指令有打錯嗎?因為正常來講有CONFIG_FILE以及CHECKPOINT_FILE應該就可以轉成onnx,而CONFIG_FILE有跟您確認過是使用ai_training\regression\litehrnet\configs\top_down\lite_hrnet\coco\litehrnet_30_coco_256x192.py應該是沒問題才對,CHECKPOINT_FILE的部分,是從lite_hrnet官方github下載下來的.pth檔應該也沒問題才對。
還是貴公司有提供產品的教育訓練嗎?如果有的話,方便讓我參加嗎?
我想說這樣可以減少書信往來的時間,加速開發時程,
或者是我方便親自過去貴公司當面請教您嗎?
@盧俊佑
Hi 俊佑,
我這邊是有辦法利用指令 export 出 onnx 的,您可能需要提供一下您的使用步驟給我們看一下。
但您可以參考:https://github.com/kneron/kneron-mmpose 內的 Totorial-Kneron Edition。
或者是 docker 上面 ai_training/regression/litehrnet/tutorial 資料夾內的 tutorial。
您好:
我是在docker裡面按照官方教學流程做的(參考網址:http://doc.kneron.com/docs/#model_training/regression/),
還是您方便提供您的操作步驟?讓我看一下少了哪個步驟,
我torch、torchaudio、torchvision都是用toolchain原先有的,mmcv-full也是用1.3.3版,還是出現一樣錯誤
還是我是需要將整個docker裡的workspace資料夾都拉到本機來操作?
Best Regards 俊佑
您好:
附件為我litehrnet2onnx的流程,一個是pdf檔,一個是ppt檔,請您幫我看一下少了哪些步驟,麻煩您了
Best Regards 俊佑
您好:
請問我還有需要提供什麼東西協助您分析嗎?
Best Regards 俊佑
@盧俊佑
Hi 俊佑,
您嘗試一下將 mmpose_replacement 內的 post_transforms.py 增加以下 function,再把 post_transforms.py 與 miniconda
/lib/python3.7/site-packages/mmpose/post_processing 做相對應的更換
並修改 models/backbones/litehrnet_no_shuffle_no_avgpool.py、configs/top_down/lite_hrnet/coco/litehrnet_30_coco_256x192.py
將 models/backbones/litehrnet_no_shuffle_no_avgpool.py 中的
@BACKBONES.register_module() 改為 @BACKBONES.register_module(force=True)
將 configs/top_down/lite_hrnet/coco/litehrnet_30_coco_256x192.py 中的
'TopDownSimpleHead' 改為 'TopdownHeatmapSimpleHead'
這樣應該就可以順利生成 onnx 檔了。
提醒您,因為這個是較舊的文件,已經準備 deprecated,建議您不繼續往下使用。
您好:
問題一:請問修改 models/backbones/litehrnet.py、configs/top_down/lite_hrnet/coco/litehrnet_30_coco_256x192.py,
是要修改litehrnet.py和litehrnet_30_coco_256x192.py的哪個部分?除了這個我其他的都修改完畢了
問題二:那請問之後貴公司的產品是都不會支援litehrnet了嗎?還是會更新litehrnet的文件或教程?
問題三:假設不支援litehrnet的話,有關於人體姿態偵測的部分,請問KL720還有支援哪些模型?
Best Regards 俊佑
@盧俊佑
Hi 俊佑,
問題一,只要改兩個.py 就可以了,不好意思我的描述有打錯,已經更正了。
問題二,目前 litehrnet 是準備 deprecated 了沒錯,目前不會更新 litehrnet 相關文件與教程。
問題三,關於人體姿態偵測的部分,之前只有 litehrnet,在未來有規劃提供其他 soultion。
至於 KL720 支援哪些模型您可以參考:http://doc.kneron.com/docs/#toolchain/manual/ (2.3 Supported operators : Table 1.2 shows the list of functions KDP720 supports base on ONNX 1.6.1.)
只要 onnx model structure 內沒有表格以外的 operators 都是支援的。
您好:
感謝您,我已經順利將litehrnet轉成onnx模型了,
不過我想請問一下有關於貴公司kneron-toolchain網頁版(http://doc.kneron.com/docs/#toolchain/toolchain_webgui/)的問題
問題一:請問下圖的onnx file欄位是直接放我透過export2onnx.py導出來的onnx模型嗎?還是要放透過ONNX_Convertor優化過後的onnx模型?
問題二:請問我要從哪裡才可以查看到設備的model ID以及version,要放到上圖的相對應欄位用的?
問題三:請問上圖中的preprocess code的部分有需要隨著不同的onnx模型而修改嗎?還是就一份code通用?
問題四:請問上圖中最下面的quantization folde欄位是要放哪一個資料夾?
Best Regards 俊佑
@盧俊佑
Hi 俊佑,
很高興您能順利轉成 onnx model。
問題一,
只要基本上是符合 onnx format 的 model 都可以,不一定需要透過 ONNX_Convertor 優化過後的 onnx model。
問題二,
model ID 可以是使用者自行填入的,因在同一個 hardware platform 內可以同時放許多模型,執行時會透過 model ID 來執行相對應的模型。
version 是 model 的版本,讓使用者方便記錄,這樣方便對 model 進行版本控制。
參考連結:http://doc.kneron.com/docs/#toolchain/manual/ (3.2 IP Evaluation)
問題三,
preprocess_func 是使用者根據自己模型的需求而做修改,所以會依據模型的不同,有不同的 preporcess。
因為要將圖片轉換成模型需要的格式送進模型推論,但是如果你用 Kneron 的框架 (Kneron OpenMMLAB) 基本上這邊可以照著用就可以了。
參考連結:https://www.kneron.com/tw/support/education-center/ (裡面有 step by step)
問題四,
那個是要利用圖片對 model 做量化的資料夾,會根據您的 model 與應用有不同的圖片需求。
對於量化的部分您可以參考:http://doc.kneron.com/docs/#toolchain/manual/ (4.1 Quantization)
您好:
問題一:
請問我紅框1裡面的model_id以及version有填錯嗎?
是根據您提供給我的參考連結:http://doc.kneron.com/docs/#toolchain/manual/ (3.2 IP Evaluation)進行填入的
問題二:
我紅框1的onnx_file是使用我根據您此篇所提供的方法,修改完所產生出的litehrnet_30_coco_256x192.onnx,
因為是用Kneron-toolchain轉換Kneron原有的模型,所以這樣應該算是用Kneron 的框架,
因此我只修改紅框2內的cv2.resize,我有試過將大小改成模型的大小或圖片的大小,但都還是轉換.nef檔失敗,
錯誤訊息如紅框4內所示,請問原因為何?還是有需要對preprocess code進行其他修改?
問題三:
我紅框3內放的img_qut資料夾裡面有10張大小720*1280的圖片,
請問圖片是要放跟模型差不多大小的?還是可以放任意大小?
再麻煩您為我解惑。
Best Regards 俊佑
@盧俊佑
Hi 俊佑,
問題一
您的 model_id 與 version 是沒有填錯的,這些都是使用者可以自由填寫的。
問題二、問題三
您是否可以提供一下您的 litehrnet_30_coco_256x192.onnx 與 img_qut 資料夾,方便確認原因。
您好:
附件之壓縮檔內有包含litehrnet_30_coco_256x192.onnx與 img_qut 資料夾,
請您過目。
Best Regards 俊佑
您好:
請問還有需要提供甚麼資料協助您分析嗎?
Best Regards 俊佑
@盧俊佑
Hi 俊佑,
不好意思,讓您久等了。
問題二
造成紅框 4 錯誤訊息主要原因是因為裡面有幾個不支援的 Gather operators,必須把這個 Gather 想辦法做修改,這裡有幫您想辦法將 model 去做 optimized,但後續在量化上出了點問題,目前已經把問題提交給相關同仁,如果有消息會再通知您。
問題三
紅框3內放的 img_qut資料夾裡面有 10 張大小 720*1280 的圖片,圖片是大小基本上是可以放任意大小的,因為您的紅框 2 內的 preprocess_fuc 主要就是把您提供的圖片去做 resize,讓您的 image input 符合 model input 的 shape。
您好:
好的,再麻煩您們了,真的非常感謝您們。
Best Regards 俊佑
hi 俊佑,
我们看了一下模型, 目前有些 add 还不支持, 如果这个 add 是加自己的话
能否换成x2 或者其他node?