matconvnet fast RCNNdemo程序理解

function fast_rcnn_demo(varargin)
%FAST_RCNN_DEMO  Demonstrates Fast-RCNN
%
% Copyright (C) 2016 Abhishek Dutta and Hakan Bilen.
% All rights reserved.
%
% This file is part of the VLFeat library and is made available under
% the terms of the BSD license (see the COPYING file).

run(fullfile(fileparts(mfilename('fullpath')), ...
  '..', '..', 'matlab', 'vl_setupnn.m')) ;

addpath(fullfile(vl_rootnn,'examples','fast_rcnn','bbox_functions')) ;

opts.modelPath = '' ;

% opts.classes = {'car'} ;
opts.classes = {'bird'} ;
opts.gpu = [] ;
opts.confThreshold = 0.5 ;
opts.nmsThreshold = 0.3 ;
opts = vl_argparse(opts, varargin) ;

% Load or download the Fast RCNN model
paths = {opts.modelPath, ...
         './fast-rcnn-vgg16-dagnn.mat', ...
         fullfile(vl_rootnn, 'data', 'models', 'fast-rcnn-vgg16-pascal07-dagnn.mat'), ...
         fullfile(vl_rootnn, 'data', 'models-import', 'fast-rcnn-vgg16-pascal07-dagnn.mat')} ;
ok = min(find(cellfun(@(x)exist(x,'file'), paths))) ;

if isempty(ok)
  fprintf('Downloading the Fast RCNN model ... this may take a while\n') ;
  opts.modelPath = fullfile(vl_rootnn, 'data', 'models', 'fast-rcnn-vgg16-pascal07-dagnn.mat') ;
  mkdir(fileparts(opts.modelPath)) ;
  urlwrite('http://www.vlfeat.org/matconvnet/models/fast-rcnn-vgg16-pascal07-dagnn.mat', ...
           opts.modelPath) ;
else
  opts.modelPath = paths{ok} ;
end

% Load the network and put it in test mode.
net = load('C:\Program Files\MATLAB\R2015b\toolbox\matconvnet\data\models\fast-rcnn-vgg16-pascal07-dagnn.mat') ;

net = dagnn.DagNN.loadobj(net);
net.mode = 'test' ;

% Mark class and bounding box predictions as `precious` so they are
% not optimized away during evaluation.
net.vars(net.getVarIndex('cls_prob')).precious = 1 ;
% 在對新的圖像進行分類之前,先將對應的precison變量置爲1
net.vars(net.getVarIndex('bbox_pred')).precious = 1 ;

% Load a test image and candidate bounding boxes.
%%
%原始示例
% im = single(imread('000004.jpg')) ;
% imo = im; % keep original image
% boxes = load('000004_boxes.mat') ;
%網上找的車輛測試圖像
% im = single(imread('C:\Users\Administrator\Desktop\SSmatlab\僞彩色增強程序\車輛.jpg')) ;
% imo = im; % keep original image
% boxes = load('C:\Users\Administrator\Desktop\SSmatlab\僞彩色增強程序\車輛.mat')';
%網上找的鳥輛測試圖像
im = single(imread('C:\Users\Administrator\Desktop\SSmatlab\僞彩色增強程序\鳥.jpg')) ;
imo = im; % keep original image
boxes = load('C:\Users\Administrator\Desktop\SSmatlab\僞彩色增強程序\bird.mat')';

%對乳腺圖像進行僞彩色處理
% load('C:\Users\Administrator\Desktop\數據庫\乳腺數據\ICYL.mat');
% im= ICYL(3,:,:);
% im=reshape(im,[1000 600]);
% n=max(im(:));
% map=colormap(jet(n));
% res = grs2rgb1(im,map);
% imo = res; % keep original image
% im=single(res);
% boxes=load('C:\Users\Administrator\Desktop\SSmatlab\僞彩色增強程序\breast.mat');

