使用ImageFolder时报错FileNotFoundError: Couldn‘t find any class folder in ../autodl-fs/COCO2017/

1.调试的关键就是仔细研究报错信息。

根据报错信息回溯到关键代码:train_images = datasets.ImageFolder(train_options.train_folder, data_transforms['train'])分析报错原因就是train_folder找不到数据集入口路径:datasets.ImageFolder函数无法在指定的路径../autodl-fs/COCO2017/中找到任何类别文件夹。这意味着该路径下缺少所需的文件夹结构。

2.了解datasets.ImageFolder的功能发现自己提供的路径下直接就是图片而不是图片所在的分类文件夹。

datasets.ImageFolder函数要求数据集的文件夹结构按照类别进行组织,每个类别在数据集文件夹中应该有一个单独的子文件夹,并且每个子文件夹中存放该类别的图像样本。因此要解决这个问题,你需要确保在../autodl-fs/COCO2017/路径下存在正确的类别文件夹结构。例如,假设你的数据集包含两个类别,命名为"cat"和"dog",那么你的文件夹结构应该类似于:

../autodl-fs/COCO2017/
├── cat
│   ├── cat_image1.jpg
│   ├── cat_image2.jpg
│   └── ...
└── dog
    ├── dog_image1.jpg
    ├── dog_image2.jpg
    └── ...

3.新建分类图片的脚本class.py来对COCO2017数据集根据annotations文件夹中的标签来对数据集进行分类以达到步骤2所示的结构层次。(需注意,代码中的annotations_path和train_folder都是基于我自己的相对路径,大家需要根据自己的运行路径来修改 )

import os
import json
import shutil

annotations_path = "annotations/instances_train2017.json"
train_folder = "COCO2017/train"

# 读取注释文件
with open(annotations_path, "r") as f:
    annotations = json.load(f)

# 遍历每个图像的注释信息
for image in annotations["images"]:
    image_id = image["id"]
    file_name = image["file_name"]
    
    # 根据图像ID查找对应的注释信息
    image_annotations = [ann for ann in annotations["annotations"] if ann["image_id"] == image_id]
    
    # 获取标签信息
    labels = [ann["category_id"] for ann in image_annotations]

    # 根据标签创建对应的子文件夹
    for label in labels:
        label_folder = os.path.join(train_folder, str(label))
        os.makedirs(label_folder, exist_ok=True)
        
        # 移动图像到对应的子文件夹
        src_path = os.path.join(train_folder, file_name)
        dst_path = os.path.join(label_folder, file_name)
        shutil.move(src_path, dst_path)

4.成功根据COCO数据集的类别标签分为90个子文件夹,然后代码成功找到数据集入口!

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值