Python基于YOLOv5的交通标志识别系统[源码]
1.图片演示:
2.视频演示:
[项目分享]Python基于YOLOv5的交通标志识别系统[源码&技术文档&部署视频&数据集]_哔哩哔哩_bilibili
3.标注好的数据集:
4.YOLO网络的构建:
网络结构是首先用Focus将计算图长宽变为原先1/4, channel 数量乘4。再用bottlenectCSP 提取特征,个人理解 CSP 就是更多不同channel的融合吧。
然后再用maxpooling 下采样构建特征金字塔。下采样过每阶段与input cancatenate。
再对下采样产生的feature map 上采样,与backbone里相应的层融合。最后用detect层预测anchors。detect 层输出channel是 (class num + 5)* 每层每grid预测的anchor 数。num class是预测结果为每类的概率,5是anchor的 x, y, w, h 和是否为object的置信度。默认配置经过maxpooling 以后产生三个尺寸的feature map,每个feature map 经过上采样融合等操作后都会用来预测anchor,每个grid 预测三个anchor。比如yolov5 s 预测anchor 有80类。输出 x.shape=(bs, 3, 20, 20, 85)。
5.数据增强:
在深度学习领域,对于数据量的要求是巨大的,在CV领域,我们通过图像数据增强对现有图像数据进行处理来丰富图像训练集,这样可以有效的泛化模型,解决过拟合的问题。
该博客提出的图像数据增强方式有旋转图像、裁剪图像、水平或垂直翻转图像,改变图像亮度等,为了方便训练模型,我们通常会对数据进行归一化或者标准化以及将图片大小设置为一样。
6.代码实现:
该博客代码写法上来值得注意的有这几处:
1 首先有 focus 层,对输入图片slice, 把feature map减小增加channel 后面计算速度会快。
2 构建模型(parse_model) 在yolo.py 里面,用一个数组(ch) 存储了每层的输出channel, 后续concatenate的时候很容易构成concatenate后输出的channel 数量。
3 对除了最后一层预测层外,每层output channel都检查是不是8的倍数,保证后续concate的时候不会出问题
4 common.py 里面是各种basic block, 除了bottlenect, CSP, concate层等,还有transformer 等层。
首先导入相关模块:
import tensorflow as tf
import numpy as np
import pandas as pd
import cv2
import matplotlib.pyplot as plt
import os
from sklearn.model_selection import train_test_split
读取图片:target.txt的内容如下所示,前面对应图片名字,后面对应图片的类别
x=[]
y=[]
with open ('./target.txt','r') as f:for j,i in enumerate(f):path=i.split()[0]lable=i.split()[1]print('读取第%d个图片'%j,path,lable)src=cv2.imread('./suju/'+path)x.append(src)y.append(int(lable))
将数据归一化,并且划训练集和验证集
x=np.array(x)
y=np.array(y)
x.shape,y.shape
y=y[:,None]
x_train,x_test,y_train,y_test=train_test_split(x,y,stratify=y,random_state=0)
#归一化
x_train=x_train.astype('float32')/255
x_test=x_test.astype('float32')/255y_train_onehot=tf.keras.utils.to_categorical(y_train)
y_test_onehot=tf.keras.utils.to_categorical(y_test)
搭建网络模型
model=tf.keras.Sequential([tf.keras.Input(shape=(80,80,3)),tf.keras.layers.Conv2D(filters=32,kernel_size=(3,3),padding='same',activation='relu'),tf.keras.layers.MaxPooling2D(pool_size=(2,2),strides=(2,2)),tf.keras.layers.Conv2D(filters=64,kernel_size=(3,3),padding='same',activation='relu'),tf.keras.layers.MaxPooling2D(pool_size=(2,2),strides=(2,2)),tf.keras.layers.Conv2D(filters=32,kernel_size=(3,3),padding='same',activation='relu'),tf.keras.layers.MaxPooling2D(pool_size=(2,2),strides=(2,2)),tf.keras.layers.Flatten(),tf.keras.layers.Dense(1000,activation='relu'),tf.keras.layers.Dropout(rate=0.5),tf.keras.layers.Dense(43,activation='softmax')
])
model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy']
)
train_history=model.fit(x_train,y_train_onehot,batch_size=100,epochs=8,validation_split=0.2,verbose=1,)
画图显示模型的loss和acc
la=[str(i) for i in range(1,9)]
def show(a,b,c,d):fig,axes=plt.subplots(1,2,figsize=(10,4))axes[0].set_title('accuracy of train and valuation')axes[0].plot(la,train_history.history[a],marker='*')axes[0].plot(train_history.history[b],marker='*')axes[0].set_xlabel('epoch')axes[0].set_ylabel('accuracy')aa=round(train_history.history[a][7],2)bb=round(train_history.history[b][7],2)axes[0].text(la[7],train_history.history[a][7],aa,ha='center',va='bottom')axes[0].text(la[7],train_history.history[b][7],bb,ha='center',va='top')#axes[0].set_xticks(la,['as','asd',3,4,5,6,7,8])
# for x1,y1 in zip(la,train_history.history[a]):
# y1=round(y1,2)
# axes[0].text(x1,y1,y1,ha='center',va='bottom',fontsize=10,c='b')axes[0].legend(['train_accuracy','val_accuracy'])axes[1].set_title('loss of train and valuation')axes[1].plot(la,train_history.history[c],marker='*')axes[1].plot(train_history.history[d],marker='*')axes[1].set_xlabel('epoch')axes[1].set_ylabel('loss')cc=round(train_history.history[c][7],2)dd=round(train_history.history[d][7],2)axes[1].text(la[7],train_history.history[c][7],cc,ha='center',va='top')axes[1].text(la[7],train_history.history[d][7],dd,ha='center',va='bottom')axes[1].legend(['train_loss', 'val_loss'])#axes[1].show()show('accuracy','val_accuracy','loss','val_loss')
保存模型
model.save('traffic_model2.h5')
7.训练结果:
完整源码&环境部署视频教程&数据集&自定义训练视频教程
参考博客《Python基于YOLOv5的交通标志识别系统[源码&技术文档&部署视频&数据集]》
8.参考文献:
【1】谢豆,石景文,刘文军,刘澍.一种基于深度学习的交通标志识别算法研究[J].电脑知识与技术:学术版,2022,18(6):116-118.
【2】王泽华,宋卫虎,吴建华.基于改进YOLOv4网络的轻量化交通标志检测模型[J].电脑知识与技术:学术版,2022,18(5):98-101.
Python基于YOLOv5的交通标志识别系统[源码]相关推荐
- Python基于YOLOv5的交通标志识别系统[源码&技术文档&部署视频&数据集]
1.图片演示: 2.视频演示: 3.标注好的数据集: 4.YOLO网络的构建: 网络结构是首先用Focus将计算图长宽变为原先1/4, channel 数量乘4.再用bottlenectCSP 提取特 ...
- Python基于OpenCV的人脸表情识别系统[源码&部署教程]
1.项目背景 人脸表情识别是模式识别中一个非常重要却十分复杂的课题.首先对计算机人脸表情识别技术的研究背景及发展历程作了简单回顾.然后对近期人脸表情识别的方法进行了分类综述.通过对各种识别方法的分析与 ...
- 【YOLOv5实战3】基于YOLOv5的交通标志识别系统-模型训练
实战博客指引: 实战环境搭建 自定义数据集 模型训练 模型测试与评估 YOLOv5整合PyQt5 项目源代码可联系博主获取. 一.参数说明 再经历前两个步骤后,开始进行模型训练与测试.首先进行模型训练 ...
- 【YOLOv5实战2】基于YOLOv5的交通标志识别系统-自定义数据集
实战博客指引: 实战环境搭建 自定义数据集 模型训练 模型测试与评估 YOLOv5整合PyQt5 项目源代码可联系博主获取. 一.数据准备 1.1 从官网下载YOLOv5 打开官网YOLOv5,使用g ...
- 基于YOLOv5和Python开发的中国交通标志识别系统
基于YOLOv5和Python开发的中国交通标志识别系统,可识别45种交通标志,识别率高 YID:95120644426759544cmfighting233
- python本科毕业设计基于神经网络的虚假评论识别系统源码,含模型及数据
主要函数: 1.corpusprocess原始语料处理函数 2.train_word2vec生成word2vec向量 3.generate_id2wec获得索引的w2id,和嵌入权重embedding ...
- 基于Python tensorflow2.3实现的水果识别系统源码+模型+数据集,卷积神经网络的入门案例
水果识别-基于tensorflow2.3实现 水果识别是卷积神经网络的入门案例,这里我将模型的训练.测试.保存以及使用整合在了一起,至于原理部分,大家可以参考知乎或者B站上的回答,在这里我就不赘述了 ...
- Python基于OpenCV的异常行为检测系统[源码&部署教程]
1.项目背景 智能视频监控(Intelligent Video Surveillance , IVS)[1.2·3.4是计算机视觉技术5l在安防领域的应用,实现了由"被动监控"到& ...
- 毕业设计-基于机器视觉的交通标志识别系统
目录 前言 课题背景和意义 实现技术思路 一.交通标志识别系统 二.交通标志识别整体方案 三.实验分析 四.总结 实现效果图样例 最后 前言
最新文章
- XX must be built with ARC
- gdb基本命令 与 技巧
- inspect python_python之inspect模块
- isnull mysql_mysql isnull用法讲解
- centos 安装MySQL报错You could try using --skip-broken to work around the problem You could try running:
- oracle中修改process
- vijos p1782——借教室(noip2012提高组第2题)
- 2019 年,数据分析师怎样才能更抢手?
- websocket 连接本地端口_Spring Boot 结合 WebSocket 实现在线聊天
- 会计计算机,什么是好的计算机会计软件?
- windows下查看文件md5值
- Oracle账户被锁定后如何解锁
- 分层总和法matlab,高填方路基沉降检测之回归法
- Codeforces - F. Dominant Indices
- dedecms 安装后 管理后台ie假死 无响应的解决方法
- 《Excel大神上分攻略》学习笔记3——函数求和及常见函数
- 程序员转行后都怎么样了,分享我身边的真实经历
- 【算法设计与分析】C++回溯法求全排列
- 【韩顺平老师MyBatis】
- oracle的farsync,Oracle 12c 新特性 Active Data Guard Far Sync