如何从 google colab 的压缩文件夹中读取/导入训练和测试图像以进行多分类? gdrive 已安装到 gcolab

Posted

技术标签:

【中文标题】如何从 google colab 的压缩文件夹中读取/导入训练和测试图像以进行多分类? gdrive 已安装到 gcolab【英文标题】:How to read/import training and testing images for multiclassification from a zipped folder in google colab? gdrive already mounted to gcolab 【发布时间】:2021-11-20 03:29:33 【问题描述】:

我对机器学习和深度学习还很陌生。我正在做一个学生项目,其中我正在做多分类图像处理。因为,我没有推荐的用于 tensorflow 的 nVIDIA gpu(也不能在 atm 购买),所以我使用 Google colab 和他们的虚拟 GPU。

我已将我的 gdrive 安装到 colab:

如您所见,它显示了训练集中的 131 个类/子文件夹。 131 是不同水果的名称 - 每个水果都有 1 个专用子文件夹。这些子文件夹中总共存储了 40,000 张图像。如下所示:

每个水果子文件夹都有与该类关联的图像,图像被命名为 0_100.jpg、1_100.jpg、2_100.jpg.....

如何读取这些图像并将其拆分为 X-train 和 X_val,以及如何创建关联的 y_train 目标名称。到目前为止,我只在 jupyter 实验室中使用过 sklearn 和 keras 数据集,它们已经排序和命名,我只需要导入它们。

由于数据集是从 kaggle 下载的,你认为直接从 colab 连接到 kaggle 并创建一个 json 文件会更好吗?...就像这个链接: https://towardsdatascience.com/an-informative-colab-guide-to-load-image-datasets-from-github-kaggle-and-local-machine-75cae89ffa1e

请有人建议如何做到这一点或指出一些相关的例子......非常感谢。

【问题讨论】:

【参考方案1】:

您可以使用 PyTorch 中的 DataLoader,例如:

import torch
import torchvision
from torchvision import transforms

train_transforms = transforms.Compose([
    # ...
    transforms.ToTensor() ])

train_dir = '/train_test/Training/'

# As you are going to split Training set into Train and Val sets, "Training" is your full_dataset
# Loading dataset from directory
full_dataset = torchvision.datasets.ImageFolder(train_dir, train_transforms)
# Splitting into Train and Val
train_size = int(0.8 * len(full_dataset))
val_size   = len(full_dataset) - val_size
train_dataset, val_dataset = torch.utils.data.random_split(full_dataset, [train_size, val_size])

# Creating a data_loader
train_dataloader = torch.utils.data.DataLoader( train_dataset )
val_dataloader   = torch.utils.data.DataLoader( val_dataset   )

如果您通过其他方法将数据集拆分为 Train 和 Val,或者不想使用 Val 集,请使用 torchvision.datasets.ImageFolder 加载 train_dataset 并直接创建数据加载器并跳过拆分部分。

它会自动创建X(输入图像)和Y(标签)集。然后,在训练阶段,您可以通过以下方式使用train_dataloader

# ...
for inputs, labels in tqdm(train_dataloader):
    inputs = inputs.to(device) # Your X-train
    labels = labels.to(device) # Your y_train
    # ...

它适用于您具有以下结构的情况(如果我清楚地了解您的数据存储方式):

|-train_test
    |-Test
    |-Training
        |-Apple Braeburn
        |   |-0_100.jpg
        |   |-1_100.jpg
        |   |-...
        |-Apple Crimson Snow
        |   |-0_100.jpg
        |   |-1_100.jpg
        |   |-...
        |-...

【讨论】:

非常感谢您的回复 :) 。我希望用 Keras/tensorflow 来做,但我想我可以使用 Pytorch(以前从未使用过,但它看起来很简单......谢谢)......所以,基本上输入 = X_train 和标签 = y_train 和我应该对我的测试文件夹执行相同的操作并获取 X_test 和 y_test.... 是输入和标签 numpy 数组,我可以将其用于训练/测试 CNN/或类似模型的输入,还是需要将它们转换为 nparrays? ? @Wendy,这样inputslabels 被转换为张量(transforms.Compose),适合像preds = model(inputs)loss_value = loss(preds, labels) 一样被输入到您的模型中迭代。对于测试阶段,您应该以相同的方式加载Test 设置(不要忘记禁用梯度以进行测试)。所有这些,以防您使用torch

以上是关于如何从 google colab 的压缩文件夹中读取/导入训练和测试图像以进行多分类? gdrive 已安装到 gcolab的主要内容,如果未能解决你的问题,请参考以下文章

使用Google Colab时如何从Google drive中加载自定义的包模型和数据集

如何从 Google Colab 下载多个文件或整个文件夹?

如何从Colab / Jupyter中的共享Google Drive链接获取文件?

从Google Colab中的驱动器读取文件

如何在 Google Colab 中引用共享文件和文件夹?

如何使用 Google Colab 中的脚本文件中的 pyplot 进行绘图?