车辆种类分类识别数据集,可以识别7种汽车类型,已经按照7:2:1比 例划分数据集,训练集1488张、验证集507张,测试集31张, 共计2026张。

news2024/11/19 7:49:10

 车辆种类分类识别数据集,可以识别7种汽车类型,已经按照7:2:1比 例划分数据集,训练集1488张、验证集507张,测试集31张, 共计2026张。 数据集分为一类客车(tinycar) ,=类客车(midcar) ,三类 客车(bigcar) , - -类货车(smalltruck) ,= _类货车(bigtru ck) ,油罐车(oil truck) 以及特殊车辆(specialcar) ,共计7 个种类。 nc:7. names: ['tinycar'midcar,'bigcar'smalltruck,'bigtruck,'oil truck',' specialcar']

车辆种类识别数据集

规模
  • 图像数量:2026张
  • 类别数量:7种
  • 数据量:未提供具体数据量,但通常这类数据集可能达到数百MB到几GB。
类别
  • 一类客车 (Tiny Car, tinycar)
  • 二类客车 (Mid Car, midcar)
  • 三类客车 (Big Car, bigcar)
  • 一类货车 (Small Truck, smalltruck)
  • 二类货车 (Big Truck, bigtruck)
  • 油罐车 (Oil Truck, oiltruck)
  • 特殊车辆 (Special Car, specialcar)

每类车辆的样本数量根据比例划分:

  • 训练集:1488张
  • 验证集:507张
  • 测试集:31张
数据特点
  • 高质量图像:所有图像均为高分辨率,提供了丰富的细节信息,有助于提高检测精度。
  • 多样化车辆类型:涵盖了七种常见的车辆类型,确保模型能够适应多种类型的车辆。
  • 详细标注:每张图像都附有详细的边界框标注(txt格式),标明了车辆的位置和大小。
  • 预处理数据:数据集已经按照7:2:1的比例划分好训练集、验证集和测试集,可以直接用于训练。
应用场景
  • 智能交通系统:在城市交通监控中自动识别不同类型的车辆,提高交通管理效率。
  • 自动驾驶:帮助自动驾驶汽车更好地理解和分类道路上的各种车辆,提升驾驶安全性。
  • 停车场管理:在停车场管理系统中自动识别车辆类型,便于分类管理和收费。
  • 物流管理:在物流运输过程中,自动识别货车类型,优化货物装载和运输方案。
  • 研究与教育:用于科研机构的研究以及相关院校的教学,帮助学生和研究人员更好地了解车辆识别技术。
  • 安全监控:集成到视频监控系统中,自动识别特定类型的车辆,支持安全监控和预警。

数据集结构

假设数据集的文件结构如下:

 
vehicle_classification_dataset/
├── images/
│   ├── train/
│   │   ├── 0001.jpg
│   │   ├── 0002.jpg
│   │   └── ...
│   ├── val/
│   │   ├── 0001.jpg
│   │   ├── 0002.jpg
│   │   └── ...
│   └── test/
│       ├── 0001.jpg
│       ├── 0002.jpg
│       └── ...
├── labels_txt/
│   ├── train/
│   │   ├── 0001.txt
│   │   ├── 0002.txt
│   │   └── ...
│   ├── val/
│   │   ├── 0001.txt
│   │   ├── 0002.txt
│   │   └── ...
│   └── test/
│       ├── 0001.txt
│       ├── 0002.txt
│       └── ...
└── metadata.csv

metadata.csv 文件内容示例:

 

深色版本

image_id, category, split
train/0001.jpg, tinycar, train
train/0002.jpg, midcar, train
val/0001.jpg, bigcar, val
val/0002.jpg, smalltruck, val
test/0001.jpg, bigtruck, test
...

labels_txt/0001.txt 示例(YOLO格式):

0 0.5 0.5 0.3 0.3  # 类别ID, 中心点x, 中心点y, 宽度, 高度

代码示例

下面是一个完整的Python脚本示例,展示如何加载数据集、使用预训练的YOLOv5模型进行车辆种类识别,并可视化检测结果。我们将使用PyTorch和YOLOv5的相关库。

1. 安装依赖库

首先,确保安装了必要的依赖库。可以在项目目录中的requirements.txt文件中列出这些依赖库,然后运行以下命令进行安装:

pip install -r requirements.txt

requirements.txt 文件内容示例:

torch==1.10.0
torchvision==0.11.1
opencv-python-headless==4.5.4.60
yolov5 @ git+https://github.com/ultralytics/yolov5.git
2. 加载数据集和预训练模型
 
import os
import cv2
import torch
import numpy as np
from yolov5.models.common import DetectMultiBackend
from yolov5.utils.general import (check_img_size, non_max_suppression, scale_coords)
from yolov5.utils.torch_utils import select_device
from yolov5.utils.plots import Annotator, colors

# 设置设备
device = select_device('')  # 使用默认设备(通常是GPU,如果没有则使用CPU)

# 加载预训练模型
model_path = 'path_to_your_model_directory/yolov5s_vehicle_detection.pt'
model = DetectMultiBackend(model_path, device=device, dnn=False, data=None, fp16=False)
imgsz = check_img_size(640, s=model.stride)  # 检查图像尺寸

# 设置模型为评估模式
model.eval()

# 加载图像
def load_image(image_path):
    img = cv2.imread(image_path)
    if img is None:
        print(f"Failed to load image: {image_path}")
        return None
    return img

# 进行推理
def detect_vehicles(img, model, imgsz, device):
    # 转换图像
    img = [letterbox(img, new_shape=imgsz, auto=True)[0]]
    img = np.stack(img, 0)
    img = img[..., ::-1].transpose((0, 3, 1, 2))  # BGR to RGB, BHWC to BCHW
    img = np.ascontiguousarray(img)

    # 将图像转换为Tensor
    img = torch.from_numpy(img).to(device)
    img = img.float()
    img /= 255.0  # 0 - 255 to 0.0 - 1.0
    if len(img.shape) == 3:
        img = img[None]  # 扩展批处理维度

    # 推理
    with torch.no_grad():
        pred = model(img, augment=False, visualize=False)[0]
        pred = non_max_suppression(pred, conf_thres=0.5, iou_thres=0.45, classes=None, agnostic=False, max_det=1000)

    # 处理预测结果
    for i, det in enumerate(pred):  # 每张图像的检测结果
        if len(det):
            det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img.shape[2:]).round()
            annotator = Annotator(img[i].permute(1, 2, 0).cpu().numpy(), line_width=3, example=str('vehicle'))
            for *xyxy, conf, cls in reversed(det):
                label = f'{names[int(cls)]} {conf:.2f}'
                annotator.box_label(xyxy, label, color=colors(int(cls), True))
            return annotator.result()
    return img[0].permute(1, 2, 0).cpu().numpy()

