faster rcnn test demo ---repaired for video input and save the image, label, score et al. into .mat format

function script_faster_rcnn_demo()
close all;
clc;
clear mex;
clear is_valid_handle; % to clear init_key
run(fullfile(fileparts(fileparts(mfilename('fullpath'))), 'startup'));
%% -------------------- CONFIG --------------------
opts.caffe_version = 'caffe_faster_rcnn';
opts.gpu_id = auto_select_gpu;
active_caffe_mex(opts.gpu_id, opts.caffe_version); opts.per_nms_topN = 6000;
opts.nms_overlap_thres = 0.7;
opts.after_nms_topN = 300;
opts.use_gpu = true; opts.test_scales = 600; % %% -------------------- INIT_MODEL --------------------
% model_dir = fullfile(pwd, 'output', 'faster_rcnn_final', 'faster_rcnn_VOC0712_vgg_16layers'); %% VGG-16
model_dir = fullfile(pwd, 'output', 'faster_rcnn_final', 'faster_rcnn_VOC0712_ZF'); %% ZF
proposal_detection_model = load_proposal_detection_model(model_dir); proposal_detection_model.conf_proposal.test_scales = opts.test_scales;
proposal_detection_model.conf_detection.test_scales = opts.test_scales;
if opts.use_gpu
proposal_detection_model.conf_proposal.image_means = gpuArray(proposal_detection_model.conf_proposal.image_means);
proposal_detection_model.conf_detection.image_means = gpuArray(proposal_detection_model.conf_detection.image_means);
end % caffe.init_log(fullfile(pwd, 'caffe_log'));
% proposal net
rpn_net = caffe.Net(proposal_detection_model.proposal_net_def, 'test');
rpn_net.copy_from(proposal_detection_model.proposal_net);
% fast rcnn net
fast_rcnn_net = caffe.Net(proposal_detection_model.detection_net_def, 'test');
fast_rcnn_net.copy_from(proposal_detection_model.detection_net); % set gpu/cpu
if opts.use_gpu
caffe.set_mode_gpu();
else
caffe.set_mode_cpu();
end %% -------------------- WARM UP --------------------
% the first run will be slower; use an empty image to warm up for j = 1:2 % we warm up 2 times
im = uint8(ones(375, 500, 3)*128);
if opts.use_gpu
im = gpuArray(im);
end
[boxes, scores] = proposal_im_detect(proposal_detection_model.conf_proposal, rpn_net, im);
aboxes = boxes_filter([boxes, scores], opts.per_nms_topN, opts.nms_overlap_thres, opts.after_nms_topN, opts.use_gpu);
if proposal_detection_model.is_share_feature
[boxes, scores] = fast_rcnn_conv_feat_detect(proposal_detection_model.conf_detection, fast_rcnn_net, im, ...
rpn_net.blobs(proposal_detection_model.last_shared_output_blob_name), ...
aboxes(:, 1:4), opts.after_nms_topN);
else
[boxes, scores] = fast_rcnn_im_detect(proposal_detection_model.conf_detection, fast_rcnn_net, im, ...
aboxes(:, 1:4), opts.after_nms_topN);
end
end %% -------------------- TESTING --------------------
% im_names = {'001763.jpg', '004545.jpg', '000542.jpg', '000456.jpg', '001150.jpg'};
% these images can be downloaded with fetch_faster_rcnn_final_model.m
% for j = 1:length(im_names)
% im = imread(fullfile(pwd, im_names{j})); %% -------------------------- Video ------------------
%% initialization
video_names = {}; %% --------------path for test ------------
path = '/media/wangxiao/247317a3-e6b5-45d4-81d1-956930526746/video/test_video/';
savePath = '/media/wangxiao/247317a3-e6b5-45d4-81d1-956930526746/video/test_video_images/'; %% ---------------path for the 4TB drive----------
% path = '/media/wangxiao/Seagate/pedestrian data/';
% savePath = '/media/wangxiao/Seagate/pedestrian data/pedestrian frame/'; % video_dir = dir(path); video_dir = dir(fullfile(path, '*.avi'));
% if isempty(video_dir)
% video_dir = dir(fullfile(path, '*.mp4'));
% end
% if isempty(video_dir)
% video_dir = dir(fullfile(path, '*.rmvb'));
% end
% if isempty(video_dir)
% video_dir = dir(fullfile(path, '*.mkv'));
% end %%
k =1;
for i = 1:length(video_dir)
if ~video_dir(i).isdir
video_names{k} = video_dir(i).name; % 视频的名字 保存在video_name中;
k = k+1;
end
end
clear k;
running_time = []; %% 将视频load进来,切割为图像,存储
for j = 1:length(video_dir) %视频级别; % 弹出错误提示: Could not read file due to an unexpected error. Reason:
% Unable to initialize the video obtain properties ...
frames = VideoReader (strcat(path, video_dir(j).name));
numFrames =frames.NumberOfFrames;
for k = 1 : 30: numFrames
disp(['saving the ',num2str(k),'-th frames, please waiting....']);
frame = read(frames,k); %将frame存储起来;
frame = imresize(frame, [200, 300]); % 是否要对图像进行resize ?
imwrite(frame,[savePath,sprintf('%08d.png',k)]);
end
end %% 读取图像,输入给 faster rcnn
image_path = savePath;
imageFile = dir([image_path, '*.png']); for iii = 1:length(imageFile)
im = imread([image_path, imageFile(iii).name]); if opts.use_gpu
im = gpuArray(im);
end % test proposal
th = tic();
[boxes, scores] = proposal_im_detect(proposal_detection_model.conf_proposal, rpn_net, im);
t_proposal = toc(th);
th = tic();
aboxes = boxes_filter([boxes, scores], opts.per_nms_topN, opts.nms_overlap_thres, opts.after_nms_topN, opts.use_gpu);
t_nms = toc(th); % test detection
th = tic();
if proposal_detection_model.is_share_feature
[boxes, scores] = fast_rcnn_conv_feat_detect(proposal_detection_model.conf_detection, fast_rcnn_net, im, ...
rpn_net.blobs(proposal_detection_model.last_shared_output_blob_name), ...
aboxes(:, 1:4), opts.after_nms_topN); else
[boxes, scores] = fast_rcnn_im_detect(proposal_detection_model.conf_detection, fast_rcnn_net, im, ...
aboxes(:, 1:4), opts.after_nms_topN); end
t_detection = toc(th); fprintf('%s (%dx%d): time %.3fs (resize+conv+proposal: %.3fs, nms+regionwise: %.3fs)\n', ['the ' num2str(j) '-th image '], size(im, 2), size(im, 1), t_proposal + t_nms + t_detection, t_proposal, t_nms+t_detection);
running_time(end+1) = t_proposal + t_nms + t_detection; %% visualize 可视化;
classes = proposal_detection_model.classes; % 20类物体,包括行人这一类;
boxes_cell = cell(length(classes), 1); % 20*1 cell;
thres = 0.6; for i = 1:length(boxes_cell)
boxes_cell{i} = [boxes(:, (1+(i-1)*4):(i*4)), scores(:, i)];
boxes_cell{i} = boxes_cell{i}(nms(boxes_cell{i}, 0.3), :); I = boxes_cell{i}(:, 5) >= thres;
boxes_cell{i} = boxes_cell{i}(I, :);
end figure(j); [location, label, score] = output(im, boxes_cell, classes, 'voc');
if (score==0)
continue;
else
% disp(imageFile(iii).name);
save(['./mat results/' imageFile(iii).name '.mat' ], 'location', 'label', 'score', 'im');
end showboxes(im, boxes_cell, classes, 'voc'); pause(0.1); end % eval(['movie_' num2str(k) '_' class_filenames{NUM} '= im_names;']);
% clear im_names;
%
% eval(['movie_bb_' num2str(k) '_' class_filenames{NUM} '= video_cell;'])
% clear video_cell;
%
% if ~exist([fullfile(pwd, 'video_frames'),'/','video.mat'],'file')
% save('./video_frames/video.mat',['movie_' num2str(k) '_' class_filenames{NUM}]);
% save('./video_frames/video_bb.mat',['movie_bb_' num2str(k) '_' class_filenames{NUM}]);
% else
% save('./video_frames/video.mat',['movie_' num2str(k) '_' class_filenames{NUM}],'-append');
% save('./video_frames/video_bb.mat',['movie_bb_' num2str(k) '_' class_filenames{NUM}], '-append');
% end
%
% eval(['clear movie_' num2str(k)]);
% eval(['clear movie_bb_' num2str(k)]);
% save('im_boxes.mat','im_cell'); fprintf('mean time: %.3fs\n', mean(running_time));
caffe.reset_all();
clear mex; end function proposal_detection_model = load_proposal_detection_model(model_dir)
ld = load(fullfile(model_dir, 'model'));
proposal_detection_model = ld.proposal_detection_model;
clear ld; proposal_detection_model.proposal_net_def ...
= fullfile(model_dir, proposal_detection_model.proposal_net_def);
proposal_detection_model.proposal_net ...
= fullfile(model_dir, proposal_detection_model.proposal_net);
proposal_detection_model.detection_net_def ...
= fullfile(model_dir, proposal_detection_model.detection_net_def);
proposal_detection_model.detection_net ...
= fullfile(model_dir, proposal_detection_model.detection_net); end function aboxes = boxes_filter(aboxes, per_nms_topN, nms_overlap_thres, after_nms_topN, use_gpu)
% to speed up nms
if per_nms_topN > 0
aboxes = aboxes(1:min(length(aboxes), per_nms_topN), :);
end
% do nms
if nms_overlap_thres > 0 && nms_overlap_thres < 1
aboxes = aboxes(nms(aboxes, nms_overlap_thres, use_gpu), :);
end
if after_nms_topN > 0
aboxes = aboxes(1:min(length(aboxes), after_nms_topN), :);
end
end

