cars196数据集按照类别Label进行划分

数据集下载地址:
https://ai.stanford.edu/~jkrause/cars/car_dataset.html
数据集中一共包含16185张不同型号的汽车图片,当用于细分类任务时,训练集中有8144张图片,测试集为8041张图片。当用于度量学习任务时,通常前98类作为训练集,后98类作为测试集。

需求: 将数据集按照类别Label进行归类,方便后续使用。

官网中有两个版本的数据集,旧版本中没有测试集的标注,根据我们的需求,我们要下载的是新版本(Update那一行)的图片和标注。在这里插入图片描述
待移动的图片位于/car_ims/
在这里插入图片描述
图片的label等属性位于cars_annos.mat文件中。

想要实现的效果为根据图片Label对数据集中的图片进行归类:
在这里插入图片描述

代码:

import scipy.io
import os
import re
import shutil

source = './'
target = './cars196/'
data = scipy.io.loadmat('cars_annos.mat')
class_names = data['class_names']
annotations = data['annotations']
#print(annotations)

for i in range(annotations.shape[1]):
    name = str(annotations[0, i][0])[2:-2]#提取出图片名字
    image_path = os.path.join(source, name)
    print(image_path)
    clas = int(annotations[0, i][5])#提取出图片的类别属性
    class_name = str(class_names[0, clas-1][0]).replace(' ', '_')
    class_name = class_name.replace('/', '')#避免路径出错
    target_path = os.path.join(target, class_name)
    if not os.path.isdir(target_path):
        os.mkdir(target_path)
    print(target_path)
    shutil.copy(image_path, target_path)

