最近在做論文複現的時候抽取特征需要用到SentiBank detectors來進行圖像的特征生成,然後運作起來就會報assumtype錯誤,其實這是由于matlab内置的bitshift已經進行了改動,源代碼是根據matlab2013a運作的。
如果沒有特殊需求,隻需要下一個8.1版本的MCR運作binary檔案夾中的Binconcept.exe即可,連結如下:
我找到解決方案的連結:
https://www.mathworks.com/matlabcentral/answers/332604-what-is-matlab-compiler-runtime-mcr-and-how-do-i-install-it
MCR下載下傳連結:
https://www.mathworks.com/products/compiler/matlab-runtime.html
不過親測這個速度非常之感人……大約需要2min左右的時間完成一張圖檔的1200個分類……而我要處理大約9w張左右的圖檔,這個速度肯定不行了……
是以我們需要改動source中的代碼來減少分類任務,當你運作Biconcept時就會發現遇到了我第一段提到的問題,官方API說明如下:
https://ww2.mathworks.cn/help/matlab/ref/bitshift.html
其實shift第三個參數需要的是一個 類型名字,是以你隻需要把代碼shift的第三個參數改為‘uint8’代碼就能正常了。
即所有shift代碼如下進行修改:
j = bitset(bitshift(i,1,'uint8'),1,bitget(i,samples)); %rotate left
由于我之前遇到這個問題的時候也很頭疼看到很多人再搜,也沒找到合适的答案就自己寫一篇,前人之苦後人不必再受。
而且用matlab2019a速度非常之快,幾乎秒出(1200次分類)。