faster rcnn test demo ---repaired for video input and save the image, label, score et al. into .mat format的更多相关文章

  1. Faster RCNN算法demo代码解析

    一. Faster-RCNN代码解释 先看看代码结构: Data: This directory holds (after you download them): Caffe models pre-t ...

  2. Windows下如何采用微软的Caffe配置Faster R-CNN

    前言 比较简单的一篇博客.https://github.com/microsoft/caffe 微软的Caffe以在Windows下编译简单而受到了很多人的喜爱(包括我),只用改改prop配置然后无脑 ...

  3. faster rcnn 源码学习-------数据读入及RoIDataLayer相关模块解读

    参考博客:::https://www.cnblogs.com/Dzhen/p/6845852.html 非常全面的解读参考:::https://blog.csdn.net/DaVinciL/artic ...

  4. caffe学习一:ubuntu16.04下跑Faster R-CNN demo (基于caffe). (亲测有效,记录经历两天的吐血经历)

    兜兜转转,兜兜转转; 一次有一次,这次终于把Faster R-CNN 跑通了. 重要提示1:在开始跑Faster R-CNN之前一定要搞清楚用的是Python2 还是Python3. 不然你会无限次陷 ...

  5. faster rcnn训练详解

    http://blog.csdn.net/zy1034092330/article/details/62044941 py-faster-rcnn训练自己的数据:流程很详细并附代码 https://h ...

  6. (原)faster rcnn的tensorflow代码的理解

    转载请注明出处: https://www.cnblogs.com/darkknightzh/p/10043864.html 参考网址: 论文:https://arxiv.org/abs/1506.01 ...

  7. faster r-cnn 在CPU配置下训练自己的数据

    因为没有GPU,所以在CPU下训练自己的数据,中间遇到了各种各样的坑,还好没有放弃,特以此文记录此过程. 1.在CPU下配置faster r-cnn,参考博客:http://blog.csdn.net ...

  8. 如何才能将Faster R-CNN训练起来?

    如何才能将Faster R-CNN训练起来? 首先进入 Faster RCNN 的官网啦,即:https://github.com/rbgirshick/py-faster-rcnn#installa ...

  9. 新人如何运行Faster RCNN的tensorflow代码

    0.目的 刚刚学习faster rcnn目标检测算法,在尝试跑通github上面Xinlei Chen的tensorflow版本的faster rcnn代码时候遇到很多问题(我真是太菜),代码地址如下 ...

