前言
首先申明,該問題是我的一位羣友發現的。我這裏只是把他的結論加以驗證並總結在這裏。
問題描述
在海思學習系列中,我們已經寫了一篇文章來介紹如何將darknet模型轉換成caffe model(https://blog.csdn.net/avideointerfaces/article/details/89111955)。但是因爲環境平臺的原因,尤其是python2和python3語法有些不同的原因還是會在實際轉換過程中會遇到各種各樣的問題。
下面這個問題就是由於python2和python3語法差別而引起的。首先看現象:
上面的錯誤log很容易被認爲是protobuf的原因,其實關鍵點是: Expected integer。
再看看生成的prototxt文件,裏面的pad值爲float型,如下所示。
再看看將cfg轉換成prototxt的對應腳本代碼
後來才知道,對於python2來說,除法‘/ ’兩邊都是整數的話,其結果也是整數;而對於python3而言,無論除法兩邊爲整數還是浮點數,其結果都爲浮點數。
回到上面代碼中的紅框部分,如果上面代碼用python2來運行的話,pad參數值爲整數;反之,如果用python3來運行的話,則變成浮點數了。而caffe的prototxt中參數值是不可能爲浮點數的。
要想用python3運行模型轉換腳本來避開這個坑,可以將 '/'改成 '//'。