位置: 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.)

  • 腾讯会员怎么让第二个人登录QQ(腾讯会员怎么让别人退出登录)

    腾讯会员怎么让第二个人登录QQ(腾讯会员怎么让别人退出登录)

  • win10教育版和专业版的区别(win10教育版和专业版的区别打游戏)

    win10教育版和专业版的区别(win10教育版和专业版的区别打游戏)

  • 电脑桌面竖屏了怎么办(电脑桌面竖屏了怎么变回来了)

    电脑桌面竖屏了怎么办(电脑桌面竖屏了怎么变回来了)

  • 华为p30pro照相模糊(华为p30pro照相模糊应该怎么设置)

    华为p30pro照相模糊(华为p30pro照相模糊应该怎么设置)

  • 华为手机如何不用密码打开手机(华为手机如何不锁屏)

    华为手机如何不用密码打开手机(华为手机如何不锁屏)

  • 淘宝漏洞单是什么意思(淘宝漏洞单群在哪里可以找到)

    淘宝漏洞单是什么意思(淘宝漏洞单群在哪里可以找到)

  • 指纹锁电池耗电快是什么原因(指纹锁电池耗电量太快什么问题)

    指纹锁电池耗电快是什么原因(指纹锁电池耗电量太快什么问题)

  • 小米usbc和typec一样吗(小米usb c和type c区别)

    小米usbc和typec一样吗(小米usb c和type c区别)

  • 华为mate30送的是什么耳机(华为mate30赠送礼包)

    华为mate30送的是什么耳机(华为mate30赠送礼包)

  • 苹果w1和h1芯片区别在哪(苹果w1芯片好还是h1芯片好)

    苹果w1和h1芯片区别在哪(苹果w1芯片好还是h1芯片好)

  • airpods2序列号在哪里(airpods2序列号在充电仓右边)

    airpods2序列号在哪里(airpods2序列号在充电仓右边)

  • 苹果内外屏必须一起换吗(iphone外屏有必要换原装的吗)

    苹果内外屏必须一起换吗(iphone外屏有必要换原装的吗)

  • 中继与桥接哪个网速快(中继与桥接哪个好)

    中继与桥接哪个网速快(中继与桥接哪个好)

  • 暂停服务是停机了吗(手机暂停服务怎么回事)

    暂停服务是停机了吗(手机暂停服务怎么回事)

  • 为什么充完话费后网还是不能用(为什么充完话费还是停机状态)

    为什么充完话费后网还是不能用(为什么充完话费还是停机状态)

  • 手机老闪退怎么解决(手机老闪退怎么解决小米7s)

    手机老闪退怎么解决(手机老闪退怎么解决小米7s)

  • 一键还原怎么恢复网络(一键还原怎么恢复)

    一键还原怎么恢复网络(一键还原怎么恢复)

  • 知乎删除评论对方能看到吗(知乎删除评论对人有害吗)

    知乎删除评论对方能看到吗(知乎删除评论对人有害吗)

  • 微信点别人头像会震动(微信点别人头像两下他会抖)

    微信点别人头像会震动(微信点别人头像两下他会抖)

  • 安卓爱奇艺会员苹果能用吗(安卓爱奇艺会员怎么给苹果用)

    安卓爱奇艺会员苹果能用吗(安卓爱奇艺会员怎么给苹果用)

  • 手机现HD是什么(手机上现实hd是什么)

    手机现HD是什么(手机上现实hd是什么)

  • 荣耀9x有没有屏幕指纹解锁(荣耀9x有没有屏幕录制功能)

    荣耀9x有没有屏幕指纹解锁(荣耀9x有没有屏幕录制功能)

  • 华为体脂秤能绑定几个手机(华为体脂秤绑定多个手机)

    华为体脂秤能绑定几个手机(华为体脂秤绑定多个手机)

  • 荣耀20和华为nova5pro对比(荣耀20和华为nova5pro哪个好)

    荣耀20和华为nova5pro对比(荣耀20和华为nova5pro哪个好)

  • 剪映怎么转场(剪映怎么转场不生硬)

    剪映怎么转场(剪映怎么转场不生硬)

  • qq亲密度48高吗(qq亲密度48和47)

    qq亲密度48高吗(qq亲密度48和47)

  • 启用文件中的宏(电脑文件启用宏是什么意思)

    启用文件中的宏(电脑文件启用宏是什么意思)

  • yarn安装和基本使用(yarn安装路径)

    yarn安装和基本使用(yarn安装路径)

  • 免抵税额计入什么科目
  • 增值税小规模纳税人认定标准
  • 高新技术企业加计抵减
  • 所得税费用属于什么科目借贷方向
  • 公司购买设备报告怎么写
  • 连续三个月发烧怎么回事
  • 转登记纳税人留抵退税政策
  • 关联方交易影响因素
  • 工商年检股东变更流程
  • 临时营业执照有效期多久
  • 往来账审计存在问题及建议
  • 库存现金限额的概念
  • 收到投资款怎么做记账凭证
  • 最新的税收政策
  • 发票金额小于入库金额
  • 剩余折旧月份
  • 季度企业所得税计算公式
  • 期末留抵税额大于销项税额本月还需要计提吗
  • 非居民企业出租不动产房产税
  • 销售依据
  • 装修期间用电
  • 会计准则规定的关联方
  • 小规模纳税人的增值税账务处理
  • 低值易耗品摊销表格
  • 施工项目直接成本和间接成本
  • 收到转账支票又背书转让怎么写会计科目
  • 电脑屏发黄怎么调正常哪
  • 收到投资款怎么做记账凭证
  • 个体工商户核定征收标准2023
  • 酒店布草间有摄像头吗
  • 2022年最新cpu天梯图手机
  • 小程序嵌入h5页面可以不写安全地址吗为什么
  • 营业外支出包括哪些科目
  • PHP:proc_terminate()的用法_命令行函数
  • 失控发票进项转出后要补企业所得税吗
  • 运城盐湖中国死海养生城
  • go开发web项目
  • open开放的意思吗
  • 短期借款转为长期借款引起的会计要素变化
  • 工资计提发放会计科目
  • 织梦文章标题显示不全
  • 生产型出口企业的概念
  • 支付债券发行费怎么算
  • 终止劳动合同赔偿金最晚多久发放
  • sqlserver2005数据库磁盘满了什么文件能删
  • 接受捐赠计入
  • 将资本公积转为资本会计科目
  • 本年利润会计处理流程
  • 以前年度损益调整在利润表中怎么填
  • 公司购买食品怎么入账
  • 租赁房屋怎么做账
  • 运输公司发票抵扣
  • 公司注销后违法行为追究吗
  • 物业临时用工人员管理制度范本
  • 无形资产摊销年限最新规定
  • 怎样计算加班工资?
  • sql server怎么改数据
  • linux系统怎么安装
  • 不能用鼠标
  • windows无法启动怎么解决
  • ubuntu系统安装教程
  • sxs.exe病毒
  • Linux编译内核无法启动
  • windows7没有桌面图标
  • cocos2dx 4.0
  • JavaScript字体颜色
  • bootstrap基础教程
  • python模拟软件
  • jQuery轻松实现表格的隔行变色和点击行变色的实例代码
  • 如何将文件夹导入idea
  • 代码实现死锁
  • 税务要求实名认证
  • 核定征收怎么计算税额
  • 河北电子税务局网上登录
  • 江苏高速通行费标准
  • 没有代理记账资质做代理记账业务
  • 北京市地方税务局2015第10号文件
  • 什么是税务证书密码
  • 消费税是单一环节征税吗
  • 航信报税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设