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
再次感謝您的幫忙!
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的圖片沒放成功,這邊補上:
您好,
請確認您的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有問題呢?)
您好,
我自己在Windows的toolchain上跑類似appop2.py的code可以正常地跑,請問一下,您的Mac的CPU是什麼呢?
Edit: 再請問一下,上面的error花了多少時間呢? 如果立刻出現錯誤的話,很可能就是CPU的問題
還有,我們不建議跑那個csim的bin,因為有很多參數
您好,我的macbookair是M1晶片。他 的 CPU 是 Apple 自家的 8 核 ARM 架構處理器。
根據我查到的資料,他是 8 核 CPU:
然後我上面的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