基于深度学习的交通标志图像分类识别系统
温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :)
1. 项目简介
本文详细探讨了一基于深度学习的交通标志图像识别系统。采用TensorFlow和Keras框架,利用卷积神经网络(CNN)进行模型训练和预测,并引入VGG16迁移学习模型,取得96%的高准确率。通过搭建Web系统,用户能上传交通标志图片,系统实现了自动实时的交通标志分类识别。该系统不仅展示了深度学习在交通领域的实际应用,同时为用户提供了一种高效、准确的交通标志识别服务。
2. 交通标志数据集读取
数据集里面的图像具有不同大小,光照条件,遮挡情况下的43种不同交通标志符号,图像的成像情况与你实际在真实环境中不同时间路边开车走路时看到的交通标志的情形非常相似。训练集包括大约39,000个图像,而测试集大约有12,000个图像。图像不能保证是固定 的尺寸,标志不一定在每个图像中都是居中。每个图像包含实际交通标志周围10%左右的边界。
folders = os.listdir(train_path)train_number = []
class_num = []for folder in folders:train_files = os.listdir(train_path + '/' + folder)train_number.append(len(train_files))class_num.append(classes[int(folder)])# 不同类别交通标志数量,并进行排序
zipped_lists = zip(train_number, class_num)
sorted_pairs = sorted(zipped_lists)
tuples = zip(*sorted_pairs)
train_number, class_num = [ list(t) for t in tuples]# 绘制不同类别交通标志数量分布柱状图
plt.figure(figsize=(21,10))
plt.bar(class_num, train_number)
plt.xticks(class_num, rotation='vertical', fontsize=16)
plt.title('不同类别交通标志数量分布柱状图', fontsize=20)
plt.show()
划分训练集、验证集:
X_train, X_val, y_train, y_val = train_test_split(image_data, image_labels, test_size=0.3, random_state=42, shuffle=True)X_train = X_train/255
X_val = X_val/255print("X_train.shape", X_train.shape)
print("X_valid.shape", X_val.shape)
print("y_train.shape", y_train.shape)
print("y_valid.shape", y_val.shape)
类别标签进行 One-hot 编码:
y_train = keras.utils.to_categorical(y_train, NUM_CATEGORIES)
y_val = keras.utils.to_categorical(y_val, NUM_CATEGORIES)print(y_train.shape)
print(y_val.shape)
3. 卷积神经网络模型构建
model = keras.models.Sequential([ keras.layers.Conv2D(filters=16, kernel_size=(3,3), activation='relu', input_shape=(IMG_HEIGHT,IMG_WIDTH,channels)),keras.layers.Conv2D(filters=32, kernel_size=(3,3), activation='relu'),# ......keras.layers.Conv2D(filters=64, kernel_size=(3,3), activation='relu'),# ......keras.layers.Flatten(),keras.layers.Dense(512, activation='relu'),keras.layers.BatchNormalization(),keras.layers.Dropout(rate=0.5),keras.layers.Dense(43, activation='softmax')
])
4. 模型训练与性能评估
设置模型训练参数:
epochs = 20initial_learning_rate = 5e-5lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(initial_learning_rate, #设置初始学习率decay_steps=64, #每隔多少个step衰减一次decay_rate=0.98, #衰减系数staircase=True)# 将指数衰减学习率送入优化器
optimizer = tf.keras.optimizers.Adam(learning_rate=lr_schedule)model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['accuracy'])history = model.fit(X_train, y_train, batch_size=32, epochs=epochs, validation_data=(X_val, y_val))
加载测试集进行模型评估:
# 计算测试集准确率
pred = model.predict(X_test)
pred_labels = np.argmax(pred, 1)print('测试集准确率: ',accuracy_score(labels, pred_labels)*100)
测试集准确率: 93.24623911322249
5. 基于迁移学习的交通标志识别
from tensorflow.keras.applications import VGG16height = 32
width = 32vgg_base_model = VGG16(weights='imagenet', include_top=False, input_shape=(height,width,3))
vgg_base_model.trainable=Truevgg_model = tf.keras.Sequential([vgg_base_model,keras.layers.BatchNormalization(),keras.layers.Flatten(),keras.layers.Dense(512, activation='relu'),keras.layers.BatchNormalization(),keras.layers.Dropout(rate=0.5),keras.layers.Dense(43, activation='softmax')])vgg_model.summary()
Epoch 1/20 858/858 [==============================] - ETA: 0s - loss: 0.9774 - accuracy: 0.7366 Epoch 1: val_accuracy improved from -inf to 0.94806, saving model to best_model.h5 858/858 [==============================] - 334s 387ms/step - loss: 0.9774 - accuracy: 0.7366 - val_loss: 0.1651 - val_accuracy: 0.9481 Epoch 2/20 858/858 [==============================] - ETA: 0s - loss: 0.0737 - accuracy: 0.9804 Epoch 2: val_accuracy improved from 0.94806 to 0.97866, saving model to best_model.h5 858/858 [==============================] - 350s 408ms/step - loss: 0.0737 - accuracy: 0.9804 - val_loss: 0.0750 - val_accuracy: 0.9787 Epoch 3/20 858/858 [==============================] - ETA: 0s - loss: 0.0274 - accuracy: 0.9926 Epoch 3: val_accuracy improved from 0.97866 to 0.98266, saving model to best_model.h5 858/858 [==============================] - 351s 409ms/step - loss: 0.0274 - accuracy: 0.9926 - val_loss: 0.0681 - val_accuracy: 0.9827 Epoch 4/20 858/858 [==============================] - ETA: 0s - loss: 0.0197 - accuracy: 0.9946 Epoch 4: val_accuracy improved from 0.98266 to 0.99779, saving model to best_model.h5 858/858 [==============================] - 339s 395ms/step - loss: 0.0197 - accuracy: 0.9946 - val_loss: 0.0085 - val_accuracy: 0.9978 Epoch 5/20 858/858 [==============================] - ETA: 0s - loss: 0.0081 - accuracy: 0.9982 Epoch 5: val_accuracy improved from 0.99779 to 0.99830, saving model to best_model.h5 858/858 [==============================] - 364s 424ms/step - loss: 0.0081 - accuracy: 0.9982 - val_loss: 0.0067 - val_accuracy: 0.9983 Epoch 6/20 858/858 [==============================] - ETA: 0s - loss: 0.0025 - accuracy: 0.9995 Epoch 6: val_accuracy improved from 0.99830 to 0.99855, saving model to best_model.h5 858/858 [==============================] - 354s 413ms/step - loss: 0.0025 - accuracy: 0.9995 - val_loss: 0.0053 - val_accuracy: 0.9986 Epoch 7/20 858/858 [==============================] - ETA: 0s - loss: 0.0030 - accuracy: 0.9992 Epoch 7: val_accuracy did not improve from 0.99855 858/858 [==============================] - 333s 389ms/step - loss: 0.0030 - accuracy: 0.9992 - val_loss: 0.0126 - val_accuracy: 0.9969 Epoch 7: early stopping
模型评估:
# 计算测试集准确率
pred = vgg_model.predict(X_test)
pred_labels = np.argmax(pred, 1)print('测试集准确率: ',accuracy_score(labels, pred_labels)*100)
测试集准确率: 96.02533650039588
6. 测试集预测结果可视化
plt.figure(figsize = (25, 25))start_index = 0
for i in range(25):plt.subplot(5, 5, i + 1)plt.grid(False)plt.xticks([])plt.yticks([])prediction = pred_labels[start_index + i]actual = labels[start_index + i]col = 'g'if prediction != actual:col = 'r'plt.xlabel('实际类别:{}\n预测类别:{}'.format(classes[actual], classes[prediction]), color = col, fontsize=18)plt.imshow(X_test[start_index + i])
plt.show()
7. 交通标志分类识别系统
7.1 首页
7.2 交通标志在线识别
8. 结论
本文详细探讨了一基于深度学习的交通标志图像识别系统。采用TensorFlow和Keras框架,利用卷积神经网络(CNN)进行模型训练和预测,并引入VGG16迁移学习模型,取得96%的高准确率。通过搭建Web系统,用户能上传交通标志图片,系统实现了自动实时的交通标志分类识别。该系统不仅展示了深度学习在交通领域的实际应用,同时为用户提供了一种高效、准确的交通标志识别服务。
欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。技术交流、源码获取认准下方 CSDN 官方提供的学长 QQ 名片 :)
精彩专栏推荐订阅:
1. Python数据挖掘精品实战案例
2. 计算机视觉 CV 精品实战案例
3. 自然语言处理 NLP 精品实战案例
相关文章:
基于深度学习的交通标志图像分类识别系统
温馨提示:文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本文详细探讨了一基于深度学习的交通标志图像识别系统。采用TensorFlow和Keras框架,利用卷积神经网络(CNN)进行模型训练和预测,并引入VGG16迁移学习…...
使用uni-app editor富文本组件设置富文本内容及解决@Ready先于onload执行,无法获取后端接口数据的问题
开始使用富文本组件editor时,不知如何调用相关API设置富文本内容和获取内容,本文将举例详解 目录 一.了解editor组件的常用属性及相关API 1.属性常用说明 2.富文本相关API说明 1)editorContext 2) editorContext.setContents…...
Spring高手之路-Spring事务的传播机制(行为、特性)
目录 含义 七种事务传播机制 1.REQUIRED(默认) 2.REQUIRES_NEW 3.SUPPORTS 4.NOT_SUPPORTED 5.MANDATORY 6.NEVER 7.NESTED 含义 Spring事务的传播机制是指在多个事务方法相互调用时,如何处理这些事务的传播行为。对应七种事务传播行为…...
简易机器学习笔记(八)关于经典的图像分类问题-常见经典神经网络LeNet
前言 图像分类是根据图像的语义信息对不同类别图像进行区分,是计算机视觉的核心,是物体检测、图像分割、物体跟踪、行为分析、人脸识别等其他高层次视觉任务的基础。图像分类在许多领域都有着广泛的应用,如:安防领域的人脸识别和…...
pytest conftest通过fixture实现变量共享
conftest.py scope"module" 只对当前执行的python文件 作用 pytest.fixture(scope"module") def global_variable():my_dict {}yield my_dict test_case7.py import pytestlist1 []def test_case001(global_variable):data1 123global_variable.u…...
系列五、搭建Naco(集群版)
一、搭建Naco(集群版) 1.1、前置说明 (1)64位Red Hat7 Linux 系统; (2)64位JDK1.8;备注:如果没有安装JDK,请参考【系列二、Linux中安装JDK】 (3&…...
JavaScript中alert、prompt 和 confirm区别及使用【通俗易懂】
✨前言✨ 本篇文章主要在于,让我们看几个与用户交互的函数:alert,prompt 和confirm的使用及区别 🍒欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍒博主将持续更新学习记录收获&…...
【GoLang入门教程】Go语言几种标准库介绍(四)
编程语言的未来? 文章目录 编程语言的未来?前言几种库fmt库 (格式化操作)关键函数:示例 Go库标准库第三方库示例 html库(HTML 转义及模板系统)主要功能:示例 总结专栏集锦写在最后 前言 上一篇,我们介绍了debug、enco…...
面试算法:快速排序
题目 快速排序是一种非常高效的算法,从其名字可以看出这种排序算法最大的特点就是快。当表现良好时,快速排序的速度比其他主要对手(如归并排序)快2~3倍。 分析 快速排序的基本思想是分治法,排序过程如下…...
航空业数字化展翅高飞,开源网安专业服务保驾护航
某知名航空公司是中国首批民营航空公司之一,运营国内外航线200多条,也是国内民航最高客座率的航空公司之一。在数字化发展中,该航空公司以数据驱动决策,通过精细化管理、数字创新和模式优化等方式,实现了精准营销和个…...
SpringBoot学习(三)-员工管理系统开发(重在理解)
注:此为笔者学习狂神说SpringBoot的笔记,其中包含个人的笔记和理解,仅做学习笔记之用,更多详细资讯请出门左拐B站:狂神说!!! 本文是基于狂神老师SpringBoot教程中的员工管理系统从0到1的实践和理解。该系统应用SpringB…...
2 Windows网络编程
1 基础概念 1.1 socket概念 Socket 的原意是“插座”,在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。Socket本质上是一个抽象层,它是一组用于网络通信的API,包括了一系列…...
uniapp选择android非图片文件的方案踩坑记录
这个简单的问题我遇到下面6大坑,原始需求是选择app如android的excel然后读取到页面并上传表格数据json 先看看效果 uniapp 选择app excel文件读取 1.uniapp自带不支持 uniapp选择图片和视频非常方便自带已经支持可以直接上传和读取 但是选择word excel的时候就出现…...
前端发开的性能优化 请求级:请求前(资源预加载和预读取)
预加载 预加载:是优化网页性能的重要技术,其目的就是在页面加载过程中先提前请求和获取相关的资源信息,减少用户的等待时间,提高用户的体验性。预加载的操作可以尝试去解决一些类似于减少首次内容渲染的时间,提升关键资…...
B01、类加载子系统-02
JVM架构图-英文版 中文版见下图: 1、概述类的加载器及类加载过程 1.1、类加载子系统的作用 类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engi…...
用PHP搭建一个绘画API
【腾讯云AI绘画】用PHP搭建一个绘画API 大家好!今天我要给大家推荐的是如何用PHP搭建一个绘画API,让你的网站或应用瞬间拥有强大的绘画能力!无论你是想要让用户在网页上绘制自己的创意,还是想要实现自动绘画生成特效,这…...
西安人民检察院 | OLED翻页查询一体机
产品:55寸OLED柔性屏 项目时间:2023年12月 项目地点:西安 在2023年12月,西安人民检察院引入了OLED翻页查询一体机,为来访者提供了一种全新的信息查询方式。 这款一体机采用55寸OLED柔性屏,具有高清晰度、…...
superset利用mysql物化视图解决不同数据授权需要写好几次中文别名的问题
背景 在使用superset时,给不同的人授权不同的数据,需要不同的数据源,可视化字段希望是中文,所以导致不同的人需要都需要去改表的字段,因此引入视图,将视图中字段名称设置为中文 原表数据 select * from …...
输入输出流
1.输入输出流 输入/输出流类:iostream---------i input(输入) o output(输出) stream:流 iostream: istream类:输入流类-------------cin:输入流类的对象 ostream类…...
IOS:Safari无法播放MP4(H.264编码)
一、问题描述 MP4使用H.264编码通常具有良好的兼容性,因为H.264是一种广泛支持的视频编码标准。它可以在许多设备和平台上播放,包括电脑、移动设备和流媒体设备。 使用caniuse查询H.264兼容性,看似确实具有良好的兼容性: 然而…...
Pycharm恢复默认设置
window 系统 找到下方目录-->删除. 再重新打开Pycharm C:\Users\Administrator\.PyCharm2023.3 你的不一定和我名称一样 只要是.PyCharm*因为版本不同后缀可能不一样 mac 系统 请根据需要删除下方目录 # Configuration rm -rf ~/Library/Preferences/PyCharm* # Caches …...
简单计算器实现,包括两个数
正在加载中... 简单计算器实现,包括两个数 ❤ 厾罗 简单计算器实现,包括两个数 以下代码用于实现简单计算器实现,包括两个数基本的加减乘除运算: 实例(Python 3.0) # Filename : test.py # author by : www.dida100.com …...
竞赛保研 基于机器视觉的手势检测和识别算法
0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的手势检测与识别算法 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🧿 更多资料, 项目分享: https://gitee.com/dancheng…...
Android App从备案到上架全过程
不知道大家注意没有,最近几年来,新的移动App想要上架是会非常困难的,并且对于个人开发者和小企业几乎是难如登天,各种备案和审核。但是到底有多难,或许只有上架过的才会有所体会。 首先是目前各大应用市场陆续推出新的声明,各种备案截止日期到12月就要到最后期限责令整改…...
用邮件及时获取变更的公网IP--------python爬虫+打包成exe文件
参考获取PC机公网IP并发送至邮箱 零、找一个发送邮件的邮箱 本文用QQ邮箱为发送邮箱,网易等邮箱一般也有这个功能,代码也是通用的。 第一步:在设置中找到账户,找到POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,点击获…...
c++学习:函数模板+实战
目录 函数模板 思考 如果两个参数的类型不一样可以下面这么写 如果有指定返回参数可以下面这么写 实战 找出三个数中最大的一个 函数模板 实际上就是建立一个通用函数,其函数返回值类型和形参类型不具体指定,用一个虚拟的类型来代表template 是一个…...
three.js gltf后处理颜色异常(伽马校正)
效果: 应用了伽马校正,好像效果不明显 代码: <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"><…...
面试经典150题(55-58)
leetcode 150道题 计划花两个月时候刷完,今天(第二十四天)完成了4道(55-58)150: 55.(19. 删除链表的倒数第 N 个结点)题目描述: 给你一个链表,删除链表的倒数第 n 个结点ÿ…...
如果一个n位正整数等于其各位数字的n次方之和
❤ 厾罗 如果一个n位正整数等于其各位数字的n次方之和 如果一个n位正整数等于其各位数字的n次方之和,则称该数为阿姆斯特朗数。 例如1^3 5^3 3^3 153。 1000以内的阿姆斯特朗数: 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407。 以下代码用于检测用户输…...
solidity显示以太坊美元价格
看过以太坊白皮书的都知道,以太坊比较比特币而言所提升的地方中,我认为最重要的一点就是能够访问外部的数据,这一点在赌博、金融领域应用会很广泛,但是区块链是一个确定的系统,包括里面的所有数值包括交易ID等都是确定…...
如何给企业做网站/国家免费技能培训官网
当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。创建步骤: 1)创建类继承ContentProvider父类; 2)定义public static final的Uri类型的类常量&…...
国内做网站上市公司/全网营销有哪些平台
问题描述: 给你一个一维数组nums。 数组 前缀和 的计算公式为: rtSum[i] sum(nums[0] … nums[i])。 示例: 输入: nums [1, 1, 1, 1] 输出:[1, 2, 3, 4, 5] 前缀和计算过程为[1, 11, 111, 1111…...
大型网站seo策略/郑州网站营销推广
1、testng是什么?是一种测试框架,可以更方便的执行测试用例。2、如何安装?Eclipse——Help——Install New Softwarework with输入:http://beust.com/eclipse等待几秒钟,,选中Testng,一路nextwi…...
怎么做网站栏目/搜索引擎网站优化推广
DOM》Document Object Model【文档对象模型】 什么是DOM: 他是一种文档对象模型,是一个可以让程序和脚本动态访问和更新文档内容,结构和样式的语言平台,提供了一个标准的HTML和xml对象集,并有一个标准的接口来访问并操…...
和老妇做爰视频网站/英语培训
上英语课 阅读《艺术学概论》 转载于:https://www.cnblogs.com/bgd140206110/p/6568092.html...
哪家企业网站建设好/朋友圈推广广告
大数据全网数据采集技术方案(ppt)数据治理模型管控平台技术方案(ppt)大数据平台集团公司顶层设计方案(ppt)大数据平台规划建设集团企业方案(图文)数据治理:大数据治理体系规划指导方案(ppt)大数据平台数据治理规划方案(ppt)工业大数据生产治理平台建设方案(ppt)实时大数据平台规…...