You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Roboflow API上传YOLOv8数据集时同名重复文件夹问题的修复咨询

问题描述

我拥有YOLOv8检测项目的付费账户,在AWS云环境的VSCode中编写了Python代码,通过Roboflow API直接将图片上传至项目文件夹,代码整体运行正常,但偶尔会有1-2张图片被上传到同名的新文件夹中(如图所示)。尝试在代码不同位置添加time.sleep(),但并未解决问题,请问该如何修复?

def upload_dataset(i):
batch_name=(f'{str(i)}_24_04_24')
print(batch_name)
workspace = rf.workspace("my_workspace")
workspace.upload_dataset(
project_name="my_project",
dataset_path='/home/ubuntu/images/dataset',
num_workers=25,
project_license="MIT",
project_type="object-detection",
batch_name=batch_name)

异常上传结果


修复方案

1. 降低并发上传数

当前设置的num_workers=25并发量过高,Roboflow API在高并发场景下可能出现批次识别的竞态问题,导致部分请求误创建新批次。建议将并发数降至5-10区间测试,例如修改为:

num_workers=8

2. 上传前检查并确认批次存在

在上传操作前,先查询项目内是否已存在目标批次,避免重复创建。修改后的代码示例:

def upload_dataset(i):
    batch_name = f'{str(i)}_24_04_24'
    print(batch_name)
    workspace = rf.workspace("my_workspace")
    project = workspace.project("my_project")
    
    # 检查目标批次是否已存在
    existing_batches = project.list_batches()
    target_batch_exists = any(batch.name == batch_name for batch in existing_batches)
    
    # 若不存在则提前创建批次
    if not target_batch_exists:
        project.create_batch(batch_name)
    
    workspace.upload_dataset(
        project_name="my_project",
        dataset_path='/home/ubuntu/images/dataset',
        num_workers=8,
        project_license="MIT",
        project_type="object-detection",
        batch_name=batch_name)

3. 校验数据集目录结构

Roboflow对数据集目录结构和文件匹配有严格要求,若部分图片缺少对应标注文件、标注格式错误或图片损坏,可能触发异常上传逻辑。检查/home/ubuntu/images/dataset目录:

  • 图片与标注文件一一对应(如xxx.jpg对应xxx.txt)
  • 标注文件符合YOLOv8格式规范
  • 无损坏、无法读取的图片文件

4. 添加异常捕获与重试机制

针对上传过程中可能出现的网络波动或API响应异常,添加重试逻辑,避免单次异常导致的批次错位:

import time

def upload_dataset(i):
    batch_name = f'{str(i)}_24_04_24'
    print(batch_name)
    workspace = rf.workspace("my_workspace")
    max_retries = 3
    
    for attempt in range(max_retries):
        try:
            workspace.upload_dataset(
                project_name="my_project",
                dataset_path='/home/ubuntu/images/dataset',
                num_workers=8,
                project_license="MIT",
                project_type="object-detection",
                batch_name=batch_name)
            break
        except Exception as e:
            print(f"上传失败,重试第{attempt+1}次:{str(e)}")
            time.sleep(2)

内容的提问来源于stack exchange,提问作者Krilaria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 04:35:27