市通建设工程质量监督局网站,深圳网站建设联华,泉州 网站建设公司首选,网站开发网站排名优化自动驾驶目标检测项目实战——基于深度学习框架yolov的交通标志检测
目前目标检测算法有很多#xff0c;流行的就有faster-rnn和yolov#xff0c;本文使用了几年前的yolov3框架进行训练#xff0c;效果还是很好#xff0c;当然也可以使用更高版本的Yolov进行实战。本代码使…自动驾驶目标检测项目实战——基于深度学习框架yolov的交通标志检测
目前目标检测算法有很多流行的就有faster-rnn和yolov本文使用了几年前的yolov3框架进行训练效果还是很好当然也可以使用更高版本的Yolov进行实战。本代码使用的是keras框架pytorch的yolov如何对数据集进行训练可以参考我之前的文章 工业缺陷检测项目实战(二)——基于深度学习框架yolov5的钢铁表面缺陷检测 跑工程的原理步骤都是一样的都可以学习。
数据集准备
使用gtsrb交通标志数据集下载链接 https://www.kaggle.com/datasets/meowmeowmeowmeowmeow/gtsrb-german-traffic-sign https://aistudio.baidu.com/aistudio/datasetdetail/97069 以上两个链接都可以下载文件夹里面是这样 Meta没什么用主要是Test和TrainTest作为验证集使用。
基础代码准备
本工程基于开源代码进行修改 https://github.com/miemie2013/Keras-DIOU-YOLOv3
环境
tensorflow1.15.1
keras2.3.1其他看着来缺什么pip install什么。
使用步骤
1.将数据集放在工程文件夹 2.生成train和test的txt文件 我这里写了一个csv转txt的代码 代码如下
import numpy as np
import pickle
import re
import os
from PIL import Image# Create raw data pickle file
data_raw {}
class_list []
box_coords_list []
image_file_list []with open(GTSRB/Test.csv, r) as f:next(f) # skip header linefor line in f: # 遍历每一行line line[:-1] # 去掉换行符fields line.split(,)image_file fields[7]class_list.append(int(fields[6]))image_file_list.append(image_file)# Find box coordinates for all signs in this imagebox_coords np.array([int(x) for x in fields[2:6]])box_coords_list.append(box_coords)# 写入txt内容
with open(GTSRB/val.txt, w, encodingutf-8) as f:for i in range(len(box_coords_list)):box_coord box_coord str(box_coords_list[i][0]) ,box_coord str(box_coords_list[i][1]) ,box_coord str(box_coords_list[i][2]) ,box_coord str(box_coords_list[i][3])d image_file_list[i] box_coord , str(class_list[i])f.write(d \n)路径根据自己的去修改即可。生成的txt放在annotation文件夹下。 txt文件格式如下
xxx/xxx.jpg 18.19,6.32,424.13,421.83,20 323.86,2.65,640.0,421.94,20
xxx/xxx.jpg 48,240,195,371,11 8,12,352,498,14
# image_path x_min, y_min, x_max, y_max, class_id x_min, y_min ,..., class_id
# make sure that x_max width and y_max height3.生成标签的类别txt文件 在data文件夹下生成txt的文件来表示类名 比如这里有43个类则我们可以先用数字字符表示等检测完再转回对于的类名 一行表示一个类名注意此处类名不能有空格比如以下是错误的例子 每一行都存在空格这样在计算mAP的时候会报错。
数据已准备完毕。
4.修改文件路径 主要是修改train.py文件里面的这三个路径 5.训练 运行
python train.py6.注意 引用github源码大佬的话
1本仓库有pattern0、pattern1、pattern2这3种训练模式。 0-从头训练1-读取model_body继续训练包括解冻但需要先运行1_lambda2model.py脚本取得model_body2-读取coco预训练模型训练 你只需要修改pattern的值即可指定训练模式。 然后在这3种模式的if-else分支下你再指定批大小batch_size、学习率lr等超参数。
2如果你决定从头训练一个模型即pattern0而且你的显卡显存比较小比如说只有6G。 又或者说你想训练一个小模型因为你的数据集比较小。 那么你可以设置initial_filters为一个比较小的值比如说8。 initial_filters会影响到后面的卷积层的卷积核个数除了最后面3个卷积层的卷积核个数不受影响。 yolov3的initial_filters默认是32你调小initial_filters会使得模型变小运算量减少适合在小数据集上训练。
7.训练完之后可以得到以下h5文件 运行
python 1_lambda2model.py将训练模型中yolov3的所有部分提取出来。我这里得到aaaa_bgr.h5 8.mAP评估 运行evaluate_kr.py对keras模型1_lambda2model.py提取出来的模型评估跑完这个脚本后需要再跑mAP/main.py进行mAP的计算。计算完之后会保持结果图
9.测试 在images/test里面放置要检测的图片 运行
python demo_kr.py比如识别 识别结果
另外我添加了绘制acc和loss的曲线图也对过滤了识别分数地的框。
需要整体代码的可私信我