天天看點

關于SentiBank detectors的matlab中getmapping函數的修正

最近在做論文複現的時候抽取特征需要用到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次分類)。

繼續閱讀