# print(class_names.shape)
# print(class_names[0, 0][0])
# print(class_names[0, 0])
#
#
# for j in range(class_names.shape[1]):
#     class_name = str(class_names[0, j][0]).replace(' ', '_')
#     print(class_name)
用于开发,评估和比较学习方法的数据收集 066c695f141f27ea881df8af5a827c99.jpg 7fe25c5c90c4f447fe3fa10adf4232cd.jpg 6739b35e5a470fdb37862fb2bc5251ef.jpg c1adb1337eba00e584e3704af99d291c.jpg cf042dd7addc3894b78063b90016ec03.jpg 1b9471eefb6f3951f127beb69ef5a584.jpg fb1e25b446c8174cc443c366a1d0e38b.jpg 5bbe28f7cf6ee6453caad79db64ba7c0.jpg 5d7514af404266c3f92efcee8662f640.jpg 9e37ae8bf11600a30afcd592d73a4be1.jpg 63f9f7dc8298317284bf7dbf2074b3ba.jpg 356d8576837338e82cf363d2dc7747c0.jpg 45242c276cd516adb93561503a2f6ed7.jpg a67cad73fd03d2d5cef3a81bf78ed0a3.jpg b2de8a56b1fbbee32afbe72d823f8a5a.jpg eafaa5fd38df370046f8b185488e7fa5.jpg f81a39ee4b311be9eb5aac2ba1cbaffd.jpg 2aeb7856890c8dc0e0b311077d386690.jpg 2b96ccd24db32c2c47581afde8d42722.jpg 7a9027a09a9149fd901f97630a052b29.jpg 395e11b1214a0308f6a6e7834cebc379.jpg 508bc40d51bc31a77507595e528155e9.jpg 7457b846fc17229e61aea790bab3c88a.jpg b9ea06b2cdf8e72dca0f415d1525d7d5.jpg b52fbc88bc83acea1b0d374ccb460178.jpg b62c7d59cd74dc1bc2eaa1b951cfd0a7.jpg f550965cf9cc6f07184923a32d728e94.jpg ff9974e9177a989100fae4b8c505cad5.jpg 7be124ec367694c948c57d1e09181775.jpg 050aab9a8a91dca8ed1e518ebf42ee0d.jpg 253df8c5a6ed19d8dcf26ea58c40094d.jpg 802716d5a05096b02621ad4eabf57812.jpg 62352815acbebb5bc9eebaf534d8f434.jpg a2fec0c55e7c73d27fac134b9074846e.jpg b8ebfa32f6ba5c7c50b63bc1c0108361.jpg b00473a9f517bbfc5923c95288b40ff2.jpg bec04a0e1662c9c23365eb3a9e12a1d7.jpg cd0e83983e36613ec5b154d2d6ddb0d1.jpg d6086634ce334fe82400a173f0028306.jpg e7299b9187f09e190127873fb0725e1c.jpg f4f7ec6332cab9c706e12fa8aaed4a6c.jpg ff1778ed14e5ac5be5217d410841750d.jpg 1fa59ad4144c5f668e92b8ab6a0043f8.jpg 3b6365d6ab144b660c0b477442782fa5.jpg 6f93c871d9b1469bec963639ea58fe82.jpg 84c8aadbabbeb753042593faffa4e376.jpg 90d9a803b25a78b4dc2dcdf4c85a4b70.jpg 386f1418e664eab461ea243e85c19d3c.jpg 627fcb8c133d1e30c067d31a92a79f02.jpg 766f0049a40eea217328d2975312d3e0.jpg 8189cbaa92299ea536be3ad23ddf1d00.jpg 0967287cbb2b14ed9dc1ec6a1a53b21d.jpg 093
### 关于Cars196数据集的详细介绍 #### 数据集概述 Cars196数据集,也被称为Stanford Cars数据集,是一个专注于汽车细粒度分类的数据集合。该数据集包含了令人印象深刻的16,185张高清汽车图片,这些图片覆盖了196种不同的车辆类别[^2]。 #### 数据分布情况 整个数据集被精心划分为两个主要部分:训练集和测试集。具体来说: - **训练集**:包含8,144张图像,旨在让模型学习并理解各种类型的汽车特征。 - **测试集**:由8,041张图像组成,用于评估经过训练后的模型性能。 这种划分方式有助于确保模型不仅能够在已知样本上表现良好,还能有效应对未曾见过的新实例。 #### 获取数据集的方法 为了方便研究人员访问这一宝贵资源,官方提供了公开下载链接。可以通过访问以下网址来获取最新版本的数据集: [点击这里下载](https://ai.stanford.edu/~jkrause/cars/car_dataset.html)[^1] #### Python环境下的使用建议 当涉及到像Stanford Cars这样规模较大的数据集时,在Python环境中对其进行有效的管理和预处理变得至关重要。为此,可以利用专门设计用来简化此过程的各种库和工具。例如,有开发者分享了一个实用脚本,可以帮助快速完成数据集的分割工作,使得后续实验更加便捷高效[^3]。 ```python import os from sklearn.model_selection import train_test_split def split_data(image_paths, labels, test_size=0.2): """ 将给定的数据路径列表按照指定比例随机拆分成训练集和验证集 参数: image_paths (list): 图片文件路径组成的列表 labels (list): 对应每张图标的标签信息 test_size (float): 测试集中所占的比例,默认为20% 返回值: tuple: 包含四个元素元组(train_images, train_labels, val_images, val_labels) 表示分别对应训练集和验证集内的图片路径及其对应的标签 """ # 利用train_test_split函数实现自动化的数据切分操作 train_imgs, val_imgs, train_lbls, val_lbls = train_test_split( image_paths, labels, stratify=labels, test_size=test_size, random_state=42) return train_imgs, train_lbls, val_imgs, val_lbls if __name__ == "__main__": # 假设已经读取到了所有图片的位置以及它们所属类别的编号 all_image_paths = [...] # 替换成实际存储位置 all_labels = [...] # 同样替换为真实的标签序列 # 调用split_data()来进行数据集的初步整理 training_set, _, validation_set, _ = split_data(all_image_paths, all_labels) print(f"Training set size: {len(training_set)}") print(f"Validation set size: {len(validation_set)}") ```
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值