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

  • 小米手机息屏时间怎么设置(苹果手机怎么息不了屏了)

    小米手机息屏时间怎么设置(苹果手机怎么息不了屏了)

  • 花呗怎么查看历史账单(花呗怎么查看历史消费后余额)

    花呗怎么查看历史账单(花呗怎么查看历史消费后余额)

  • 如何连接共享打印机(如何连接共享打印机win7)

    如何连接共享打印机(如何连接共享打印机win7)

  • 华为nova7pro如何设置应用锁(华为nova7pro如何恢复出厂设置)

    华为nova7pro如何设置应用锁(华为nova7pro如何恢复出厂设置)

  • 滴滴手机号怎么改(滴滴手机号怎么打过去)

    滴滴手机号怎么改(滴滴手机号怎么打过去)

  • 拉黑再删除和纯删除(拉黑再删除和直接删除一样吗)

    拉黑再删除和纯删除(拉黑再删除和直接删除一样吗)

  • 荣耀手机怎样隐藏桌面上的应用(荣耀手机怎样隐藏桌面图标)

    荣耀手机怎样隐藏桌面上的应用(荣耀手机怎样隐藏桌面图标)

  • oppo pbem00是什么型号(oppopbem00是什么意思)

    oppo pbem00是什么型号(oppopbem00是什么意思)

  • 华为nova7和华为nova7se区别(华为nova7和华为nova9哪个好)

    华为nova7和华为nova7se区别(华为nova7和华为nova9哪个好)

  • 华为che2tl00是什么型号(华为che2-tl00)

    华为che2tl00是什么型号(华为che2-tl00)

  • 无线网怎么插(无线网怎么插口)

    无线网怎么插(无线网怎么插口)

  • 淘宝8天退货是什么意思(淘宝8天退货和7天无理由退货一样吗)

    淘宝8天退货是什么意思(淘宝8天退货和7天无理由退货一样吗)

  • 全家福可以扫到吗(全家福扫那个福)

    全家福可以扫到吗(全家福扫那个福)

  • 苹果x电充满是什么显示(苹果x充满电显示出来是什么?)

    苹果x电充满是什么显示(苹果x充满电显示出来是什么?)

  • 电脑联网了但不能上网(电脑联网了但不能打开网页和登qq)

    电脑联网了但不能上网(电脑联网了但不能打开网页和登qq)

  • 连续选中按什么键(如何连续选中)

    连续选中按什么键(如何连续选中)

  • qq怎么复制别人的名片(qq怎么复制别人的个性签名)

    qq怎么复制别人的名片(qq怎么复制别人的个性签名)

  • vivo手机日历怎么恢复(vivo手机日历怎么显示农历和阳历)

    vivo手机日历怎么恢复(vivo手机日历怎么显示农历和阳历)

  • 微信聊天图片缓存在哪(微信聊天图片缓存在哪里能找到)

    微信聊天图片缓存在哪(微信聊天图片缓存在哪里能找到)

  • 京东星级怎么看(京东账号星级在哪看)

    京东星级怎么看(京东账号星级在哪看)

  • 退出qq群其他人能看到提示吗(退出qq群其他人怎么显示)

    退出qq群其他人能看到提示吗(退出qq群其他人怎么显示)

  • 小爱同学怎么清理缓存(小爱同学怎么清理空间)

    小爱同学怎么清理缓存(小爱同学怎么清理空间)

  • vivox27通话录音在哪里找到(电话录音在哪里找vivox27)

    vivox27通话录音在哪里找到(电话录音在哪里找vivox27)

  • 苹果手机通讯录怎么拉黑联系人(苹果手机通讯录不见了怎么恢复)

    苹果手机通讯录怎么拉黑联系人(苹果手机通讯录不见了怎么恢复)

  • 淘宝怎么评价(淘宝怎么评价好评)

    淘宝怎么评价(淘宝怎么评价好评)

  • 个税退付手续费是单位所得吗
  • 货物运输印花税减免
  • 水电怎么开票
  • 滴滴电子普通发票怎么抵扣
  • 单位全额承担社保相当于领生活费了吗
  • 民间非营利机构加班费记什么科目
  • 违约金并用
  • 企业自建厂房转让如何计算增值税
  • 小微企业利润亏损原因
  • 残疾人保障金中上年在职职工人数怎么计算
  • 增值税预缴税款表
  • 企业购买的土地计入无形资产
  • 收到退回的投标保证金
  • 我想看一下这个月几日
  • 个人从价计征房产税
  • 如何修改系统时间为12/24小时制
  • 微软输入法中文输入卡顿
  • 普通发票多久之后还可以红冲
  • php is_integer
  • 应收账款转让分录
  • 操作系统的安全目标主要包括哪些?
  • 厂家赠送的商品如何走账
  • PHP:Memcached::casByKey()的用法_Memcached类
  • win10不关机设置方法
  • php字段
  • 蟹爪兰的养殖方法和浇水
  • 巴拉诺维奇市
  • php 代码生成
  • 支票怎么用,开了支票立即可以取钱吗
  • 购销合同印花税计算方法
  • 怎么让gridview居中
  • 如何用python求解航天器追逃博弈
  • 出口退税管理类别四类
  • css 3有哪些新特性
  • 对公账户的资金怎么转出
  • 固定资产如何分类?
  • 公司未实缴能破产吗
  • 哪些税种需要计提吗
  • 如何扣除企业接单费用
  • 按月计提固定资产折旧算收入吗
  • sql去除
  • 公司处置汽车
  • 可以抵扣增值税进项税额的有哪些
  • 应交税费账户的用途和结构是怎样的
  • 固定资产大修理和更新改造的区别
  • 先前收取的包装费用
  • 个人名义开工程发票税率是多少
  • 汇算清缴后取得上一年发票
  • 高温补贴纳税
  • 外币账户记账方法
  • 机关单位工会经费提取比例
  • 租赁房产税计税依据及计算方式是什么
  • 收取加盟费的账户是什么
  • 以旧换新会计科目
  • 余额调节表的模板
  • 购车融资是什么意思
  • 成本结转的方法实例
  • 老板用公司的钱算挪用公款吗
  • 会计怎么核对出纳的日记账
  • MySql insert插入操作的3个小技巧分享
  • mysql千万级分页优化
  • windows命令操作
  • xp查看系统
  • 如何让win8系统变快
  • win7怎么修改开始菜单样式
  • ubuntu怎么安装程序
  • listview的view属性
  • shell脚本转码
  • float浮动布局原理
  • 用nodejs做的项目
  • jquery控制css样式
  • python教程目录
  • 一般纳税人出售房产怎么开票
  • 国税局事业编制和公务员哪个比较好
  • 个人所得税选择那种方式更好
  • 发票校验码不清楚
  • 税务局监督执纪存在问题
  • 河南出名歌手
  • 国家税务系统
  • 税收筹划可分为
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设