前言:本文介绍轻量级卷积神经网络MobileNet网络实战,包含MobileNetV1、MobileNetV2、ResNet50三个预训练模型可供选择。
实现:1.预训练MobileNet图像分类,2.调用摄像头实时MobileNet图像分类,3.MobileNet视频图像分类。
MobileNet网络理论详解:【嵌入式AI开发】轻量级卷积神经网络MobileNetV1网络详解-CSDN博客
调用摄像头实时MobileNet图像分类效果:
预训练MobileNet图像分类效果:
MobileNet视频图像分类效果与调用摄像头实时MobileNet图像分类效果一致,对输入的任意视频进行视频图像分类输出,生成一个mp4文件。
代码资源的三个.py文件对应三个实战项目
目录
预训练MobileNet图像分类
调用摄像头实时MobileNet图像分类
MobileNet视频图像分类
源码工程下载链接
预训练MobileNet图像分类
首先是导入预训练模型。导入MobileNet V1预训练模型或者导入MobileNet V2预训练模型或者导入ResNet50预训练模型,任选其一便可,只运行一个model,载入模型的变量为model。
本次运行的是MobileNet V1,如下为运行出来的model模型结构,可以看到显示卷积层,然后是深度可分离卷积模块(先DW卷积+BN+RELU,再PW卷积+BN+RELU),然后经过全局平均池化得到1024个向量,输入到1000个神经元的全连接层中,输出1000个类别的logit,再经过softmax归一化得到1000个类别的概率。
整个模型是有可训练参数Trainable params: 4,231,976 (16.14 MB)
Model: "mobilenet_1.00_224"
┌─────────────────────────────────┬────────────────────────┬───────────────┐
│ Layer (type) │ Output Shape │ Param # │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ input_layer (InputLayer) │ (None, 224, 224, 3) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv1 (Conv2D) │ (None, 112, 112, 32) │ 864 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv1_bn (BatchNormalization) │ (None, 112, 112, 32) │ 128 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv1_relu (ReLU) │ (None, 112, 112, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_dw_1 (DepthwiseConv2D) │ (None, 112, 112, 32) │ 288 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_dw_1_bn │ (None, 112, 112, 32) │ 128 │
│ (BatchNormalization) │ │ │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_dw_1_relu (ReLU) │ (None, 112, 112, 32) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_pw_1 (Conv2D) │ (None, 112, 112, 64) │ 2,048 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_pw_1_bn │ (None, 112, 112, 64) │ 256 │
│ (BatchNormalization) │ │ │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_pw_1_relu (ReLU) │ (None, 112, 112, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_pad_2 (ZeroPadding2D) │ (None, 113, 113, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_dw_2 (DepthwiseConv2D) │ (None, 56, 56, 64) │ 576 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_dw_2_bn │ (None, 56, 56, 64) │ 256 │
│ (BatchNormalization) │ │ │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_dw_2_relu (ReLU) │ (None, 56, 56, 64) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_pw_2 (Conv2D) │ (None, 56, 56, 128) │ 8,192 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_pw_2_bn │ (None, 56, 56, 128) │ 512 │
│ (BatchNormalization) │ │ │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_pw_2_relu (ReLU) │ (None, 56, 56, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_dw_3 (DepthwiseConv2D) │ (None, 56, 56, 128) │ 1,152 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_dw_3_bn │ (None, 56, 56, 128) │ 512 │
│ (BatchNormalization) │ │ │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_dw_3_relu (ReLU) │ (None, 56, 56, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_pw_3 (Conv2D) │ (None, 56, 56, 128) │ 16,384 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_pw_3_bn │ (None, 56, 56, 128) │ 512 │
│ (BatchNormalization) │ │ │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_pw_3_relu (ReLU) │ (None, 56, 56, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_pad_4 (ZeroPadding2D) │ (None, 57, 57, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_dw_4 (DepthwiseConv2D) │ (None, 28, 28, 128) │ 1,152 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_dw_4_bn │ (None, 28, 28, 128) │ 512 │
│ (BatchNormalization) │ │ │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_dw_4_relu (ReLU) │ (None, 28, 28, 128) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_pw_4 (Conv2D) │ (None, 28, 28, 256) │ 32,768 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_pw_4_bn │ (None, 28, 28, 256) │ 1,024 │
│ (BatchNormalization) │ │ │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_pw_4_relu (ReLU) │ (None, 28, 28, 256) │ 0 │
├─────────────────────────────────┼────────────────────────┼───────────────┤
│ conv_dw_5 (DepthwiseConv2D) │ (None, 28, 28, 256) │