faster rcnn test demo ---repaired for video input and save the image, label, score et al. into .mat format
- 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的更多相关文章
- Faster RCNN算法demo代码解析
一. Faster-RCNN代码解释 先看看代码结构: Data: This directory holds (after you download them): Caffe models pre-t ...
- Windows下如何采用微软的Caffe配置Faster R-CNN
前言 比较简单的一篇博客.https://github.com/microsoft/caffe 微软的Caffe以在Windows下编译简单而受到了很多人的喜爱(包括我),只用改改prop配置然后无脑 ...
- faster rcnn 源码学习-------数据读入及RoIDataLayer相关模块解读
参考博客:::https://www.cnblogs.com/Dzhen/p/6845852.html 非常全面的解读参考:::https://blog.csdn.net/DaVinciL/artic ...
- caffe学习一:ubuntu16.04下跑Faster R-CNN demo (基于caffe). (亲测有效,记录经历两天的吐血经历)
兜兜转转,兜兜转转; 一次有一次,这次终于把Faster R-CNN 跑通了. 重要提示1:在开始跑Faster R-CNN之前一定要搞清楚用的是Python2 还是Python3. 不然你会无限次陷 ...
- faster rcnn训练详解
http://blog.csdn.net/zy1034092330/article/details/62044941 py-faster-rcnn训练自己的数据:流程很详细并附代码 https://h ...
- (原)faster rcnn的tensorflow代码的理解
转载请注明出处: https://www.cnblogs.com/darkknightzh/p/10043864.html 参考网址: 论文:https://arxiv.org/abs/1506.01 ...
- faster r-cnn 在CPU配置下训练自己的数据
因为没有GPU,所以在CPU下训练自己的数据,中间遇到了各种各样的坑,还好没有放弃,特以此文记录此过程. 1.在CPU下配置faster r-cnn,参考博客:http://blog.csdn.net ...
- 如何才能将Faster R-CNN训练起来?
如何才能将Faster R-CNN训练起来? 首先进入 Faster RCNN 的官网啦,即:https://github.com/rbgirshick/py-faster-rcnn#installa ...
- 新人如何运行Faster RCNN的tensorflow代码
0.目的 刚刚学习faster rcnn目标检测算法,在尝试跑通github上面Xinlei Chen的tensorflow版本的faster rcnn代码时候遇到很多问题(我真是太菜),代码地址如下 ...
随机推荐
- 修改Azure Website 移动服务 默认时区
Azure Website 默认时区为国际标准时间,对中国用户来说不太方便友好,如何设置成北京时间呢? 打开Azure Website的“配置”页,找到“应用设置”节点. 在应用设置中添加设置项,密钥 ...
- 使用HackRF+GNU Radio 破解吉普车钥匙信号
引文 我最近对软件定义的无线电技术(SDR)产生了浓厚的兴趣,而我对其中一款流行的SDR平台(HackRF)也产生了兴趣,而其频率接收的范围也在1MHz ~6GHz之间(范围较广).而这里也需要提及一 ...
- python3爬虫初探(三)之正则表达式
前面已经写了如何获取网页源码,那么接下来就是该解析网页并提取需要的数据了.这里简单写一下正则表达的用法. 首先,找个要抓取图片的网站,获取源码. import requests import re # ...
- Swift编程规范
文档编号: 应用开发Swift编码规范 (版本v1.0.0) 成文信息 主题词: Swift开发编码规范 作 者: 周少停 文档类别: 开发规范 审 核: 批 准: 文档性质: 初稿 ...
- Palindrome_滚动数组&&DP
Description A palindrome is a symmetrical string, that is, a string read identically from left to ri ...
- 为什么web标准中无法设置IE浏览器滚动条颜色了?
<!doctype html><html> <head> <meta charset="UTF-8"> <meta name= ...
- 《MORE EFFECTIVE C++》条款20 条款21
条款20 协助编译器实现返回值优化 当重载运算符的时候,比如+ - * / 这类运算符,该函数返回的值一定是个右值(即不能是引用),那么执行一次运算的开销可能会在临时对象上调用多次构造函数和析构函数, ...
- LeetCode Search a 2D Matrix(二分查找)
题意: 有一个矩阵,每行都有序,每行接在上一行尾后仍然有序.在此矩阵中查找是否存在某个数target. 思路: 这相当于用一个指针连续扫二维数组一样,一直p++就能到最后一个元素了.由于用vector ...
- postgresql 分区表创建及测试
1 建立分区 1.1. 创建主表 CREATE TABLE measurement ( city_id int not null, logdate date ...
- web app 开发必不可少的滑动插件 Flipsnap
flipsnap.js一个轻量级的滑动效果JS开发库,仅有8k大小(压缩版),包含了10种滑动方式,是web app开发必备的js库,除了兼容主流的智能手机浏览器(iossafari,android, ...