当前位置: 首页 > news >正文

基于Paddle和YOLOv5实现 车辆检测

基于yolov5paddle实现车辆检测

本项目提供3预测训练模型分别YOLOv5s, YOLOv5m,YOLOv5l 如果需要其他模型在百度云盘下载

本项目分为4的分别car,bus,van,others

可食用VisualDL服务工具训练各项数据进行实时可视化输出

1 YOLOv5训练数据集准备

解压数据集移动工作目录

#解压数据集

!ls /home/aistudio/data

!unzip -q /home/aistudio/data/data55670/VOCData.zip

!mv VOCData VOCdata

#将数据集移动工作

!mv /home/aistudio/VOCdata /home/aistudio/work/

%cd /home/aistudio/work/VOCdata

#重命名图片文件夹

!mv JPEGImages images

执行下面两段代码VOC格式数据集转换成YOLOV5标准格式

#第一段代码划分训练集验证集测试

%cd /home/aistudio/work/VOCdata #切换VOC数据目录

import os #导入操作系统模块

import random #导入随机模块

#设置数据集划分比例

trainval_percet = 0.1 #训练验证集数据比例 10%

train_percent=0.9 #训练集训练验证集比例 90%

#定义XML标注文件路径

xmlfilepath='/home/aistudio/work/VOCdata/Annotations' #XML标注文件存放地址

#创建ImageSets目录 如果不存在

if not os.path.exists('ImageSets/'):

os.makedirs('ImageSets') #创建多集目录

#创建所有XML文件列表

total_xml = os.listdir(xmlfilepath) #列出目录所有文件

num=len(total_xml) #计算XML文件总数

list=range(num) #创建0num - 1索引列表

#计算划分

tv = int(num * trainval_percent) #训练验证数量

tr = int(tv * train_percent) #训练数量(占训练验证集的比例)

#随机抽样

trainval = random.sample(list, tv) #总样本随机抽取训练验证集

train = random.sample(trainval, tr) #训练验证集随机抽取训练集

#打开文件准备写入

ftrainval = open('ImageSets/trainval.txt', 'w') #训练验证文件

ftest = open('ImageSets/test.txt', 'w') #测试集文件

ftrain = open('ImageSets/train.txt', 'w') #训练集文件

fval = open('ImageSets/val.txt', 'w') #验证文件

#遍历所有

for i in list:

#生成文件名 去掉xml扩展名

name = total_xml[i][:-4] + '\n' #文件名 + 换行符 -4符号

#根据样本所属集合写入不同文件

if i in trainval: #如果现在训练验证集

ftrainval.write(name) 写入训练验证集文件

if i in train: #如果训练集

ftest.write(name ) #写入测试集文件

else: 否则验证

fval.write(name) #写入验证集文件

else: #如果不在训练验证集

ftrain.write(name) #写入训练文件

#关闭所有文件

ftrainval.close()

ftest.close()

ftrain.close()

fval.close()

#第二段代码VOC格式转换YOLO格式

%cd /home/aistudio/work/VOCdata #切换VOC数据目录

import xml.etree.ElementTree as ET #导入XML解析模块

import pickle #导入序列化模块

import os #导入操作系统模块

from os import listdir, getcwd #导入目录操作函数

from os.path import join #导入路径链接函数

#定义数据集划分类型

sets = ['train','test','val']#训练集测试集验证集

#定义路径

Imgpath='/home/aistudio/work/VOCdata/images' #图片文件目录路径

xmlfilepath='/home/aistudio/work/VOCdata/Annotations' #XML标注文件路径

ImageSets_path='ImageSets/' #数据划分文件路径

#定义类别列表

def convert(size, box):

坐标转换函数

size: (width, height) 图片尺寸

box: (xmin, xmax, ymin, ymax)边界坐标

dw = 1./size[0] #宽度归一化因子

dh = 1./size[2] #归一化因子

#计算中心坐标

x=(box[0] + box[1])/2.0 x中心

y =(box[2] + box[3])/2.0 y中心

#计算宽度高度

w = box[1] - box[0] # 边界框宽度

h = box[3] - box[2] # 边界框高度

#归一化坐标

x =x * dw 归一化x中心

w =w *dw 归一化宽度

y=y * dh 归一化y中心

h = h * dh 归一化高度

return (x,y,w,h) 返回YOLO格式坐标

#定义标准转换函数

def convert_annotation(image_id):

转换单个XML标注文件

image_id 图像文件名 不含扩展名

#打开XML文件

in_file = open(xmlfilepath + '%s.xml'%(image_id))

#创建对应YOLO格式标签文件

out_file = open('labels/%s.txt' % (image_id), 'w')

