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的使用指令以及相對應的錯誤

請問是有需要修改哪個地方的程式嗎?

希望您們能幫我解惑,拜託您們了。

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。

    感謝您

  • 您好:

    請問上述問題原因為何?還是我需要再提供什麼資料?


    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。

  • edited July 2022

    您好:

    我是在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 俊佑

  • edited July 2022

    @盧俊佑


    Hi 俊佑,

    您嘗試一下將 mmpose_replacement 內的 post_transforms.py 增加以下 function,再把 post_transforms.py 與 miniconda

    /lib/python3.7/site-packages/mmpose/post_processing 做相對應的更換

    def affine_transform_torch(pts, t):
      npts = pts.shape[0]
      pts_homo = torch.cat([pts, torch.ones(npts, 1, device=pts.device)], dim=1)
      out = torch.mm(t, torch.t(pts_homo))
      return torch.t(out[:2, :])
    


    並修改 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?

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