位置: IT常识 - 正文

Python基于YOLOv5的交通标志识别系统[源码](yolo算法python代码)

编辑:rootadmin
Python基于YOLOv5的交通标志识别系统 1.图片演示:

推荐整理分享Python基于YOLOv5的交通标志识别系统[源码](yolo算法python代码),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:yolk python,python yolo,yolo算法python代码,yolov5 pycharm,yolk python,yolk python,python yolov4,yolov3 python,内容如对您有帮助,希望把文章链接给更多的朋友!

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领域,我们通过图像数据增强对现有图像数据进行处理来丰富图像训练集,这样可以有效的泛化模型,解决过拟合的问题。

Python基于YOLOv5的交通标志识别系统[源码](yolo算法python代码)

该博客提出的图像数据增强方式有旋转图像、裁剪图像、水平或垂直翻转图像,改变图像亮度等,为了方便训练模型,我们通常会对数据进行归一化或者标准化以及将图片大小设置为一样。

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 tfimport numpy as npimport pandas as pd import cv2import matplotlib.pyplot as pltimport osfrom 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.shapey=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')/255x_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.

本文链接地址:https://www.jiuchutong.com/zhishi/296194.html 转载请保留说明!

上一篇:k8s控制器Deployment使用详解(k8s控制器模式)