%%
boxes = single(boxes.boxes') + 1 ;
boxeso = boxes - 1; % keep original boxes

% Resize images and boxes to a size compatible with the network.
imageSize = size(im) ;
fullImageSize = net.meta.normalization.imageSize(1) ...
    / net.meta.normalization.cropSize ;
% 將原始輸入圖片裁剪爲作者所說的s=600,將最小的那個邊裁剪爲600
scale = max(fullImageSize ./ imageSize(1:2)) ;
im = imresize(im, scale, ...
              net.meta.normalization.interpolation, ...
              'antialiasing', false) ;
% net.meta.normalization.interpolation 關於插值函數的鍵值對,'antialiasing',
% false關於是否要進行抗鋸齒操作的鍵值對
boxes = bsxfun(@times, boxes - 1, scale) + 1 ;
% 減1是爲了保持原始爲0的像素進行差值運算後仍然爲0,加1是爲了避免在對像素值進行處理的時候出現NaN
% 對原始圖像im進行擴展後,再對邊界框進行擴展
% 原始圖片的大小改變後,候選區域的位置也要發生改變
% bsxfun在某種程度上相當於批量化操作

% Remove the average color from the input image.
imNorm = bsxfun(@minus, im, net.meta.normalization.averageImage) ;

% Convert boxes into ROIs by prepending the image index. There is only
% one image in this batch.
rois = [ones(1,size(boxes,2)) ; boxes] ;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  
% 在boxes的基礎上增加了一列,用來存儲概率

% Evaluate network either on CPU or GPU.
if numel(opts.gpu) > 0
  gpuDevice(opts.gpu) ;
  imNorm = gpuArray(imNorm) ;
  rois = gpuArray(rois) ;
  net.move('gpu') ;
end

net.conserveMemory = false ;
net.eval({'data', imNorm, 'rois', rois});
% imNorm:原始圖像裁剪,減去平均顏色以後得到的圖像
% eval() 對imNorm和rois進行前向傳播得到概率和邊界框
% `obj.getOutputIndex(outputName)`:得到輸出索引
% `obj.vars(outputIndex)`:由輸出的索引得到輸出的值
% 函數形式爲eval(obj, inputs),net.eval爲對net的操作
% net.vars多了一個value欄目

% Extract class probabilities and  bounding box refinements
probs = squeeze(gather(net.vars(net.getVarIndex('cls_prob')).value)) ;
deltas = squeeze(gather(net.vars(net.getVarIndex('bbox_pred')).value)) ;
% B=gpuArray(A):將matlab數據轉化爲gpu空間中的數據
% C=gather(B):將gpu空間中的數據轉化爲matlab工作空間中的double類型的數據
% cls_prob:1*1*21*60的數據     probs:21*60
% bbox_pred:1*1*84*60的數據     deltas:84*60

% Visualize results for one class at a time
for i = 1:numel(opts.classes)
  c = find(strcmp(opts.classes{i}, net.meta.classes.name)) ;
  cprobs = probs(c,:) ;
  cdeltas = deltas(4*(c-1)+(1:4),:)' ;
  cboxes = bbox_transform_inv(boxeso', cdeltas);%邊界框調整函數
  cls_dets = [cboxes cprobs'] ;
% cls_dets儲存的是調整後的邊界框以及每個邊界框的概率
  keep = bbox_nms(cls_dets, opts.nmsThreshold) ;
  %非極大值抑制Non-maximum suppression(NMS,刪除每個邊界框周圍與其重疊率大於閾值的邊界框
  %NMS本質是搜索局部極大值,抑制非極大值元素,可用於找到最佳的檢測位置
  cls_dets = cls_dets(keep, :) ;

  sel_boxes = find(cls_dets(:,end) >= opts.confThreshold) ;
%用概率再對邊界框進行一波篩選
%%
%將結果展示在原圖上
  imo = bbox_draw(imo/255,cls_dets(sel_boxes,:));
  title(sprintf('Detections for class ''%s''', opts.classes{i})) ;

  fprintf('Detections for category ''%s'':\n', opts.classes{i});
  for j=1:size(sel_boxes,1)
    bbox_id = sel_boxes(j,1);
    fprintf('\t(%.1f,%.1f)\t(%.1f,%.1f)\tprobability=%.6f\n', ...
            cls_dets(bbox_id,1), cls_dets(bbox_id,2), ...
            cls_dets(bbox_id,3), cls_dets(bbox_id,4), ...
            cls_dets(bbox_id,end));
  end
end

程序流程圖


要將fast RCNN 模型應用於自己的課題研究,還需要訓練自己的模型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章