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

如何下载数据集JSON分片中引用的图片(以image_caption/textcaps为例)

问题

我正在使用HuggingFace上的image_caption/textcaps数据集分片,下载的JSON文件里列出了图片文件名(比如train/011e7e629fb9ae7b.jpg),但实际图片文件缺失。我需要这些.jpg文件来结合QA对,在训练/验证过程中做图片可视化。

已执行操作

  • 安装了Git LFS
  • 用以下命令克隆数据集:
    git lfs install
    git clone git@hf.co:datasets/<dataset-id>
    
    结果只下载了.jsonl/.json元数据文件,没拿到图片。

最小复现示例

from datasets import load_dataset

# 加载数据集分片
dataset = load_dataset("allenai/c4", split="train")

# 查看条目
print(dataset[0]['image'])  # 示例输出:"train/011e7e629fb9ae7b.jpg"

# 尝试访问图片(但文件不存在)
image_path = "path/to/downloaded/dataset/" + dataset[0]['image']

try:
    with open(image_path, 'rb') as f:
        img_data = f.read()
except FileNotFoundError:
    print(f"Image file not found: {image_path}")

输出:

Image file not found: path/to/downloaded/dataset/train/011e7e629fb9ae7b.jpg

示例JSON条目

{
  "image": "train/011e7e629fb9ae7b.jpg",
  "qa": [
    {
      "a": "Five Listerine Zero mouthwash bottles on a store shelf.",
      "i": "Write a one-sentence description of the image, requiring reading the text."
    }
  ]
}

核心疑问

怎么下载JSON里引用的实际图片文件?有没有遗漏的外部存储链接、额外步骤或方法?

补充说明

  • 数据集中没有.tar或.zip压缩包
  • HuggingFace数据集查看器能正常显示图片

解决方案

方法1:用datasets库自动处理图片加载

datasets库会自动处理图片的远程下载和本地缓存,无需手动拼接路径。修改代码如下:

from datasets import load_dataset
from PIL import Image

# 加载textcaps数据集,库会自动拉取图片
dataset = load_dataset("image_caption/textcaps", split="train")

# 直接调用image字段即可获取PIL格式的图片,可直接可视化
image = dataset[0]['image']
image.show()

图片会被缓存到本地默认路径(~/.cache/huggingface/datasets/),后续访问无需重复下载。

方法2:手动批量下载图片到指定目录

如果需要将图片统一保存到自定义目录,可按以下步骤操作:

  1. 找到数据集的加载脚本(在HuggingFace数据集页面的Files and versions板块中找到对应脚本文件,比如textcaps.py),从中提取图片的基础托管地址。
  2. 提取JSON中的图片文件名,与基础地址拼接成完整下载路径,批量下载。示例代码:
import json
import requests

# 读取本地数据集JSON文件
with open("path/to/dataset/train.json", "r") as f:
    data = json.load(f)

# 替换为从加载脚本中获取的图片基础托管地址
base_url = "[图片基础托管地址]/"
save_dir = "path/to/your/save/directory/"

# 批量下载图片
for item in data:
    # 提取图片文件名(比如从"train/xxx.jpg"中取出"xxx.jpg")
    img_filename = item['image'].split("/")[-1]
    download_url = base_url + img_filename
    
    response = requests.get(download_url)
    if response.status_code == 200:
        with open(f"{save_dir}{img_filename}", "wb") as f:
            f.write(response.content)

方法3:排查Git LFS同步问题

如果克隆时未拉取到图片,可进入数据集目录执行以下命令强制同步LFS文件:

cd <dataset-id>
git lfs pull

注:textcaps数据集的图片通常不通过Git LFS存储,此方法仅用于排查基础同步问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 06:37:24