facenet-pytorch 轉成onnx後optimize和轉NEF問題

您好,

我正在使用https://github.com/timesler/facenet-pytorch?tab=readme-ov-file裡面的「20180402-114759」pretrain model去進行轉onnx並優化後轉NEF的任務。目前已經成功轉成onnx opset12的版本,檔案名稱為「FCmodel_simplified.onnx」。但當我想要使用我github裡面的e2e_simulator_convert_model.py去進行優化和轉檔時出現了以下問題,請見下圖:


因此想請教您這個問題該怎麼解決呢?會是因為我使用Macbookair M1的原因嗎?因為我的mac是ARM架構,目前只知道會和Kneron PLUS不相容,但不確定是不是在使用toolchain轉NEF的時候也是?謝謝!

(如果在您那邊跑我的程式碼沒有問題並且可以轉檔的話,不知是否方便轉給我呢)


備註:

我的github:https://github.com/HanYncBWH/Model_Classification_Quantilization/tree/main

這是我把.pt檔案轉成opset12的colab程式碼:https://colab.research.google.com/drive/1ZUL8ugU1Tqy3QelPMlYNcHEMRb4tmbGy?usp=sharing

FCmodel_simplified.onnx 模型下載點(onnx opset12模型):https://drive.google.com/file/d/102TNeFpduCniodubdgc5k7vr94Txk3-S/view?usp=sharing

跑模型時所需的圖片「img_align_celeba」載點:https://drive.google.com/drive/folders/12F1xM8l5pOIpjY8kA9rMM2mKod4IAMaK?usp=sharing

再次感謝您的幫忙!

Tagged:

Comments

  • 您好,

    Kneron toolchain的binary都是針對x86_64的架構編譯的,所以在ARM架構上跑不了 (除非ARM上的docker可以模擬x86_64的指令)。我們會建議您使用x86_64的環境喔。

    FCmodel_simplified.onnx模型下方,因為KL720沒有支援Expand和Div,所以需要將這些operators剪掉,再自行寫postprocess將剪掉的operators (紅線以下的ReduceL2, Clip, Expand, Div) 加回去。

    關於圖片,toolchain跑._000001的圖片會出問題,所以我們有把名字裡面有.的圖片先去掉,總共用150張圖片去量化。

    以下是轉換完的模型,請記得要將operators用postprocess加回去,不然結果會不一樣,謝謝!


  • 您好:

    非常感謝您的幫助,我有依照您的指示去進行postprocess將剪掉的operators加回去。(我在我的mac上用VMware切了一個x86出來,然後跑這份檔案)

    這是我寫的postprocess程式碼「addop.py」:https://github.com/HanYncBWH/Model_Classification_Quantilization/tree/main

    我把models_720.nef在toolchain進行postprocess時候有碰到一些問題

    想請問這問題仍舊是硬體問題嗎?(內存的部分我已經開到最大了,應該不是這問題),很感謝您的幫忙!

  • 不好意思error的圖片沒放成功,這邊補上:


  • edited September 2024

    您好,

    請確認您的model input是否符合模型的input shape:

    這個preprocess需要與您訓練模型時所用的圖片的處理方式要一致,不然會有錯誤或inference結果會與onnx的inference結果不一樣:

    所以resize會是(160, 160)喔

    Edit: 還有,input_names是"input.1" (請參照最上面的圖片,有寫onnx模型的input名稱)


  • 您好,

    我現在嘗試想使用colab進行後去的填補operators的動作,所以先在docker裡面進行推理然後跑存到result到.npy檔,github addop2.py code:https://github.com/HanYncBWH/Model_Classification_Quantilization/blob/main/addop2.py

    但我在執行的時候碰到另一個問題是找不到“csim”:

    想請問這問題該怎麼處理呢?謝謝!(好像docker image裡面來應該要找的到這個csim?,還是說我的docker image有問題呢?)

  • edited September 2024

    您好,

    我自己在Windows的toolchain上跑類似appop2.py的code可以正常地跑,請問一下,您的Mac的CPU是什麼呢?


    Edit: 再請問一下,上面的error花了多少時間呢? 如果立刻出現錯誤的話,很可能就是CPU的問題

    還有,我們不建議跑那個csim的bin,因為有很多參數

  • edited September 2024

    您好,我的macbookair是M1晶片。他 的 CPU 是 Apple 自家的 8 核 ARM 架構處理器。

    根據我查到的資料,他是 8 核 CPU

    • 4 個高效能核心(高性能核心,稱為「Firestorm」)
    • 4 個高能效核心(省電核心,稱為「Icestorm」)

    然後我上面的error花了大概20秒,我有請我的同事用「addop.py」在toolchain跑出以下結果:

    但我們想確認這個模型是否能在dongle「 KL520」跟「KL720」上運行。可是目前我們沒有這兩項物品QQ,所以想請問toolchain有相關模擬的環境嗎?因為據我們所知,toolchain跟實際在 KL520跟KL720上運行可能會不一樣?

  • 您好,

    謝謝您提供資訊。這個看起來像是CPU的問題,有可能是某些instructions在VMware裡面沒有模擬好,導致錯誤。我們會推薦您用x86的環境:

    這個模型 (models_720.nef) 是KL720用的模型 (轉換時,會去指定要轉換成哪一個hardware用的模型),所以只能在KL720上跑喔。

    如果要轉換成KL520,會請您再從onnx模型剪掉從MatMul以下的operators之後再轉換,因為KL520不支持MatMul:

    在toolchain上可以用E2E Simulator來模擬hardware (KL520, KL720, etc.),結果會跟實際KL520和KL720上運行的結果會很相近。

    Toolchain system requirements: https://doc.kneron.com/docs/#toolchain/manual_2_deploy/#21-system-requirements

    E2E Simulator: https://doc.kneron.com/docs/#toolchain/manual_5_nef/#52-e2e-simulator-check-hardware

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