交通标志识别—基于卷积神经网络模型

导入有关库

import urllib.request
import os  # python中的os模块用于处理文件和目录
import tarfile
import tensorflow._api.v2.compat.v1 as tf
import tensorflow #导入深度学习库,可引用有关算法模型
import tkinter.filedialog
import tkinter as tk
import matplotlib.pyplot as plt
from PIL import Imagetf.disable_v2_behavior()
import time
import numpy as np
import skimage  # python中的skimage模块用于图像处理
from skimage import data, transform, io
from skimage.color import rgb2gray  # rgb2gray将图片转化为灰度
import random
from sklearn.utils import shuffle
from PIL import Image

加载有关交通标志的数据集

def load_data(data_dir):# 加载了两个list列表:# images: 这个列表包含了一组图像,每个图像都转换为numpy数组。# labels: 列表是标签,值为0到61的整数:# 获取data_dir的所有子目录。每个代表一个标签。directories = [d for d in os.listdir(data_dir)if os.path.isdir(os.path.join(data_dir, d))]labels = []images = []for d in directories:label_dir = os.path.join(data_dir, d)file_names = [os.path.join(label_dir, f) for f in os.listdir(label_dir) if f.endswith(".jpg")]# 对于每个标签,加载它的图像,并将它们添加到图像列表。# 并将标签编号(即目录名)添加到标签列表中。for f in file_names:images.append(skimage.io.imread(f))labels.append(int(d))return images, labels# 获取训练集和测试集的特征和标签。
ROOT_PATH = ""   #文件路径
train_data_dir = os.path.join(ROOT_PATH, "test_name")  # 打开训练集文件
test_data_dir = os.path.join(ROOT_PATH, "test_name")  # 打开测试集文件# 加载训练数据集
train_images, train_labels = load_data(train_data_dir)
# 加载测试数据集
test_images, test_labels = load_data(test_data_dir)# 统计图像和标签的数量
print("Unique Labels: {0}\nTotal Images: {1}".format(len(set(train_labels)), len(train_images)))

数据预处理:打乱数据集、改变图片大小、特征标准化、设置独热编码

# 打乱训练集
x = 6
random.seed(x)
random.shuffle(train_images)
random.seed(x)
random.shuffle(train_labels)
# 把训练集图片改变成64*64大小的图片
train_images64 = [transform.resize(image, (64, 64)) for image in train_images]
# 把图片转成np数组
train_images64 = np.array(train_images64)
# 把测试集图片改变成64*64大小的图片
test_images64 = [transform.resize(image, (64, 64)) for image in test_images]
# 把图片转成np数组
test_images64 = np.array(test_images64)
# 把标签转成np数组
train_labels = np.array(train_labels)
test_labels = np.array(test_labels)# 特征标准化
Xtrain_normalize = train_images64.astype("float32") / 255.0
Xtest_normalize = test_images64.astype("float32") / 255.0# 将标签转化为读热编码
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(sparse=False)  # 可以实现将分类特征的每个元素转化为一个可以用来计算的值
yy = [[i] for i in range(62)]
print(yy)
# 把所有标签转为读热编码
encoder.fit(yy)
Ytrain_reshape = train_labels.reshape(-1, 1)
Ytrian_onehot = encoder.transform(Ytrain_reshape)
Ytest_reshape = test_labels.reshape(-1, 1)
Ytest_onehot = encoder.transform(Ytest_reshape)

构建深度神经网络(模型自行构建,下边是本人构建的神经网络模型图)

超参数的设置

train_epochs = 30  # 训练次数
batch_size = 50
total_batch = int(len(train_images) / batch_size)
epoch_list = []
accuracy_list = []
loss_list = []
epoch = tf.Variable(0, name="epoch", trainable=False)startTime = time.time()
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)

保存模型

ckpt_dir = ""   #保存路径
if not os.path.exists(ckpt_dir):os.makedirs(ckpt_dir)
# 生成saver
saver = tf.train.Saver(max_to_keep=1)
# 如果有检查点文件,读取最新的检查点文件,恢复各种变量值
ckpt = tf.train.latest_checkpoint(ckpt_dir)
if ckpt != None:saver.restore(sess, ckpt)
else:print("Training form scratch")
# 获取续训参数
start = sess.run(epoch)
print("Training starts from {} epoch".format(start + 1))for ep in range(start, train_epochs):Xtrain_normalize, Ytrian_onehot = shuffle(Xtrain_normalize, Ytrian_onehot, random_state=0)for i in range(total_batch):batch_x, batch_y = get_train_batch(i, batch_size)sess.run(optimizer, feed_dict={x: batch_x, y: batch_y})#         if i%10==0:#             print("step{}".format(i),"Finished!")loss, acc = sess.run([loss_function, accuracy], feed_dict={x: batch_x, y: batch_y})epoch_list.append(ep + 1)loss_list.append(loss)accuracy_list.append(acc)print("Train epoch", (ep + 1), "Loss=", loss, "Accuracu=", acc)# 保存检查点saver.save(sess, ckpt_dir + "CIFAR10_cnn_model.ckpt", global_step=ep + 1)sess.run(epoch.assign(ep + 1))

数据可视化

fig = plt.gcf()
fig.set_size_inches(4, 2)
plt.plot(epoch_list, loss_list, label="loss")
plt.xlabel("epoch")
plt.ylabel("loss")
plt.legend(["loss"], loc="best")
plt.show()fig = plt.gcf()
fig.set_size_inches(4, 2)
plt.plot(epoch_list, accuracy_list, label="accuracy")
plt.xlabel("epoch")
plt.ylabel("accuracy")
plt.legend(["accuracy"], loc="best")
plt.show()test_pred, acc = sess.run([pred, accuracy], feed_dict={x: Xtest_normalize, y: Ytest_onehot})
print("在测试集上的精度为", acc)