# 字母框调整
def letterbox(img, new_shape=(640, 640), color=(114, 114, 114), auto=True, scaleFill=False, scaleup=True, stride=32):
    shape = img.shape[:2]  # 当前形状 [height, width]
    if isinstance(new_shape, int):
        new_shape = (new_shape, new_shape)

    r = min(new_shape[0] / shape[0], new_shape[1] / shape[1])
    if not scaleup:  # 只缩小,不放大
        r = min(r, 1.0)

    ratio = r, r  # 宽高比
    new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r))
    dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1]  # wh padding
    if auto:  # 最小矩形
        dw, dh = np.mod(dw, stride), np.mod(dh, stride)  # wh padding
    elif scaleFill:  # 拉伸
        dw, dh = 0.0, 0.0
        new_unpad = (new_shape[1], new_shape[0])
        ratio = new_shape[1] / shape[1], new_shape[0] / shape[0]  # 宽高比

    dw /= 2  # 分配到两边
    dh /= 2

    if shape[::-1] != new_unpad:  # 缩放
        img = cv2.resize(img, new_unpad, interpolation=cv2.INTER_LINEAR)
    top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))
    left, right = int(round(dw - 0.1)), int(round(dw + 0.1))
    img = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=color)  # 添加边框
    return img, ratio, (dw, dh)

# 主函数
def main(image_dir, model, imgsz, device):
    names = ['tinycar', 'midcar', 'bigcar', 'smalltruck', 'bigtruck', 'oiltruck', 'specialcar']
    
    for image_name in os.listdir(image_dir):
        if image_name.endswith('.jpg'):
            image_path = os.path.join(image_dir, image_name)
            img = load_image(image_path)
            if img is not None:
                result = detect_vehicles(img, model, imgsz, device)
                cv2.imshow('Vehicle Detection', result)
                cv2.setWindowTitle('Vehicle Detection', f'Image: {image_name}')
                if cv2.waitKey(0) & 0xFF == ord('q'):
                    break
    cv2.destroyAllWindows()

# 假设图像存储在'image'目录下
image_dir = 'path_to_your_image_directory'