#解析XML

tree = ET.parse(in_file)

root = tree.getroot()

#获取图像尺寸

size = root.find('size')

w = int(size.find('width').text) #图像宽度

h = int(size.find('height').text) #图像高度

#遍历所有目标对象

for obj in root.iter('object')

difficult = obj.find('difficult'.text) #获取难度标记

cls = obj.find('name').text #获取类别名称

#跳过不需要类别或者困难样本

if cls not in classes or int(difficult) == 1:

continue;

#获取类别ID

cls_id = classes.index(cls)

#获取边界框坐标

xmlbox = obj.find('bndbox')

b = (float(xmlbox.find('xmin').text), #xmin

float(xmlbox.find('xmax').text), #xmax

float(xmlbox.find('ymin').text, #ymin

float(xmlbox.find('ymax').text, #ymax)))

#转换为YOLO格式

bb = convert((w,h),b)

#写入标签文件:类别ID + 归一化坐标

out_file.write(str(cls_id) + "" + "".join([str(a) for a in bb]) + '\n')

#获取当前工作目录

wd = getcwd()

print(wd) #打印当前工作目录

#处理每个数据集划分

for image_set in sets:

#创建labels目录 如果不存在

if not os.path.exists('labels/'):

os.makedirs('labels/')

#读取划分文件的图像ID列表

image_ids = open(ImageSets + '%s.txt'%(image_set)).read().strip().split()

#创建图像路径列表文件

list_file = open('%s.txt' % (image_set), 'w')

#处理每个图像

for image_id in image_ids:

#写入图像绝对路径

list_file.wrote(Imgpath + '/%s.jpg\n'%(image_id))

#转换对应XML标注

convert_annotation(iamge_id)

#关闭文件

list_file.close()

关键功能说明

第一段代码 数据集划分

1 将数据集划分为

训练验证集10%

剩余作为训练集 90%

2 训练验证集再细分为

训练子集 占训练集征集的90%

验证子集 占训练集的10%

3 生成四个文件

trainval.txt 所有训练验证集样本

test.txt 训练子集样本

train.txt 非训练验证集样本 主训练集

val.txt 验证子集样本

第二段代码 格式转换

1 对每个数据集划分 train/test.val

创建图像路径列表文件 .txt

将VOC XML标注转换为YOLO格式的标签文件

2 转换过程

解析XML文件获取目标信息

过滤非目标类别和困难样本

将边界框坐标转换为YOLO格式,归一化中心点 + 宽高

每个目标保存为一行 class_id center_x center_y width, height

3 最终生成

train.txt/test.txt/val.txt 包含图像绝对路径

labels 目录,包含每个图像对应的YOLO格式标签文件

http://www.dtcms.com/a/339206.html

相关文章:

  • Markdown to PDF/PNG Converter
  • 浅看架构理论(二)
  • 儒释道中的 “不二” 之境:超越对立的智慧共鸣及在软件中的应用
  • Linux的基本操作
  • AC 内容审计技术
  • UE5 使用RVT制作地形材质融合
  • 【LeetCode】3655. 区间乘法查询后的异或 II (差分/商分 + 根号算法)
  • 部署Qwen-Image
  • 【AAOS】Android Automotive 16模拟器源码下载及编译
  • 【LeetCode题解】LeetCode 153. 寻找旋转排序数组中的最小值
  • HJ2 计算某字符出现次数
  • C语言关于函数传参和返回值的一些想法2(参数可修改的特殊情况)
  • 从数据孤岛到实时互联:Canal 驱动的系统间数据同步实战指南
  • 在职老D渗透日记day21:sqli-labs靶场通关(第27a关)get联合注入 过滤select和union “闭合
  • C# 13 与 .NET 9 跨平台开发实战(第一章:开发环境搭建与.NET概述)
  • Milvus 向量数据库中的索引类型
  • SQL 语句进阶实战:从基础查询到性能优化全指南
  • K8s命名空间:资源隔离与管理的核心
  • 轻量级milvus安装和应用示例
  • 一文精通 Swagger 在 .NET 中的全方位配置与应用
  • 软件测试-Selenium学习笔记
  • Dify-MCP服务创建案例
  • 循环高级综合练习①
  • 46 C++ STL模板库15-容器7-顺序容器-双端队列(deque)
  • 人工智能统一信息结构的挑战与前景
  • Vue3编程中更多常见书写错误场景
  • 使用OpenCV计算灰度图像的质心
  • 云原生堡垒机渗透测试场景
  • 所有普通I/O口都支持中断的51单片机@Ai8051U, AiCube 图形化配置
  • 微服务架构的演进:从 Spring Cloud Netflix 到云原生新生态