随机推荐

  1. hadoop2.x通过Zookeeper来实现namenode的HA方案以及ResourceManager单点故障的解决方案

    我们知道hadoop1.x之前的namenode存在两个主要的问题:1.namenode内存瓶颈的问题,2.namenode的单点故障的问题.针对这两个问题,hadoop2.x都对它进行改进和解决.其 ...

  2. mysql 批量创建表,利用存储过程

    最近根据需求,需要提前创建一批日志表,以日期结尾,每天创建一张,例如XXX20160530,请参考如下: BEGIN    DECLARE `sName` VARCHAR(128);   DECLAR ...

  3. golang vim环境搭建

    主要使用到的是golang的vim插件vim-go, 安装方法: (1)配置好自己的GOPATH和GOROOT: (2)在GOPATH目录下建立 src.pkg.main.bin四个目录: (3)安装 ...

  4. Java中的blank final

    Java allows the creation of blank finals, which are fields that are declared as final but are not gi ...

  5. MAC PHP MARK

    这是一篇以 iOS 开发人员的视角写给广大iOS 程序猿的 PHP 入门指南.在这篇文章里我努力去发掘 objectiv-c 与 php 之间的共性,来帮助有一定 iOS 开发经验的攻城狮来快速上手一 ...

  6. ELF Spec

    ELF Spec Generic System V Application Binary Interface,ELF-64 Object File Format AMD64 System V ABI, ...

  7. Android沉浸式(侵入式)标题栏(状态栏)Status(二)

     Android沉浸式(侵入式)标题栏(状态栏)Status(二) 附录1以xml写style实现了Android沉浸式(侵入式)状态栏(标题栏),同样以上层Java代码实现.在附录文章1的基础上 ...

  8. SQL基础2

    create database fuxi --创建一个名为“fuxi”的数据库go                   --连接语句use fuxi   --使用名为“fuxi”的数据库gocreat ...

  9. latex 小结

    1 no file .bbl http://blog.csdn.net/zhedasuiyuan/article/details/9223637 另外,你可能有多个 .bbl.目前的做法是,在控制台上 ...

  10. I.MX6 ubuntu-core-14.04 Apache php mysql Qt5

    /*************************************************************************** * I.MX6 ubuntu-core-14. ...