Python-基于卷积神经网络斑马线识别分类,准确率高达99%
引言
目前智慧城市的发展,人们生活处处有科技,比如人脸识别,智慧交通,无人驾驶等前沿的科技产品也都融入了人们生活中;
智慧交通的发展也越来越成熟,车辆识别,车辆跟踪,车辆分析,行人跟踪检测与行为分析,这些都越来越成熟,但是都是建立在斑马线的基础上来实现的。
智慧斑马线,严格地说,是用于(单条或区域多条)人行横道(斑马线)上,人、车、路、环境协同的一整套软硬件产品与服务,主要通过提高斑马线标线的清晰度和醒目度,以及智能网联控制,实现智能的斑马线通行的警示、调度、控制、多点联动。
智慧斑马线首先是斑马线。斑马线是一条线,对行人来说是保护道路通行安全的生命线;对城市交通管理来说,是对人、车、路进行协同工作的一条协同线,只有人和车、路都是按规则有秩序地协同,才能达到交通文明有序。智慧斑马线就是以技术为出发点,帮助行人和城市交管做到斑马线生命线和协同线的一种智能产品和服务。
神经网络的结构
神经网络模型包含三个部分:input layer(输入层)、hidden layer(中间层或隐藏层)、output layer(输出层)。其中,hidden layer的层数不固定,在某些简单问题中,hidden layer的层数可能为0,仅有input layer和output layer;在复杂问题中,hidden layer的层数也可能成百上千。
模型中每一层的节点称为“神经元”。位于input layer的神经元对应着训练数据的特征。hidden layer和output layer中的神经元由activation function(激活函数)表达,我们用字母 g g g表示。Activation function有很多种类型,最常用是sigmoid函数,它的表达式如下:
sigmoid函数图像如下图所示。当 x > > 0 x>>0 x>>0时, f ( x ) f(x) f(x)无限逼近于1;当 x < < 0 x<<0 x<<0时, f ( x ) f(x) f(x)无限逼近于0;当 x = 0 x=0 x=0时, f ( x ) = 0.5 f(x)=0.5 f(x)=0.5。
搭建模型
一、引入基本库
环境配置:
- Windows10系统
- Python–3.7.3
- tensorflow–2.3
- OpenCV–4.5.1
import tensorflow as tf
import matplotlib.pyplot as plt
import cv2 as cv
import pandas as pd
import numpy as np
import os
import shutil
from keras.models import Sequential, load_model
from keras import optimizers
from keras.preprocessing.image import ImageDataGenerator
from keras.layers import Conv2D, MaxPooling2D, Flatten, Dense
Conv2D :卷积
MaxPooling2D: 最大池化
Flatten: 从卷积层到全连接层的过渡(卷积),扁平数据
Dense: 全连接
二、数据集准备
数据集来源:斑马线数据集
在这里我们使用Keras自带的图像生成器ImageDataGenerator
,在这里下载下来的数据集并不需要我们去处理,我们只需要下载,解压就行;
ImageDataGenerator图像生成器他会根据train和test的子文件信息来给予标签;
#简单的二分类
train_dir = 'G:\\深度学习\\Zebra\\Zebra\\train'#训练集文件
val_dir = 'G:\\深度学习\\Zebra\\Zebra\\test' #验证集文件
train_datagen = ImageDataGenerator(rescale=1/255)
train_generator = train_datagen.flow_from_directory(train_dir, (50, 50), batch_size=20, class_mode='binary', shuffle=True)
validation_datagen = ImageDataGenerator(rescale=1/255)
validation_generator = validation_datagen.flow_from_directory(val_dir, (50, 50), batch_size=20, class_mode='binary')
三、模型搭建
在这里我们使用的是sigmoid函数作为输出层的激活函数,二分类
model = Sequential()
model.add(Conv2D(32, (3, 3),activation='relu', input_shape=(50, 50, 3)))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(64, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Conv2D(128, (3, 3), activation='relu'))
model.add(MaxPooling2D((2, 2)))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
model.summary()
四、模型训练
model.compile(loss='binary_crossentropy',#二分类,使用binary_crossentropy损失函数optimizer=optimizers.Adam(), #Adam优化器metrics=['acc'])
history = model.fit_generator(train_generator,steps_per_epoch=17, epochs=25,validation_data=validation_generator, validation_steps=6)
五、总结
我们根据模型训练过程当中的损失值和正确率可以看出模型的训练集acc达到了99.7%,而验证集达到95.45%,学习遇到了瓶颈;
train loss 不断下降,test loss趋于不变,说明网络过拟合;
这里我们就需要来调整参数:
- 改变模型,模型太大,太深,参数太多难以收敛,建议使用简单的模型
- 增加数据集
- 增大batch_size
- 添加正则
- dropsort 减少参数
这些方法都可以在抑制模型过拟合,但是最好的方法是改变模型和增加数据集
斑马线源代码
希望本博文对正在学习的你有用!
谢谢点赞评论!
Python-基于卷积神经网络斑马线识别分类,准确率高达99%相关推荐
- 毕业设计 - 基于卷积神经网络的乳腺癌分类 深度学习 医学图像
文章目录 1 前言 2 前言 3 数据集 3.1 良性样本 3.2 病变样本 4 开发环境 5 代码实现 5.1 实现流程 5.2 部分代码实现 5.2.1 导入库 5.2.2 图像加载 5.2.3 ...
- 基于卷积神经网络的句子分类模型【经典卷积分类附源码链接】
https://www.toutiao.com/a6680124799831769603/ 基于卷积神经网络的句子分类模型 题目: Convolutional Neural Networks for ...
- 基于卷积神经网络的高光谱分类 CNN+高光谱+印度松数据集
基于卷积神经网络的高光谱分类 一.研究现状 只考虑到高光谱图像的光谱特征,即: 1.提取特征(小波变换.Gabor纹理分析.形态学剖面) 2.利用分类方法分类(支持向量机.决策树.随机森林.神经网络) ...
- 【计算机视觉(CV)】基于卷积神经网络实现美食分类
[计算机视觉(CV)]基于卷积神经网络实现美食分类 活动地址:[CSDN21天学习挑战赛](https://marketing.csdn.net/p/bdabfb52c5d56532133df2adc ...
- 【Computer Vision】基于卷积神经网络实现美食分类
[Computer Vision]基于卷积神经网络实现美食分类 活动地址:[CSDN21天学习挑战赛](https://marketing.csdn.net/p/bdabfb52c5d56532133 ...
- Python 基于卷积神经网络(textCnn)对药品或疾病分类(适用于疾病归一化和药品归一化)
一.卷积神经网络(CNN) 复习知识:卷积神经网络(Convolutional Neural Network,CNN)针对全连接网络的局限做出了修正,加入了卷积层(Convolution层)和池化层( ...
- android平台基于卷积神经网络的识别
相关理论知识 卷积神经网络 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络,是深度学习的代表算法之一[][] .由于 ...
- 基于卷积神经网络的高光谱分类(1D、2D、3D-CNN)
算法原理 卷积神经网络(Convolutional Neural Networks,CNN)是深度学习中最常见的一种 算法,它具有强大的特征学习能力.CNN 通过结合局部感知区域.共享权重.空间或者 ...
- TextCNN——基于卷积神经网络的文本分类学习
1.CNN基础内容 CNN的全称是Convolutional Neural Network,是一种前馈神经网络.由一个或多个卷积层.池化层以及顶部的全连接层组成,在图像处理领域表现出色. 本文主要学习 ...
最新文章
- linux 管理命令 之 管理时间
- Android给自定义按键添加广播和通过广播给当前焦点输入框赋值
- P12 离散控制系统-《Matlab/Simulink与控制系统仿真》程序指令总结
- composer Failed to decode zlib stream
- Android触摸事件源码分析:Activity-ViewGroup-View
- ajax登陆返回值判断,一个简单的ajax用户登陆返回值问题?有代码
- CentOS 6.2安装
- linux驱动与dts匹配过程,自己编写从应用到DTS与驱动
- Spring基于注解的方式一
- Python 数据结构与算法 —— list与deque(双端队列)
- OpenJudge 2990:符号三角形 解析报告
- AD库转化为KiCad库(过程非常详细)
- php呼伦贝尔,呼伦贝尔php培训
- 1.0 信息化与信息系统
- python 局域网服务器_牛逼了!一行Python代码搭建一个局域网服务器
- GOOGLE登陆火星
- 动态规划——1296:开餐馆
- 南京周边城市两日游方案
- 虚拟机去虚拟化教程,过游戏检测,不全你打我
- 知乎收藏数最高的1000个回答
热门文章
- GeoTools入门(四)-- 创建shape要素
- 2020年社保费用托收日期
- 参与有奖、最高300元、免费打样的PCB书签设计大赛竟然这么简单?作品火热征集中
- VMware Workstation(虚拟机软件) V10.0 简体中文版可以安装了
- matlab标量数据,标量扩张 - MATLAB 系统中文帮助手册
- SGAME 框架说明
- linux 用pe安装win7系统,在U盘PE上安装Linux操作系统的详细教程
- 摩托罗拉里程碑1刷机教程
- 通过PS给暗黄肌肤进行白皙调色
- 神雕侠侣手游服务器维修,《神雕侠侣》2021年3月25日更新维护新服开启公告