MATLAB基于深度学习框架GoogLeNet的网络摄像机图像分类

文章目录

  • 1、GoogLeNet
  • 2、开发环境及前期准备
  • 2.1 安装附加工具
  • 3、Deep Learning Toolbox 开发工具介绍
  • 4、代码实战

1、GoogLeNet

2014年,GoogLeNet和VGG是当年ImageNet挑战赛(ILSVRC14)的双雄,GoogLeNet获得了第一名、VGG获得了第二名,这两类模型结构的共同特点是层次更深了。VGG继承了LeNet以及AlexNet的一些框架结构(详见 大话CNN经典模型:VGGNet),而GoogLeNet则做了更加大胆的网络结构尝试,虽然深度只有22层,但大小却比AlexNet和VGG小很多,GoogleNet参数为500万个,AlexNet参数个数是GoogleNet的12倍,VGGNet参数又是AlexNet的3倍,因此在内存或计算资源有限时,GoogleNet是比较好的选择;从模型结果来看,GoogLeNet的性能却更加优越。

详情:大话CNN经典模型:GoogLeNet(从Inception v1到v4的演进)

2、开发环境及前期准备

开发环境:MATLAB2019a
最好用较新的的MATLAB版本,深度学习方向的库更新太快,老版本可能出现不兼容等问题。

两个重要附加工具模块:

  • Deep Learning Toolbox for GoogLeNet
  • MATLAB Support Package for USB Webcams

这两个都是需要下载安装的,MATLAB不自带,当然,很简单的,下面介绍如何安装

2.1 安装附加工具

MATLAB运行如下代码,如果没有安装这个附加工具,自动会出现报错:

camList = webcamlist

报错:

在这里插入图片描述
直接点击它报错中的链接即可,如果你的MATLAB还没有登录,这时候需要先登录,或者用邮箱注册一个账号。

之后就是安装:
MATLAB基于深度学习框架GoogLeNet的网络摄像机图像分类_第1张图片
Deep Learning Toolbox for GoogLeNet 的安装与上一个一致,运行一下下面的代码就可以:

net = googlenet; 

3、Deep Learning Toolbox 开发工具介绍

Deep Learning Toolbox™ 提供了一个用于通过算法、预训练模型和应用程序来设计和实现深度神经网络的框架。您可以使用卷积神经网络(ConvNet、CNN)和长短期记忆 (LSTM) 网络对图像、时序和文本数据执行分类和回归。应用程序和绘图可帮助您可视化激活值、编辑网络架构和监控训练进度。

对于小型训练集,您可以使用预训练深度网络模型(包括 SqueezeNet、Inception-v3、ResNet-101、GoogLeNet 和 VGG-19)以及从 TensorFlow®-Keras 和 Caffe 导入的模型执行迁移学习。

要加速对大型数据集的训练,您可以将计算和数据分布到桌面计算机上的多核处理器和 GPU 中(使用 Parallel Computing Toolbox™),或者扩展到群集和云,包括 Amazon EC2® P2、P3 和 G3 GPU 实例(使用 MATLAB® Distributed Computing Server™)。

4、代码实战

此示例说明如何使用预训练的深度卷积神经网络 GoogLeNet 实时对来自网络摄像机的图像进行分类。

使用 MATLAB®、普通的网络摄像机和深度神经网络来识别周围环境中的对象。此示例使用 GoogLeNet,它是预训练的深度卷积神经网络(CNN 或 ConvNet),已基于超过一百万个图像进行训练,可以将图像分为 1000 个对象类别(例如键盘、咖啡杯、铅笔和多种动物)。您可以下载 GoogLeNet 并使用 MATLAB 实时连续处理照相机图像。

GoogLeNet 已基于大量图像学习了丰富的特征表示。它以图像作为输入,然后输出图像中对象的标签以及每个对象类别的概率。您可以用周围的物品进行试验,以了解 GoogLeNet 对图像进行分类的准确程度。要了解有关网络对象分类的详细信息,可以实时显示排名前五的类的分数,而不是只显示最终的类决策。

加载照相机和预训练网络
连接到照相机并加载预训练的 GoogLeNet 网络。您可以在此步骤使用任何预训练网络。该示例需要 MATLAB Support Package for USB Webcams,以及 Deep Learning Toolbox™ Model for GoogLeNet Network。如果没有安装所需的支持包,软件会提供下载链接。在报错的红字中有安装的路径(Add-On-Explorer),只需要点击进去登陆便可以下载此模块:
1、调取摄像头程序:

camList = webcamlist
 
% Connect to the webcam.
cam = webcam(1)
 
preview(cam);
 
img = snapshot(cam);
 
% Display the frame in a figure window.
image(img);
 
for idx = 1:5
    img = snapshot(cam);
    image(img);
end
 
%% Once the connection is no longer needed, clear the associated variable.
% clear cam

2、识别显示程序

clear
close all
clc
camera = webcam;
net = googlenet;
 
%% 加载照相机和预训练网络
inputSize = net.Layers(1).InputSize(1:2)
 
 
figure
im = snapshot(camera);
image(im)
im = imresize(im,inputSize);
[label,score] = classify(net,im);
title({char(label),num2str(max(score),2)});
 
 
h = figure;
 
while ishandle(h)
    im = snapshot(camera);
    image(im)
    im = imresize(im,inputSize);
    [label,score] = classify(net,im);
    title({char(label), num2str(max(score),2)});
    drawnow
end
 
h = figure;
h.Position(3) = 2*h.Position(3);
ax1 = subplot(1,2,1);
ax2 = subplot(1,2,2);
 
im = snapshot(camera);
image(ax1,im)
im = imresize(im,inputSize);
[label,score] = classify(net,im);
title(ax1,{char(label),num2str(max(score),2)});
 
[~,idx] = sort(score,'descend');
idx = idx(5:-1:1);
classes = net.Layers(end).Classes;
classNamesTop = string(classes(idx));
scoreTop = score(idx);
 
barh(ax2,scoreTop)
xlim(ax2,[0 1])
title(ax2,'Top 5')
xlabel(ax2,'Probability')
yticklabels(ax2,classNamesTop)
ax2.YAxisLocation = 'right';
 
while ishandle(h)
    % Display and classify the image
    im = snapshot(camera);
    image(ax1,im)
    im = imresize(im,inputSize);
    [label,score] = classify(net,im);
    title(ax1,{char(label),num2str(max(score),2)});
 
    % Select the top five predictions
    [~,idx] = sort(score,'descend');
    idx = idx(5:-1:1);
    scoreTop = score(idx);
    classNamesTop = string(classes(idx));
 
    % Plot the histogram
    barh(ax2,scoreTop)
    title(ax2,'Top 5')
    xlabel(ax2,'Probability')
    xlim(ax2,[0 1])
    yticklabels(ax2,classNamesTop)
    ax2.YAxisLocation = 'right';
 
    drawnow
end

你可能感兴趣的:(MATLAB,神经网络,人工智能,深度学习,tensorflow,计算机视觉)