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

    前言

    对前面的东西更新了一下。地方包括:
    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下载吧!

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

  • 相关阅读:
    sql取每个分组的第一行数据
    PHP microtime() 函数
    笔记产品会不会被淘汰
    making an os NO.1 怎样进内核之二
    hjkhjkh
    HTTP协议理解
    hjkhjkh
    making an os NO.1 怎样进内核之一
    hjkhjkh
    笔记产品会不会被淘汰
  • 原文地址:https://www.cnblogs.com/mtcnn/p/9412023.html
Copyright © 2011-2022 走看看