1. 程式人生 > >python版faster rcnn利用matlab繪製RP曲線

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

兩個檔案中加入指標計算程式碼,和對輸出內容進行修改即可

如果有什麼問題可以在評論區進行評論留言,小魚會及時回答,一起進步
喜歡記得留個贊再走哦,一起加油!