识别图片应用

def identify():# 将文件夹中的图片放进模型里边识别出是哪个标签global file_pathfile_path = tkinter.filedialog.askopenfilename()  # 打开文件窗口页面进行选择文件图片print(file_path)img1 = io.imread(file_path)img_resize = transform.resize(img1, (64, 64))img_arr = np.array(img_resize).reshape(1, 64, 64, 3)img_ast = img_arr.astype("float32") / 255.0pre = sess.run([pred], feed_dict={x: img_ast})name = yy[np.argmax(pre)][0]print(name)

以上是本人学习人工智能课程所选的课程设计,参考了一些技术大佬的经验所完成属于自己的项目设计,有些代码并未贴出,敬请谅解。该项目的精确度只有百分之八十多。

人工智能项目实践-交通标志识别相关推荐

  1. 人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练

    人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练 MXNet 是一个轻量级.可移植.灵活的分布式深度学习框架,2017 年 1 月 23 日,该项目进入 Apache 基金会,成为 ...

  2. 交通标志识别系统-tensorflow项目

    介绍 交通标志识别系统,可作为计算机类专业毕设项目.机器学习,人工智能,深度学习,模式识别项目.基于tensorflow,采用 Inception-ResNet-v2模型实现对58个类别的接近6K张交 ...

  3. 交通标志识别 java_交通标志识别项目 putsi/tsaraisa · GitHub

    问:识别交通标志,怎么确定图片里有交通标志,具体在哪里?答:这个应该算目标识别和物体识别,CV的经典教程都有object recognition的内容可以参考.具体到交通标志识别,Github上有些开 ...

  4. 深度学习交通标志识别项目

    主要内容 在本文中,使用Python编程语言和库Keras和OpenCV建立CNN模型,成功地对交通标志分类器进行分类,准确率达96%.开发了一款交通标志识别应用程序,该应用程序具有图片识别和网络摄像 ...

  5. python识别简单训练模型_Python3+OpenCV实现简单交通标志识别

    由于该项目是针对中小学生竞赛并且是第一次举行,所以识别的目标交通标志仅仅只有直行.右转.左转和停车让行. 数据集:https://pan.baidu.com/s/1sLl0CadEutv3PQXhmq ...

  6. python交通标志识别_YOLOv3目标检测实战:交通标志识别

    在无人驾驶中,交通标志识别是一项重要的任务.本项目以美国交通标志数据集LISA为训练对象,采用YOLOv3目标检测方法实现实时交通标志识别. 具体项目过程包括包括:安装Darknet.下载LISA交通 ...

  7. 动手学无人驾驶(1):交通标志识别

    今天主要介绍无人驾驶当中深度学习技术的应用. 本文是根据博客专家AdamShan的文章整理而来,在此表示感谢. 关于深度学习的图像分类技术,网上已有很多关于深度学习的课程(如吴恩达老师的深度学习专项课 ...

  8. 【深度学习】手把手教你使用CNN进行交通标志识别(已开源)

    在本文中,使用Python编程语言和库Keras和OpenCV建立CNN模型,成功地对交通标志分类器进行分类,准确率达96%.开发了一款交通标志识别应用程序,该应用程序具有图片识别和网络摄像头实时识别 ...

  9. YOLOv5实战中国交通标志识别(TT100K数据集)

    使用YOLOv5完成TT100K数据集上的中国交通标志识别 课程链接:https://edu.csdn.net/course/detail/35209 在无人驾驶中,交通标志识别是一项重要的任务.YO ...

最新文章

  1. [POJ 1741] Tree
  2. Linux平台swift语言开发学习环境搭建
  3. 【入门基础】写给小白看的入门级 Java 基本语法
  4. gre考试能用计算机么,新GRE考试必须知道的九大考场问题
  5. python登录验证码生成及自动化测试规避
  6. android之uniapp弹出activity
  7. CentOS 安装SVN客户端
  8. fiddler Android下https抓包全攻略
  9. 165个站长在线工具箱网站源码/野兔在线工具系统V2.2.7中文版
  10. 多表查询分组排序-数据库习题
  11. 【Tensorflow教程笔记】使用 TPU 训练 TensorFlow 模型
  12. 基于Java毕业设计政府采购线上招投标平台源码+系统+mysql+lw文档+部署软件
  13. 天然气压缩因子计算软件_媒体看陕鼓陕鼓天然气长输管线压缩机组投运
  14. C++ 面向对象、内存管理
  15. 【转】CLR20R3 程序终止的几种解决方案
  16. 机械原理课程设计 洗瓶机机构设计(设计说明书+3张CAD图纸+连杆机构设计软件)
  17. pfamscan 的使用_OmicShare
  18. excel怎么做汇总平均值?
  19. asp毕业设计——基于asp+access的仓储物流管理系统设计与实现(毕业论文+程序源码)——仓储物流管理系统
  20. 联邦学习vs区块链:谁是“可信媒介”技术领域最强王者?

热门文章

  1. 香港云服务器能加D盘?
  2. day17--途牛旅游项目-注册功能
  3. c语言while的知识点,C语言循环语句知识点
  4. css设置打印样式@page
  5. C语言数据输入与输出
  6. 芯片数据的差异分析主要包括三种方法 ANCOVA进行差异分析 为何不用deseq2
  7. 蓝桥杯:2019年第十届蓝桥杯省赛B组试题J — 灵能传输
  8. 利用libcurl获取新浪股票接口
  9. 遇到mybatis面试问题应该怎么回答
  10. Hadoop HDFS概述