数据集下载地址:
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)