python版faster rcnn利用matlab繪製RP曲線
在上一篇部落格caffe–python版利用訓練好模型進行測試 中小魚利用以訓練的模型得到測試結果,但只得到測試的accuracy,沒有得到想要的precision和recall。然而faster rcnn的測試結果是輸出AP值的,所以小魚認為一定是什麼地方儲存了precision和recall,可以被呼叫。如果對precision和recall等指標有不懂,可以參考faster r-cnn中評價檢測演算法中的指標 接下來小魚將和大家分享怎麼在python版的faster rcnn中呼叫matlab繪製RP曲線。
如果你是現在裝的matlab,那第一件事是改matlab的快捷鍵為Windows型,不然都不會用matlab,改的方法為:
找到Home ,再 選擇preferences ,找到keyboard ,選擇 shortcuts ,最後選擇Windows default set。
如果你和小魚一樣已經到了要繪製測試集的RP曲線,那你肯定進行過py-faster-rnn的訓練,這裡就直接介紹怎麼獲取R,P等指標的獲取。
1、首先需要將matlab評價的埠設定為True
**./lib/datasets/pascal_voc.py檔案中**
self.config = {'cleanup' : True,
'use_salt' : True,
'use_diff' : False,
'matlab_eval' : False,
'rpn_file' : None,
'min_size' : 2}
**改為**
self.config = {'cleanup' : True,
'use_salt' : True,
'use_diff' : False,
'matlab_eval' : True, #只要改這裡
'rpn_file' : None,
'min_size' : 2}
2、埠雖然改好了,但是還需要開啟matlab的圖形化顯示,並設定圖形化介面為自己關閉,不然程式執行完之後,我們還沒有看到圖形化結果圖matlab就自己直接關閉了。
**./lib/datasets/pascal_voc.py檔案中**
cmd += '{:s} -nodisplay -nodesktop '.format(cfg.MATLAB)
cmd += '-r "dbstop if error; '
cmd += 'voc_eval(\'{:s}\',\'{:s}\',\'{:s}\',\'{:s}\'); quit;"' \
.format(self._devkit_path, self._get_comp_id(),
self._image_set, output_dir)
**改為:**
cmd += '{:s}'.format(cfg.MATLAB)
cmd += '-r "dbstop if error; '
cmd += 'voc_eval(\'{:s}\',\'{:s}\',\'{:s}\',\'{:s}\');"' \
.format(self._devkit_path, self._get_comp_id(),
self._image_set, output_dir)
3、現在關於matlab的設定已經改完了,接下來根據輸出的結果報的錯來修改程式碼。
我們測試的網路是呼叫/tools/test_net.py函式,改函式中有一些引數要自己終端呼叫的時候設定,測試執行的程式碼為:
cd py-faster-rcnn
./tools/test_net.py --gpu 0 --def /models/pascal_voc/VGG16/faster_rcnn_end2end/test.prototxt --net /output/faster_end2end/voc_2007_trainval/vgg16_faster_rcnn_final.caffemodel --cfg/experiments/cfgs/faster_rcnn_end2end.yml
其中output下為自己訓練之後生成的模型名字,不一樣要修改為自己模型的名字。其他的一般都一樣。
終端執行上述命令,可能會報錯,matlab下報錯為找不到某個xxx_def_val_xxx.txt,這個錯誤是因為python的test_net.py函式生成一個檔名為xxx_def_test_xxx.txt,所以需要將matlab下呼叫的檔名格式進行修改。
**./lib/datasets/VOCdevkit-matlab-wrapper/voc_eval.m 檔案下**
do_eval = (str2num(year) <= 2007) | ~strcmp(test_set, 'val');
**改為:**
do_eval = (str2num(year) <= 2007) | ~strcmp(test_set, 'test');
同時因為RP曲線是對自己類別的一個指標繪製圖,所以需要將
./data/VOCdeckit/voccode/VOCinit.m 檔案中
VOC2007資料下的類別進行修改,改成自己的類別
這樣應該就沒什麼問題了,你就可以在matlab介面看到完美的RP曲線。
如果你覺得只有圖,沒有數字,不踏實,想看數字結果,那小魚告訴你檔案中已經儲存結果在一個.mat檔案中了,只要用matlab開啟即可,結果儲存在:
./output/faster_rcnn_end2end/voc_2007_test/vgg16_faster_rcnn_final/
檔案中包含四個結果檔案,有用的有生成的RP曲線圖,和將AP值,precision值、recall值都儲存的.mat檔案。
最後,matlab的輸出結果內容格式定義在voc_eval.m的第11-16行和第46行。
這就是今天分享的內容,如果你想加一些指標,比如F-measure值,你只要在
./data/VOCdevkit/VOCcode/voc_eval.m
./data/VOCdevkit/VOCcode/vocevaldet.m
兩個檔案中加入指標計算程式碼,和對輸出內容進行修改即可
如果有什麼問題可以在評論區進行評論留言,小魚會及時回答,一起進步
喜歡記得留個贊再走哦,一起加油!