下一篇:OpenCV实战(15)——轮廓检测详解(opencv.)

  • 小米civi电池多大(小米civi待机一天多少电)

    小米civi电池多大(小米civi待机一天多少电)

  • 华硕怎么进入bios设置界面(华硕怎么进入bios恢复出厂设置)

    华硕怎么进入bios设置界面(华硕怎么进入bios恢复出厂设置)

  • 安卓wallpaper怎么开声音(安卓wallpaper怎么连电脑)

    安卓wallpaper怎么开声音(安卓wallpaper怎么连电脑)

  • windows任务栏点不动怎么办(win10任务栏点击)

    windows任务栏点不动怎么办(win10任务栏点击)

  • 光信号亮红灯是怎么回事(光信号亮红灯是欠费了吗)

    光信号亮红灯是怎么回事(光信号亮红灯是欠费了吗)

  • 页眉有一条线怎么去掉(页眉上有根线)

    页眉有一条线怎么去掉(页眉上有根线)

  • 如果ip地址的主机号部分每一位均为(如果主机的ip地址为25)

    如果ip地址的主机号部分每一位均为(如果主机的ip地址为25)

  • 32g可存储几天监控(32g存储卡监控视频能存几天)

    32g可存储几天监控(32g存储卡监控视频能存几天)

  • 监控关了还能录像吗(监控系统关了还能录像吗)

    监控关了还能录像吗(监控系统关了还能录像吗)

  • 荣耀v30时间24小时怎么调(荣耀v30时钟设置24小时)

    荣耀v30时间24小时怎么调(荣耀v30时钟设置24小时)

  • b类地址标准子网掩码(b类地址例子)

    b类地址标准子网掩码(b类地址例子)

  • word中定位的快捷键是什么(word2010定位的快捷键)

    word中定位的快捷键是什么(word2010定位的快捷键)

  • ios手机怎么删除qq文件(ios手机怎么删除桌面软件)

    ios手机怎么删除qq文件(ios手机怎么删除桌面软件)

  • 计算器中的cnc叫作什么键(计算器上的mc和ce分别是什么键)

    计算器中的cnc叫作什么键(计算器上的mc和ce分别是什么键)

  • 拼多多双收藏是什么意思(拼多多双收藏截图是什么意思)

    拼多多双收藏是什么意思(拼多多双收藏截图是什么意思)

  • 乐视2pro怎么备份(乐视如何备份到手机)

    乐视2pro怎么备份(乐视如何备份到手机)

  • 2016089是小米几(2016001是小米几的)

    2016089是小米几(2016001是小米几的)

  • 淘宝如何取消开抢提醒(淘宝如何取消开店铺)

    淘宝如何取消开抢提醒(淘宝如何取消开店铺)

  • 华为安全模式怎么解除(华为安全模式怎么解除限制)

    华为安全模式怎么解除(华为安全模式怎么解除限制)

  • oppoa9x呼吸灯在哪里设置(oppo a92呼吸灯)

    oppoa9x呼吸灯在哪里设置(oppo a92呼吸灯)

  • 微信群怎么查谁是群主(微信群怎么查谁拉的人员数量)

    微信群怎么查谁是群主(微信群怎么查谁拉的人员数量)

  • mate30可以自己下载谷歌服务吗(华为mate30怎么下载第三方软件)

    mate30可以自己下载谷歌服务吗(华为mate30怎么下载第三方软件)

  • oppoa9是多大屏的(oppoa9手机是多大屏)

    oppoa9是多大屏的(oppoa9手机是多大屏)

  • 蘑菇街如何实名认证(蘑菇街怎么注销身份证信息)

    蘑菇街如何实名认证(蘑菇街怎么注销身份证信息)

  • g4560配什么主板 G4560搭配主板推荐(i33240配什么主板)

    g4560配什么主板 G4560搭配主板推荐(i33240配什么主板)

  • mtype命令  mtools工具(linux mput命令)

    mtype命令 mtools工具(linux mput命令)

  • 个所得税计算方法
  • 企业注销库存怎么做账务处理
  • 金税四期主要监管什么
  • 远期交易怎么结算
  • 一般纳税人简易计税可以抵扣进项税额吗
  • 小规模季度超过45万了怎么缴纳
  • 注册商标怎么做账
  • 建筑安装项目要求有哪些
  • 单位预付卡
  • 别人的项目挂靠我公司怎么做账?
  • 企业卖了个人如何交税
  • 农产品销售发票能否抵扣进项税?
  • 旅行社差额纳税发票怎么开具
  • 应付利润是会计科目吗
  • 售楼部购买空调计入哪个科目
  • 一般纳税人企业要交哪些税
  • 季度利润表本月数和本年累计数
  • 城市公交可以承包吗
  • 不动产测绘费谁交
  • 季报的利润表是填本期金额还是本年
  • 利息收入记账凭证格式范本
  • 备孕男的要吃叶酸吗? 已解决
  • 基于php开发
  • 代垫费用的进项税怎么算
  • 电商快递费怎么做账
  • 未办理装修手续
  • 电脑屏幕字体模糊怎么办
  • 子公司使用母公司授信
  • 企业接受现金捐赠要交税吗
  • 社会保险费缓缴政策
  • php抓取
  • 华为od机试无法测用例
  • ChatGPT进阶-提示词中文版
  • 收汇和结汇都有什么
  • vue实现回车登录
  • 企业对外担保代偿能否税前扣除 税务局
  • 资产负债表上应付账款根据什么填制
  • mongodb win7
  • 资质平移后以前的工程怎么办
  • 应纳税所得额的各项扣除包括什么
  • 水电费进项税额转出情形
  • winXP系统安装SQLServer2005开发版具体过程与注意问题
  • 计提所得税后再结转本年利润吗
  • 信用证保证金有利息吗
  • 个人所得税应纳税额
  • 公户里的钱可以随便转出嘛
  • 公司的装修费计入什么科目
  • 营改增后可以抵扣的进项
  • 预付账款计提减值吗
  • 税务局退回水利基金账务怎么处理
  • 本年利润要结转吗为什么
  • 最低标准买社保公积金个人缴纳多少钱
  • 油票发票在报销单上怎么填写
  • 出现事故保险公司负责协商吗
  • 案例解析企业所需资金
  • 批量sql语句
  • 光盘安装系统怎么操作
  • win11注意
  • LINUX下的磁盘编辑工具
  • linux的含义
  • 笔记本电脑显示英特尔服务未在运行
  • win10任务栏怎么变成透明
  • w10 2021年更新
  • 电脑系统win8怎么样
  • Android游戏开发案例教程小小弹球
  • python做排序
  • javascript中的闭包
  • node 发邮件
  • Linux进程间通信——使用流套接字
  • js判断鼠标位置是否在元素区域内使用
  • python写汉字代码
  • java语言基于对象
  • android教学
  • 用jquery写注册界面
  • js几种类型
  • jquery是怎样实现链式调用的?
  • android回调函数
  • 国家税务12366电子税务局重庆
  • 山东地税局网上办税平台
  • 困难减免土地使用税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设