如何将谷歌云端硬盘中的图像数据集加载到Google Colab用于模型训练
Caltech256数据集训练格式加载方案
你解压后的Caltech256数据集默认是「类别文件夹-对应图片」的标准目录结构,直接用深度学习框架自带的数据集加载接口就能快速处理为训练可用的格式,以下是具体实现:
基础加载实现(以PyTorch为例,TensorFlow逻辑一致)
1. 导入依赖
import torch from torchvision import datasets, transforms from torch.utils.data import DataLoader
2. 定义数据预处理规则
训练集需要做数据增强提升模型泛化性,验证/测试集仅需做标准化处理:
# 训练集预处理 train_transform = transforms.Compose([ transforms.Resize((256, 256)), transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 验证/测试集预处理 val_transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ])
3. 加载数据集并拆分训练验证集
# 读取全量数据集 full_dataset = datasets.ImageFolder( root='/content/gdrive/MyDrive/Data_Clatech256/256_ObjectCategories', transform=train_transform ) # 按8:2比例拆分训练集和验证集 train_size = int(0.8 * len(full_dataset)) val_size = len(full_dataset) - train_size train_dataset, val_dataset = torch.utils.data.random_split(full_dataset, [train_size, val_size]) # 替换验证集的预处理规则 val_dataset.dataset.transform = val_transform
4. 封装为训练可用的DataLoader
train_loader = DataLoader(train_dataset, batch_size=32, shuffle=True, num_workers=2) val_loader = DataLoader(val_dataset, batch_size=32, shuffle=False, num_workers=2)
封装完成后,train_loader和val_loader每次迭代会直接返回(批次张量数据, 批次标签),可以直接传入模型训练循环使用。如果使用TensorFlow框架,替换为tf.keras.utils.image_dataset_from_directory接口即可,逻辑完全一致。
更优实现方案(针对Colab云盘IO慢的痛点优化)
Colab直接读取云端硬盘的文件IO延迟很高,推荐用以下方案提升加载效率:
- 方案1:将数据集拷贝到Colab本地临时磁盘
本地磁盘的读写速度是云盘的10~100倍,每次启动训练前执行一次拷贝即可:
后续加载数据集时将root路径替换为!cp -r /content/gdrive/MyDrive/Data_Clatech256/256_ObjectCategories /content//content/256_ObjectCategories即可,临时磁盘数据会在Colab实例断开后自动清除,无需手动清理。 - 方案2:使用WebDataset格式存储数据集
针对小文件过多导致的IO开销问题,可以将数据集打包为WebDataset格式,打包后仅需读取少数几个大文件,加载效率提升明显,适合需要多次训练的场景:
打包完成后将打包文件存在云盘,后续训练直接读取打包文件即可,无需每次重复拷贝全量图片。!pip install webdataset - 方案3:优化DataLoader参数
训练时开启以下参数可以进一步提升数据加载吞吐量:train_loader = DataLoader( train_dataset, batch_size=32, shuffle=True, num_workers=4, # 可根据Colab可用CPU核心调整 pin_memory=True, persistent_workers=True )
内容的提问来源于stack exchange,提问作者Sadaf Shafi
相关产品推荐
相关产品推荐

