您的位置:首页 > 编程语言 > MATLAB

利用Matlab自带的深度学习工具进行车辆区域检测与车型识别【Github更新!!!】(三)

2017-06-13 19:29 1881 查看

前言

对前面的东西更新了一下。地方包括:

1、GUI的更新,更友好的用户界面

2、支持用手直接画车辆区域,并且识别出来

3、将proposal、detect、fine-grained classification三个步骤分离

4、在传入Classification Net的时候,不再循环传入分类,而是将检测出的proposal一起截取形成一个image4d,共同传入alexnet。此举是为了加速。

Github

https://github.com/ChenJoya/Vehicle_Detection_Recognition

效果

直接看看吧!

1、四个步骤:

载入图像:



区域推荐:(只显示了一部分)



区域精细化:



分类:



2、可以直接截取车辆区域:



3、视频中的检测与识别:



4、支持自己载入模型:



程序设计

采用CarProphet类进行接口设计,供GUI中不同的回调函数调用。

声明

global Predictor;
Predictor=CarProphet('Model/cifar10NetRCNN.mat','Model/AlexNet_New.mat','Model/cars_meta.mat');


采用全局变量的形式,让GUI能够调用其中的成员变量和函数。

三个关键函数:

function [Proposal,Scores]=selective_search(Predictor)
[Proposal,Scores]=Predictor.RCNNModel.cifar10NetRCNN.RegionProposalFcn(Predictor.Mat);
end

function RealRegion=rcnn_forward(Predictor)
[bboxes, scores, ~]= Predictor.RCNNModel.cifar10NetRCNN.detect(Predictor.Mat);
CarScores=scores(:,1);
HighProbROI_Index=find(CarScores>Predictor.Threshold);
RealRegion=bboxes(HighProbROI_Index,:);
end

function [rois,classes]=classify(Predictor)
size_=size(Predictor.RealRegion);
length_=size_(1);
img_batch4d=zeros(227,227,3,length_);
for i=1:length_
crop_roi=Predictor.RealRegion(i,:);
img_single=imcrop(Predictor.Mat,crop_roi);
img_single=imresize(img_single,[227 227]);
img_batch4d(:,:,:,i)=img_single; % Constructing 4d-array images
end
if(~isempty(img_batch4d))
label_nums=Predictor.ClassifyModel.AlexNet_New.classify(img_batch4d);
%draw labels in picture
classes=Predictor.class_array.class_names(label_nums);
rois=Predictor.RealRegion;
end
end


用于显示的:

core_func文件夹下:

function DrawMat=draw(DrawMat,HighScoreProposals)
%draw box
size_=size(HighScoreProposals);
length_=size_(1);
for i=1:length_
SingleBox_=HighScoreProposals(i,:);
DrawMat=insertObjectAnnotation(DrawMat, 'rectangle', SingleBox_, '','LineWidth',1);
end
end
function DrawMat=draw_roi_class(DrawMat,rois,classes)
%draw box
size_=size(rois);
length_=size_(1);
for i=1:length_
SingleBox_=rois(i,:);
DrawMat=insertObjectAnnotation(DrawMat, 'rectangle', SingleBox_, classes{i},'LineWidth',1);
end
end

function HighScoreProposals=get_highscore_proposals(Proposals,Scores)
%score 归一化
score_0_1_=mapminmax(Scores',0,1);

%选择阈值
score_more_index=find(score_0_1_>0.5);

%得到得分高的proposals
HighScoreProposals=Proposals(score_more_index,:);
end


直接在https://github.com/ChenJoya/Vehicle_Detection_Recognitionx下载吧!

注意:模型没有重新训练。有时间我再训练新的:)

—————————————–2018年1月22日更—————————————————-

【个人联系方式与一些鼓励/道歉】来来来我们约谈技术~

http://blog.csdn.net/mr_curry/article/details/79132558
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