基于VGG-16+Android+Python的智能车辆驾驶行为分析—深度学习算法应用(含全部工程源码)+数据集+模型(二)

目录

  • 前言
  • 总体设计
    • 系统整体结构图
    • 系统流程图
  • 运行环境
  • 模块实现
    • 1. 数据预处理
      • 1)数据集来源
      • 2)数据集内容
      • 3)数据集预处理
    • 2. 模型构建
      • 1)定义模型结构
      • 2)优化损失函数
  • 相关其它博客
  • 工程源代码下载
  • 其它资料下载


在这里插入图片描述

前言

本项目采用VGG-16网络模型,使用Kaggle开源数据集,旨在提取图片中的用户特征,最终在移动端实现对不良驾驶行为的识别功能。

首先,通过使用VGG-16网络模型,本项目能够深入学习和理解驾驶场景图像中的特征。VGG-16是一种深度卷积神经网络,特别适用于图像识别任务,通过多层次的卷积和池化层,能够有效地提取图像中的抽象特征。

其次,项目利用Kaggle提供的开源数据集,包括各种驾驶场景图像,覆盖了不同的驾驶行为和条件。这样的数据集是训练模型所需的关键资源。

接下来,利用训练好的VGG-16模型,项目提取图像中的用户特征。包括驾驶行为的姿势、眼神、手部动作等方面的特征,有助于判断是否存在不良驾驶行为。

最后,通过在移动端实现这个模型,可以将不良驾驶行为的识别功能直接部署到车辆或驾驶辅助系统中。这种实时的、移动端的识别方案有望在驾驶安全和监管方面发挥积极的作用。

总的来说,项目结合了深度学习、图像处理和移动端技术,致力于实现对不良驾驶行为的智能化识别,为提升驾驶安全提供了一种创新的解决方案。

总体设计

本部分包括系统整体结构图和系统流程图。

系统整体结构图

系统整体结构如图所示。

在这里插入图片描述

系统流程图

系统流程如图所示。

在这里插入图片描述
VGG-16网络架构如图所示。

在这里插入图片描述

运行环境

本部分包括Python环境、TensorFlow环境、Pycharm环境和Android环境。

详见博客。

模块实现

本项目包括4个模块:数据预处理、模型构建、模型训练及保存、模型生成。下面分别给出各模块的功能介绍及相关代码。

1. 数据预处理

本部分包括数据集来源、内容和预处理。

1)数据集来源

使用开源数据集state-farm-distracted-driver-detection,下载地为:https://www.kaggle.com/c/state-farm-distradcted-driver-detection/data,直接在网页上单击Download按钮下载。也可以调用API下载,下载地址为:kaggle/competitions/download-c/state-farm-distracted-driver-detection。数据集包括22424张训练集图片,若干测试集图片,总计10万+。由于是竞赛数据集,测试集的图片没有标签,故不使用。

2)数据集内容

数据集共包括10个驾驶状态:安全驾驶、右手使用手机、右手打电话、左手使用手机、左手打电话、调广播、喝水、向后拿东西、整理头发或化妆、与乘客交流。除安全驾驶外都是危险状态,如图所示。

基于VGG-16+Android+Python的智能车辆驾驶行为分析—深度学习算法应用(含全部工程源码)+数据集+模型(二)_第1张图片

3)数据集预处理

数据集中每张图片大小都是640×480像素,从同一角度拍摄的车载监控图片,数据集十分规范,无噪声,不需要进行过多的预处理,在训练前通过图像增广进行预处理里产生相似但又不同的训练样本。随机改变训练样本可以降低模型对某些属性的依赖,提高模型的泛化能力。

train_datagen = ImageDataGenerator(rescale=1.0/255, shear_range=0.2, zoom_range=0.2, horizontal_flip=True)
#采用图像缩放、随机水平翻转、随机剪切、随机缩放进行图像增广

2. 模型构建

数据加载进模型之后,需要定义模型结构,并优化损失函数。

1)定义模型结构

使用VGG-16网络结构,共13个卷积层、3个全连接层和5个池化层,使用Keras库搭建模型,构建Sequential顺序模型,它由多个网络层线性堆叠而成。

model = Sequential() 
#快速开始序贯模型Sequential,通过ADD的方法将layer逐个加入模型中
model.add(ZeroPadding2D((1, 1), input_shape=(150, 150, 3)))
#图像上下左右都补0,输入图像
model.add(Convolution2D(64, 3, 3, activation='relu'))
#使用64个3*3的卷积核,激活Relu函数
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
#最大值池化窗口2*2,步长两个方向都是2
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(128, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(128, 3, 3, activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1, 1)))
model.add(Convolution2D(512, 3, 3, activation='relu'))
model.add(MaxPooling2D((2, 2), strides=(2, 2)))
#卷积层以及池化层搭建完毕
model.load_weights('vgg16_weights_tf_dim_ordering_tf_kernels_notop.h5')
#加载上述模型中预训练的权重参数,不含top model
top_model = Sequential()
#构建多层感知机MLP作为top model
top_model.add(Flatten(input_shape=model.output_shape[1:]))
#flatten用于将多维数据变成一维,卷积层到全连接层的过渡
top_model.add(Dense(256, activation='relu'))
#加入全连接层,输出维度256个神经元,激活函数为Relu函数
top_model.add(Dropout(0.5))
#加入dropout层防止训练过拟合,控制需要断开的神经元比例为0.5
top_model.add(Dense(256, activation='relu'))
top_model.add(Dropout(0.5))
top_model.add(Dense(10, activation='softmax'))
#输出层,softmax分类,共10类
model.add(top_model)
#将top_model加入之前的模型中
for layer in model.layers[:25]:
    layer.trainable = False
#将卷积神经网络权重参数设置为不可改变,减少训练量
#VGG16模型搭建完毕

2)优化损失函数

优化损失函数相关代码如下:

model.compile(loss='categorical_crossentropy', optimizer='adadelta', metrics=['accuracy'])
#因为是多分类问题,标签为one-hot编码,损失函数设置为类别交叉熵,指标列表metrics设置为accuracy,使用adadelta优化器,加快收敛速度,防止局部最优解

相关其它博客

基于VGG-16+Android+Python的智能车辆驾驶行为分析—深度学习算法应用(含全部工程源码)+数据集+模型(一)

基于VGG-16+Android+Python的智能车辆驾驶行为分析—深度学习算法应用(含全部工程源码)+数据集+模型(三)

基于VGG-16+Android+Python的智能车辆驾驶行为分析—深度学习算法应用(含全部工程源码)+数据集+模型(四)

工程源代码下载

详见本人博客资源下载页


其它资料下载

如果大家想继续了解人工智能相关学习路线和知识体系,欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线,所有资料免关注免套路直接网盘下载》
这篇博客参考了Github知名开源平台,AI技术平台以及相关领域专家:Datawhale,ApacheCN,AI有道和黄海广博士等约有近100G相关资料,希望能帮助到所有小伙伴们。

你可能感兴趣的:(深度学习,学习路线,图像识别,android,python,深度学习,opencv,java,目标检测,目标跟踪)