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

  • 微信可以定时发送消息吗(微信可以定时发红包吗)

    微信可以定时发送消息吗(微信可以定时发红包吗)

  • 苹果ipad激活出错怎么解决(apple ipad 激活)

    苹果ipad激活出错怎么解决(apple ipad 激活)

  • 小米cc9机身多长厘米(小米cc9手机尺寸长,宽多少)

    小米cc9机身多长厘米(小米cc9手机尺寸长,宽多少)

  • 华为nova7怎么没有耳机插孔(华为nova7怎么没有开发人员选项)

    华为nova7怎么没有耳机插孔(华为nova7怎么没有开发人员选项)

  • 腾讯会议最多支持多少人同时视频(腾讯会议最多支持多少人参会)

    腾讯会议最多支持多少人同时视频(腾讯会议最多支持多少人参会)

  • 一加8是什么手机(一加是什么手机怎么样)

    一加8是什么手机(一加是什么手机怎么样)

  • 重新下载微信后好友还在吗(重新下载微信后怎么登录)

    重新下载微信后好友还在吗(重新下载微信后怎么登录)

  • 闲鱼突然没有流量什么原因造成的(闲鱼没浏览量是怎么回事)

    闲鱼突然没有流量什么原因造成的(闲鱼没浏览量是怎么回事)

  • 抖音怎么刷到喜欢的内容(抖音怎么刷到喜欢的作品)

    抖音怎么刷到喜欢的内容(抖音怎么刷到喜欢的作品)

  • 显卡怎么用(笔记本独立显卡怎么用)

    显卡怎么用(笔记本独立显卡怎么用)

  • 苹果id暂时禁止获取多久可以恢复(苹果id暂时禁止获取免费)

    苹果id暂时禁止获取多久可以恢复(苹果id暂时禁止获取免费)

  • 携程电子行程单在哪里打印(携程电子行程单是什么样子)

    携程电子行程单在哪里打印(携程电子行程单是什么样子)

  • 华为手机屏幕上的返回键在哪设置(华为手机屏幕上的时间和日期怎么调出来)

    华为手机屏幕上的返回键在哪设置(华为手机屏幕上的时间和日期怎么调出来)

  • 京东怎么延长收货时间(京东如何延时收货)

    京东怎么延长收货时间(京东如何延时收货)

  • 华为gt2可以下载app吗(华为gt2可以下载软件吗)

    华为gt2可以下载app吗(华为gt2可以下载软件吗)

  • 华为log和nolog怎么看(华为log和nolog怎么选)

    华为log和nolog怎么看(华为log和nolog怎么选)

  • 手机怎么同时开wifi和热点

    手机怎么同时开wifi和热点

  • 百度翻译如何提取文字(百度翻译的使用方法)

    百度翻译如何提取文字(百度翻译的使用方法)

  • 美团怎么看消费总额(美团怎么看消费总共花了多少钱)

    美团怎么看消费总额(美团怎么看消费总共花了多少钱)

  • 苹果系统降级有风险吗(苹果系统降级有影响吗)

    苹果系统降级有风险吗(苹果系统降级有影响吗)

  • 快手作品下面同框怎么显示(快手作品左下角位置显示怎么添加)

    快手作品下面同框怎么显示(快手作品左下角位置显示怎么添加)

  • 快充数据线和普通数据线的区别(快充数据线和普通数据线可以通用吗)

    快充数据线和普通数据线的区别(快充数据线和普通数据线可以通用吗)

  • 2022年前端Vue常见面试题大全(三万长文)持续更新...(vue前端常见面试题)

    2022年前端Vue常见面试题大全(三万长文)持续更新...(vue前端常见面试题)

  • 消费税退回退税流程
  • 发票冲红重开,重开时是按新税率还是旧税率
  • 疫情期间发生的费用进什么科目
  • 营业总收入包括营业外收入吗
  • 水利建设基金的会计分录
  • 微企怎么申请补贴
  • 子公司注销资金还母公司冲实收资本吗
  • 租赁房屋到期装修费怎么办?
  • 企业所得税可以税前扣除的税有哪些
  • 土地增值税征收范围包括
  • 代扣代缴的增值税算进项税吗
  • 公司借股东钱支付的利息如何做账?
  • 施工企业实验用具费用计入什么科目
  • 员工领取产假工资怎么算
  • 企业出租自有厂房超经营吗
  • 维护费可以留到明年抵扣吗?
  • 在建工程领用外购材料会计分录
  • 资产减值准备的账务处理
  • 酒店会计账务处理及税务申报
  • 商品折扣与折让属于销售费用吗
  • 消耗性生物资产的账务处理
  • 工业企业研发产品有哪些
  • 没发票大额费用支出能税前扣除吗?
  • 一般纳税人申报哪些税种
  • 企业收到政府补贴100000元业务题
  • 备注栏需要写内容嘛
  • 委外加工的加工费的会计处理
  • 权益净利率如何提高
  • 鸿蒙系统网络差怎么解决
  • qdcsfs.exe - qdcsfs是什么进程 有何作用
  • 招标场地费怎么收
  • owmngr.exe - owmngr是什么进程 作用是什么
  • 购入原材料所发票怎么入
  • 未分配利润进行利润分配分录
  • wifi万能钥匙密码王
  • 月末结转本年利润怎么算
  • 贝特希金斯
  • 定额发票怎么查询经营范围
  • 自然vc
  • php缓存技术和静态化
  • 固定资产折旧计算方法公式大全
  • 暂估和开票的差别是什么
  • 定时任务java
  • php curl_setopt
  • php点运算符
  • 以小物件为话题写出背后的故事
  • 小规模企业应交税费
  • 企业之间收的借款利息该如何交税 原文
  • 农民工工资专户管理暂行办法
  • 职工福利按工资的实付还是应付提取
  • 出口不报关账务处理
  • 公司转帐支票可以转账吗
  • 客户付了订金后能退吗
  • 现金存入银行凭证怎么写
  • 关于小微企业免征印花税的规定
  • 住宿费发票属于会计凭证吗
  • 收到红字发票如何入账
  • 预付账款用途
  • 差旅费属于什么会计要素
  • 工资扣水电费怎么做账
  • 如何冲减费用做账
  • 毛利率计算公式
  • macbookair屏幕变成横版
  • centos怎么查看服务器配置
  • 笔记本xp无线网络连接禁用启用不了
  • linux的文件和目录的区别
  • cocos2d-x引擎
  • node.js怎么搭建服务器
  • js setTimeout opener的用法示例详解
  • meta-inf文件夹在哪
  • apk文件怎么使用
  • python3.9怎么用
  • android(8) ViewPager页面滑动切换
  • dom基础知识
  • 用jquery实现图片轮播
  • [置顶] [Android Studio 权威教程]AS添加第三方库的6种方式(Jar,module,so等)
  • jquery移动端ui框架
  • 城市配套费需要缴纳契税
  • 福建通用定额发票查询
  • 增值税电子专用发票怎么作废
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设