前言

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

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下载吧!

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

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

  1. 基于OpenCL的深度学习工具:AMD MLP及其使用详解

    基于OpenCL的深度学习工具:AMD MLP及其使用详解 http://www.csdn.net/article/2015-08-05/2825390 发表于2015-08-05 16:33| 59 ...

  2. 利用MONAI加速医学影像学的深度学习研究

    利用MONAI加速医学影像学的深度学习研究 Accelerating Deep Learning Research in Medical Imaging Using MONAI 医学开放式人工智能网络 ...

  3. [深度学习工具]·极简安装Dlib人脸识别库

    [深度学习工具]·极简安装Dlib人脸识别库 Dlib介绍 Dlib是一个现代化的C ++工具箱,其中包含用于在C ++中创建复杂软件以解决实际问题的机器学习算法和工具.它广泛应用于工业界和学术界,包 ...

  4. 利用 TFLearn 快速搭建经典深度学习模型

      利用 TFLearn 快速搭建经典深度学习模型 使用 TensorFlow 一个最大的好处是可以用各种运算符(Ops)灵活构建计算图,同时可以支持自定义运算符(见本公众号早期文章<Tenso ...

  5. 基于深度学习的安卓恶意应用检测----------android manfest.xml + run time opcode, use 深度置信网络(DBN)

    基于深度学习的安卓恶意应用检测 from:http://www.xml-data.org/JSJYY/2017-6-1650.htm 苏志达, 祝跃飞, 刘龙     摘要: 针对传统安卓恶意程序检测 ...

  6. YOLO_Online 将深度学习最火的目标检测做成在线服务实战经验分享

    YOLO_Online 将深度学习最火的目标检测做成在线服务 第一次接触 YOLO 这个目标检测项目的时候,我就在想,怎么样能够封装一下让普通人也能够体验深度学习最火的目标检测项目,不需要关注技术细节 ...

  7. Windows10 利用 Docker 配置 TensofFlow 深度学习工具

    TensorFlow 这个不用多介绍了吧,大家都知道,Google的开源深度学习软件库,官网点这里:https://www.tensorflow.org/ 当然这个工具官方支持装在 Ubuntu 和 ...

  8. 【一统江湖的大前端(9)】TensorFlow.js 开箱即用的深度学习工具

    示例代码托管在:http://www.github.com/dashnowords/blogs 博客园地址:<大史住在大前端>原创博文目录 目录 一. 上手TensorFlow.js 二. ...

  9. deep learning...深入学习深度学习 --工具篇

    Caffe( http://caffe.berkeleyvision.org/ )是一个清晰而高效的深度学习框架,其作者是博士毕业于UC Berkeley的贾扬清( http://daggerfs.c ...

随机推荐

  1. ASP.NET-Request对象

    前言:Request对象主要用于获取来自客户端的数据,如用户填入表单的数据.保存在客户端的Cookie等. 一.Request对象概述 1.主要属性  ApplicationPath  获取服务器上a ...

  2. HDU1863_畅通project【Prim】【并查集】

    畅通project Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  3. linux 磁盘分区,主分区,扩展分区,逻辑分区以sata接口为例

     以sata接口(依据linux内核检測其顺序 sda,sdb...)为例, 1, 硬盘的限制,最多仅仅能设置4个分区(主分区+扩展分区),路径例如以下, /dev/sda1  /dev/sda2 ...

  4. iOS中respondsToSelector与conformsToProtocol的相关理解和使用

    respondsToSelector相关的方法 : -(BOOL) isKindOfClass: classObj 用来判断是否是某个类或其子类的实例 -(BOOL) isMemberOfClass: ...

  5. RAC连接时的2种方式Connect Time Failver和taf

    1. Client-side Connect Time Failover  在客户端的tnsname中配置多个地址,当用户连接时会按照次序尝试各个地址,直到连接成功,连接好后,不再检测地址是否可用,如 ...

  6. HTML5与CSS3权威指南之CSS3学习记录

    title: HTML5与CSS3权威指南之CSS3学习记录 toc: true date: 2018-10-14 00:06:09 学习资料--<HTML5与CSS3权威指南>(第3版) ...

  7. 51nod 1096 距离之和最小 思维题,求中位数

    题目: 在一条直线上,与两个点距离之和最小的点,是怎样的点? 很容易想到,所求的点在这两个已知点的中间,因为两点之间距离最短. 在一条直线上,与三个点距离之和最小的点,是怎样的点? 由两个点的规律,我 ...

  8. C# 对象初始化器和集合初始化器

    /// <summary>/// 图书类/// </summary>public class Book {     /// <summary>     /// 图书 ...

  9. mysql插入数据出现java.lang.NullPointerException

    在写购物车持久层的时候,要进行测试的时候居然出现了空指针异常: 最后发现是测试类少了 @RunWith(SpringRunner.class)@SpringBootTest 如下是没改之前的测试类: ...

  10. java开发过程中几种常用算法

    排序算法 排序算法中包括:简单排序.高级排序 简单排序 简单排序常用的有:冒泡排序.选择排序.插入排序 冒泡排序代码如下: private static void bubbleSrot(int[] a ...