CLIP ONNX模型optimize和轉NEF檔問題
我的github、程式碼、轉換好的CLIP onnx模型和圖片資料:https://github.com/HanYncBWH/Innovedus-Intern/tree/main
我打算將ONNX進行optimize並轉NEF檔案的時候,一開始使用Toolchain裡面的code,但有遇到一些版本不支援或是onnx2onnx_flow不在被支持的問題,所以我寫幫CLIP寫了一個類似概念的optimize 和convert的 code。
關於「Checking 0/1...」的説明,這是一個Fixed-point analysis。我之前進行圖片data input到模型時,正在處理圖片時的output(接下來會噴出59張圖片處理的結果),但這時終端機出現關於 ArgMax(13)的問題。我查了這個error的相關資訊,這問題是出在 onnxruntime 無法處理 ArgMax 操作節點,可能是由於 onnxruntime 的後端不支持該操作?
但我將Toolchain裡面的onnxruntime升級,但依舊出現同樣的error。github裡的code是我嘗試用“跳過該節點的infernce”的嘗試(可是由於我的電腦memory不足,無法跑完這個嘗試,終端機跑到一半會出現"Killed")。所以想請問一下這問題該怎麼解決?謝謝!
The discussion has been closed due to inactivity. To continue with the topic, please feel free to post a new discussion.
Comments
您好,
模型有KL720不支援的operators,像是Gather、Cast、Unsqueeze。我們會建議您將不支援的operators替換掉,然後重新做訓練,或是直接更換模型。
這個文檔有我們支援的operators,可以提供給您做參考: Hardware Supported Operators - Document Center (kneron.com)
還有,在轉換模型的時候,我們建議您也可以在同一個script裡面用E2E simulator (ktc.inference())檢查onnx、bie、nef,理論上如果轉換模型成功的話,這些也都要通過喔。
您好,
我目前是在做圖片分類的模型,而目前市面上的一些新模型像是CLIP的operator和KL720的架構並不匹配。想請問您有任何推薦KL720或KL520支援去做圖片分類的模型嗎?
最後謝謝您的技術支援,謝謝!
您好,
可以參考耐能model zoo中所提供的模型,當中也有一些classification模型可以供您評估是否符合您的需求
https://doc.kneron.com/docs/#model_training/#_top
您好,
如果是classification模型的話,可以參考Ethon介紹的model zoo的模型,另外我們也推薦使用MobileNet。
您好,
我目前使用您建議的MobileNet和網址裡面提及的V2模型
我目前已經進行到E2E的Simulator Check (Floating Point),接著我碰到以下問題:
我之前有把模型的layer跟Aru print出來並和 Hardware Supported Operators - Document Center (kneron.com)進行對照,沒有發現有任何不符合的部分,但在進行這份e2e測試時卻出現Illegal instruction,所以想請問一下這問題該怎麼解決,謝謝!辛苦了!
備註:經過optimize的檔案“optimized_MobileNetV2.onnx”也是放在github:https://github.com/HanYncBWH/Innovedus-Intern/tree/main的MobileNet model裡面,optimize跟e2e的程式碼也一併在github裡)
透過IP Evaluator跑出來的.html:https://drive.google.com/file/d/12ZqxSrwcwZf2KiHSqgE6fbB0Hlr0oOMY/view?usp=sharing
在上面那份IP的.html中的OutputNode_543跟Reshape_173顯示出來是NaN,但是我查Hardware Supported Operators - Document Center (kneron.com)裡面沒有提到OutputNode,然後Reshape的部分是顯示除了520之外都支援。
您好,
我用了Model_Classification_Quantilization的e2e_simulator.py (改了一些path)和提供的optimized_MobileNetV2.onnx,可以正常地跑。我另外用自己的script也可以成功轉換成nef模型 (KL720),使用的scripts可以提供給您做參考。
-e2e_simulator_edit_path: e2e_simulator改了path
-e2e_simulator_convert_model: 轉換模型用的script
onnx模型和image_data資料夾都放在有一個叫做test資料夾裡面
跑docker的command: docker run --rm -it -v /D/....../test:/data1 kneron/toolchain:latest,然後cd 到 /data1資料夾
我用的toolchain版本是: v0.25.1
雖然KL720會支持Reshape,但可能問題或限制較多,所以可以嘗試剪掉看看。剪掉後要寫在postprocess裡面把剪掉的operators加回來。
您好,非常感謝你的幫忙!但我運行了原來這份程式碼,還是會遇到一樣的問題,出現Illegal instruction的error,以下是跑e2e_simulator_convert_model的截圖
不確定是不是因為硬體問題導致的?(我的電腦是mackbook air M1)
所以想請問是否方便跟您用雲端連結來拿跑出來的這份NEF檔案嗎?謝謝!
我使用的指令是:「docker run --rm -it -v "/Volumes/One Touch/Kneron:/mnt/kneron" -v "/Users/hanyanc/Documents/ppthon/python-training:/scripts" kneron/toolchain:latest」
我的docker image也是v0.25.1
「/Users/hanyanc/Documents/ppthon/python-training」:是我放我的e2e_simulator.py的地方。
「/Volumes/One Touch/Kneron」:是我放optimized_MobileNetV2.onnx模型跟image_ddata(image_ddata裡面有60張圖片,在e2e_simulator_convert_model.py裡面和您一樣只用002.jpg)
想請問是因為Macbookair的電腦架構是 ARM 架構,而非x86_64 架構導致的嗎QQ
您好,
是的,Kneron toolchain的binary都是針對x86_64的架構編譯的,在ARM上跑不了 (除非ARM上的docker可以模擬x86_64的指令)。我們建議您使用x86_64的環境喔
這些是用上次提供的convert_model.py和edited_path.py跑出來的nef檔:
使用的圖片是: image_data (有61張圖片) (我們建議用100張圖片)
有nef模型就可以用Kneron PLUS去做inference,不過要符合下列的環境: Index - Document Center (kneron.com)
您好,真的很感謝您的幫忙!之後都沒有問題了。
這邊想再請教您一個問題,就是有推薦可以通過toolchain跟轉檔nef過程的人臉辨識模型嗎?我目前自己是在嘗試FaceNet系列的模型,不確定可不可行,所以想聽聽您的經驗,謝謝!
您好,
我們的文檔裡有一張表有放其它模型的performance數據可以提供您參考 (確定可以通過toolchain):
Hardware Performance - Document Center (kneron.com)
不好意思我們沒有特別推薦模型,因為這個要看您自己應用的需求(速度、精度)。您可以根據自己的需求訓練修改模型,並生成onnx後使用IP Evaluator確認能不能通過toolchain。感謝您的理解!