# 运行主函数
main(image_dir, model, imgsz, device)

说明

  • 路径设置:请根据实际的数据集路径调整path_to_your_image_directorypath_to_your_model_directory
  • 文件命名:假设图像文件名分别为.jpg。如果实际命名规则不同,请相应修改代码。
  • 可视化:通过绘制边界框和标注置信度,可以直观地看到图像中的车辆位置和类型。

进一步的应用

  • 训练深度学习模型:可以使用这个数据集来进一步训练或微调YOLOv5模型,以提高检测精度。
  • 数据增强:为了增加数据集的多样性和鲁棒性,可以使用数据增强技术(如旋转、翻转、缩放等)生成更多的训练样本。
  • 评估与优化:通过交叉验证和测试集评估模型性能,并不断优化模型参数,以提高检测准确率。

这个数据集对于车辆种类识别具有重要的实用价值,可以帮助相关部门及时发现和处理不同类型车辆,提升交通管理和安全水平。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2183883.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库重建索引的作用?

重建索引是数据库管理中的一个重要操作,主要用于优化数据库性能和提高查询效率。以下是重建索引的一些主要用途: 提高查询性能:随着时间的推移,数据的插入、更新和删除会导致索引碎片化,重建索引可以减少碎片&#xf…

C语言_内存函数

内存函数是 C 标准库中的一组函数&#xff0c;用于管理和操作内存。使用时需要包含头文件<string.h>。 1. memcpy的使用和模拟实现 函数形式如下&#xff1a; void* memcpy(void* destination, const void* source, size_tnum);函数解析和注意事项&#xff1a; memcp…

【有啥问啥】SimAM(Similarity-Aware Activation Module)注意力机制详解

SimAM&#xff08;Similarity-Aware Activation Module&#xff09;注意力机制详解 引言 在计算机视觉领域&#xff0c;注意力机制通过引导模型关注图像中的关键区域&#xff0c;显著提升了模型处理和理解图像的能力。SimAM&#xff08;Similarity-Aware Activation Module&a…

【网络安全 | 渗透工具】自动化 .env/.git文件检测

原创文章,禁止转载。 文章目录 1. 安装 DotGit2. 配置 DotGit3. 使用 DotGit 检测 .env / .git 文件1. 安装 DotGit 在谷歌应用商店中搜索 DotGit 并进行安装: 2. 配置 DotGit 安装完成后,可以在设置中开启或关闭相关功能: 3. 使用 DotGit 检测 .env / .git 文件 接下来…

音悦 1.5.1 完全免费,无广告,纯净听歌体验

音悦是一款完全免费的听歌应用&#xff0c;汇聚全网多平台曲库&#xff0c;拥有排行榜、MV、个性电台、我的歌单、收藏喜欢等功能。无需会员&#xff0c;没有广告&#xff0c;免费听歌下歌&#xff0c;是一款非常纯净小巧但功能齐全的听歌神器。 大小&#xff1a;27.6M 百度网…

【Linux 24】网络基础概念

文章目录 &#x1f308; 一、计算机网络的发展⭐ 1. 独立模式⭐ 2. 网络互联⭐ 3. 局域网 LAN⭐ 4. 广域网 WAN &#x1f308; 二、计算机网络的协议⭐ 1. 协议的概念⭐ 2. 协议分层⭐ 3. OSI 七层参考模型⭐ 4. TCP / IP 五层模型 &#x1f308; 三、网络传输基本流程⭐ 1. 同…

【计算机毕业设计】springboot企业客户信息反馈平台

摘 要 网络的广泛应用给生活带来了十分的便利。所以把企业客户信息反馈管理与现在网络相结合&#xff0c;利用java技术建设企业客户信息反馈平台&#xff0c;实现企业客户信息反馈的信息化。则对于进一步提高企业客户信息反馈管理发展&#xff0c;丰富企业客户信息反馈管理经验…

软考-高级系统分析师知识点合集记录

一、计算机基础知识 存储系统 计算机指令&#xff1a; 复杂指令&#xff0c;精简指令 指令的流水线周期计算方式 计算机系统体系结构&#xff1a; flynn方法 根据指令流和数据流的并行程度对计算机体系结构进行分类&#xff1a; 冯.诺依曼结构 &#xff0c;哈佛结构 根据指…

获取和解析JWT令牌

一、JWT令牌介绍 JWT&#xff08;JSON Web Tokens&#xff09;是一种开放标准&#xff08;RFC 7519&#xff09;&#xff0c;它定义了一种紧凑且自包含的方式&#xff0c;用于在各方之间以JSON对象的形式安全地传输信息。每个JWT令牌由三部分组成&#xff1a;Header&#xff0…

U盘恢复数据工具全解析:助力找回丢失信息

不论是工作还是学习都需要一些电子设备来存储短期数据吧&#xff0c;优盘已经成为我们存储重要数据的常用工具之一。然而&#xff0c;由于各种原因&#xff0c;我们可能会遭遇优盘数据丢失的困扰。接下来&#xff0c;让我们一起深入了解u盘恢复数据软件的强大功能。 1.福晰恢复…

算法竞赛:Online Judge 工作原理 常见报错分析 如何判断算法是否超时 知己知彼 方能骗分

一、在线评测系统运行原理及各种报错常见原因 电脑只是处理数据验证最后答案与期望答案是否相同&#xff0c;大部分的思考都由人来完成。 OJ一般有一组或者多组input文件与output文件&#xff0c;比如1.in 1.out 2.in 2.out等 OJ先运行你的程序&#xff0c;同时在后台开始计时&…

废物利用,三百块电脑如何升级并安装双系统便携使用

文章目录 引言最初的配置开始改装更换内存升级硬盘2.5 英寸 sata 固态msata 加装 升级电池其他的升级娱乐大师跑分 双系统安装前提条件设置 Bios安装 win 10安装 Manjaro时间同步问题 屏幕问题黑屏难开 引言 最近浏览 b 站的二手笔记本信息&#xff0c;想要整个二手笔记本玩玩…

构建现代化社区医疗服务:SpringBoot平台

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理社区医院信息平台的相关信息成为必然。开发…

链表的实现(go语言)

摘要&#xff1a; 本文记录使用go语言对链表的实现。 链表的实现 节点结构 type Node struct {Data intNext *Node }新建节点 func NewNode(Data int) *Node {return &Node{Data: Data,Next: nil,} }尾部添加节点 // 尾部插入 func Append(head *Node, Data int) *Node…

信息安全工程师(28)机房安全分析与防护

前言 机房安全分析与防护是一个复杂而细致的过程&#xff0c;涉及到物理安全、环境控制、电力供应、数据安全、设备管理、人员管理以及紧急预案等多个方面。 一、机房安全分析 1. 物理安全威胁 非法入侵&#xff1a;未经授权的人员可能通过门窗、通风口等进入机房&#xff0c;…

【Java数据结构】 ArrayList 顺序表

一、什么是List 在集合框架中&#xff0c;List是一个接口&#xff0c;继承自Collection Collection也是一个接口&#xff0c;该接口中规范了后序容器中常用的一些方法&#xff0c;具体如下所示&#xff1a; Iterable 也是一个接口&#xff0c;表示实现该接口的类是可以逐个元素…

Unity Asset Store的默认下载位置及更改下载路径的方法

修改Unity Asset Store的默认下载路径 Unity Asset Store默认下载位置 Unity Asset Store里下载资源&#xff0c;默认是下载到C盘里的&#xff0c;如果你不想做C盘战士的话&#xff0c;记得将下载的资源转移到其他盘。 Unity商城默认下载路径是C:\用户\用户名&#xff08;一般…

电脑扬声器无法识别,没有声音处理

原因感觉就是前几天安装Realtek Audio Control驱动的时候&#xff0c;没有关闭360&#xff0c;导致的问题。 音量那里一直是 解决方法 开始菜单搜索“设备管理器” 在“声音、视频和游戏控制器”找到识别错的设备 右键“卸载设备” 右键扫描一下设备 此时一般就好了 …

数据结构-LRU缓存(C语言实现)

遇到困难&#xff0c;不必慌张&#xff0c;正是成长的时候&#xff0c;耐心一点&#xff01; 目录 前言一、题目介绍二、实现过程2.1 实现原理2.2 实现思路2.2.1 双向链表2.2.2 散列表 2.3 代码实现2.3.1 结构定义2.3.2 双向链表操作实现2.3.3 实现散列表的操作2.3.4 内存释放代…

N32L40x基于串口的IAP升级升级速度2Mbps+上位机工具

1.软件升级流程 mcu开机上位机发送0xaa,0xaa,0x55,0x55,通知mcu进入升级状态,在收到该指令后,mcu擦除旧的APP程序,发送进入升级状态的指令,通知上位机进入升级状态擦除完成后进入升级状态,等待上位机发送升级包上位机开始发送数据包mcu接收数据包,并等待一个完成的数据包…