img2dataset

GitHub
4.4k 375 简单 1 次阅读 3天前MIT其他数据工具开发框架图像
AI 解读 由 AI 自动生成,仅供参考

img2dataset 是一款专为机器学习领域设计的高效数据准备工具,它能将海量的图片网址列表快速转化为标准化的图像数据集。在训练 AI 模型时,研究人员往往面临从互联网收集、下载并整理数百万甚至数十亿张图片的巨大挑战,手动操作不仅耗时费力,还难以保证数据格式的统一。img2dataset 正是为了解这一痛点而生,它支持批量下载、自动调整图片尺寸以及打包存储,甚至在单台机器上也能在约 20 小时内处理高达 1 亿个网址,极大提升了数据工程效率。

除了纯图像数据,该工具还能同步保存对应的文本描述,非常适合构建用于图文多模态训练的数据集(如 LAION、COCO 等知名数据集均可通过它轻松获取)。其技术亮点在于卓越的性能优化,包括对高并发下载的支持以及对网站“禁止 AI 抓取”协议的尊重与灵活配置,确保数据采集过程既快速又合规。

img2dataset 主要面向 AI 开发者、数据科学家及机器学习研究人员,尤其是那些需要大规模预训练数据的团队。虽然它通过命令行运行,对普通用户有一定门槛,但其提供的 Colab 笔记本和详细文档让上手变得相对简单。如果你正致力于计算机视觉或生成式 AI 的研究,想要摆脱繁琐的数据清洗工作,专注于模型创新,那么 img2dataset 将是你不可或缺的效率助手。

使用场景

某计算机视觉团队急需构建一个包含百万级“街头招牌”图像的数据集,以训练新一代 OCR 模型。

没有 img2dataset 时

  • 采集效率极低:工程师需编写复杂的多线程爬虫脚本,手动处理下载失败、重试机制及 DNS 解析瓶颈,耗时数周仅能获取少量数据。
  • 数据格式混乱:下载的图片尺寸不一、编码格式混杂,后续需额外开发脚本进行批量 resizing 和格式统一,预处理流程繁琐易错。
  • 元数据丢失风险:难以将图片 URL 与其对应的文本描述(Caption)自动对齐并打包,导致构建图文对数据集时人工清洗成本巨大。
  • 资源利用率低:单机无法有效并发处理海量链接,若要加速必须搭建昂贵的分布式集群,增加了基础设施维护负担。

使用 img2dataset 后

  • 极速规模化采集:只需提供一个包含百万个 URL 的文本文件,img2dataset 即可在单台机器上利用高效 DNS 解析,20 小时内完成下载、调整大小及打包全流程。
  • 自动化数据清洗:工具内置图片解码与 Resize 功能,自动过滤损坏链接并按指定分辨率(如 256x256)输出标准化的 WebDataset 格式,开箱即用。
  • 图文对完美同步:支持直接输入"URL+ 标题”列表,自动将文本描述保存为配套元数据,轻松构建高质量的图文训练集。
  • 合规性与灵活性:默认尊重网站的 noai 等robots 协议头,同时允许通过参数灵活控制下载策略,确保数据采集合法合规且适应不同需求。

img2dataset 将原本需要数周协作的工程难题转化为单条命令的自动化流程,让开发者能专注于模型算法而非数据搬运。

运行环境要求

操作系统
  • Linux
  • macOS
  • Windows
GPU

未说明 (该工具主要用于下载和调整图像大小,不依赖 GPU 进行深度学习推理或训练)

内存

未说明 (取决于并发线程数和图像缓存量,处理大规模数据集时建议较大内存)

依赖
notes该工具主要通过多线程/多进程进行网络下载和 CPU 图像处理。为了获得最佳性能,强烈建议配置高性能 DNS 解析器。支持多种分布式运行环境(如 PySpark, Ray)。默认会尊重网站的 'noai' 等 robots 标签,可通过参数禁用。输出格式支持文件目录、webdataset (tar)、parquet 和 tfrecord。
python未说明 (通常支持 Python 3.6+)
requests
Pillow
pyarrow
webdataset
pandas
tqdm
img2dataset hero image

快速开始

img2dataset

pypi Open In Colab Try it on gitpod Chat on discord

轻松将大量图片URL转换为图像数据集。在单台机器上,可在20小时内下载、调整大小并打包1亿个URL。

还支持保存URL+标题的数据集的标题信息。

如果您相信构建可重用工具能够让机器学习中的数据更易于使用,并希望参与贡献,请加入 DataToML 聊天群。

安装

pip install img2dataset

为了获得更好的性能,强烈建议设置一个高速DNS解析器,详情请参阅此部分

退出指令

网站可以通过HTTP头部传递 X-Robots-Tag: noaiX-Robots-Tag: noindexX-Robots-Tag: noimageaiX-Robots-Tag: noimageindex。默认情况下,img2dataset会忽略带有这些头部的图片。

若要禁用此行为并下载所有图片,可以传递 --disallowed_header_directives '[]'。

请参阅AI使用影响,以更好地理解为何您可能决定启用或禁用此功能。

示例

可在dataset_examples文件夹中找到可下载的数据集示例及相应命令。具体包括:

  • mscoco 60万张图片/文本对,可在10分钟内下载完成。
  • sbucaptions 86万张图片/文本对,可在20分钟内下载完成。
  • cc3m 300万张图片/文本对,可在1小时内下载完成。
  • cc12m 1200万张图片/文本对,可在5小时内下载完成。
  • laion400m 4亿张图片/文本对,可在3.5天内下载完成。
  • laion5B 50亿张图片/文本对,使用10个节点可在7天内下载完成。
  • laion-aesthetic Laion aesthetic是包含1.2亿条记录的laion5B子集,其中审美评分>7,水印分数<0.8,安全分数<0.5。
  • laion-art Laion aesthetic是包含800万条记录的laion5B子集,其中审美评分>8,水印分数<0.8,安全分数<0.5。
  • laion-coco Laion-COCO是LAION2B-EN中的6亿条记录子集,由BLIP L/14和2种CLIP版本(L/14和RN50x64)联合生成的标题。
  • laion-high-resolution Laion high resolution是从laion5B中筛选出的1.7亿条分辨率≥1024×1024的子集。
  • laion-face Laion face是从LAION-400M中筛选出的人脸子集,用于大规模人脸预训练,包含5000万张图片/文本对。
  • coyo-700m COYO是一个大规模数据集,包含7.47亿张图片/文本对,以及许多其他元属性,以提高其在训练各种模型时的可用性。
  • commonpool CommonPool是从CommonCrawl收集的大规模数据集,包含128亿张图片/文本对。
  • datacomp-1b DataComp-1B是从CommonPool中筛选出的14亿张图片/文本对的大规模数据集。

对于以上所有示例,您可以根据自己的喜好调整图片的尺寸。默认设置为256×256像素,并添加白色边框。 更多选项请见下文。

使用方法

首先获取一些图片URL列表。例如:

echo 'https://picsum.photos/200/305' >> myimglist.txt
echo 'https://picsum.photos/200/304' >> myimglist.txt
echo 'https://picsum.photos/200/303' >> myimglist.txt

然后运行该工具:

img2dataset --url_list=myimglist.txt --output_folder=output_folder --thread_count=64 --image_size=256

工具将自动下载这些URL,调整图片大小,并按以下格式存储:

  • output_folder
    • 00000
      • 000000000.jpg
      • 000000001.jpg
      • 000000002.jpg

或者如果选择webdataset格式,则会以如下形式存储:

  • output_folder
    • 00000.tar 文件包含:
      • 000000000.jpg
      • 000000001.jpg
      • 000000002.jpg

每个编号对应于列表中的位置。子文件夹的设计避免了单个文件夹中文件过多的问题。

如果提供了标题,它们将被保存为0.txt、1.txt等文件。

之后,这些数据即可轻松输入到机器学习训练或其他应用场景中。

此外,还会保存名为0.json、1.json等的JSON文件,包含以下键值:

  • url
  • 标题
  • 键值,格式为000010005:前5位数字表示分片ID,后4位表示分片内的索引
  • 状态:下载是否成功
  • 错误信息
  • 宽度
  • 高度
  • 原始宽度
  • 原始高度
  • EXIF信息

同时,还会以与子文件夹或tar文件同名的方式保存一个.parquet文件,其中包含相同的元数据。这可用于高效地分析结果。

另外,还会保存以_stats为后缀的JSON文件,其中包含下载过程中收集的统计信息(下载时间、成功次数等)。

Python示例

请查看以下示例,了解如何将其作为库调用:

API

本模块暴露了一个名为 download 的函数,其参数与命令行工具的参数相同:

  • url_list 一个包含待下载图片 URL 列表的文件。也可以是一个包含此类文件的文件夹。(必填)
  • image_size 图片的目标尺寸(默认 256
  • output_folder 输出文件夹的路径。(默认 "images"
  • processes_count 用于下载图片的进程数。为了性能,此值应设置得较高。(默认 1
  • thread_count 用于下载图片的线程数。为了性能,此值应设置得较高。(默认 256
  • resize_mode 图片的缩放方式,可选值为 no、border 或 keep_ratio(默认 border):
    • no 不进行任何缩放
    • border 将图片调整为 image_size x image_size 大小,并添加边框
    • keep_ratio 保持宽高比,使图片的短边长度为 image_size
    • keep_ratio_largest 保持宽高比,使图片的长边长度为 image_size
    • center_crop 保持宽高比,对长边进行居中裁剪,使图片变为正方形
  • resize_only_if_bigger 仅当图片大于目标尺寸时才进行缩放(默认 False
  • upscale_interpolation 缩放时使用的插值方法(默认 "lanczos"
  • downscale_interpolation 缩放时使用的插值方法(默认 "area"
  • encode_quality 编码质量,范围为 0 到 100;使用 PNG 格式时,该参数表示压缩级别,范围为 0 到 9(默认 95
  • encode_format 编码格式(默认 jpg):
    • jpg JPEG 格式
    • png PNG 格式
    • webp WebP 格式
  • skip_reencode 如果未进行缩放,是否跳过重新编码(默认 False
  • output_format 决定如何保存图片(默认 files):
    • files 以包含图片的子文件夹集合形式保存
    • webdataset 以包含图片的 tar 文件形式保存
    • parquet 以包含图片字节数据的 Parquet 文件形式保存
    • tfrecord 以包含图片字节数据的 TFRecord 文件形式保存
    • dummy 不保存图片,适用于基准测试
  • input_format 决定如何加载 URL 列表(默认 txt):
    • txt 以每行一个 URL 的文本文件形式加载
    • txt.gz 以 gzip 压缩的 txt.gz 文件形式加载,文件中每行包含一个 URL
    • csv 以 CSV 文件形式加载 URL 及可选标题
    • csv.gz 以 gzip 压缩的 csv.gz 文件形式加载 URL 及可选标题
    • tsv 以 TSV 文件形式加载 URL 及可选标题
    • tsv.gz 以 gzip 压缩的 tsv.gz 文件形式加载 URL 及可选标题
    • json 以 JSON 文件形式加载 URL 及可选标题
    • json.gz 以 gzip 压缩的 json.gz 文件形式加载 URL 及可选标题
    • jsonl 以 JSONL 文件形式加载 URL 及可选标题。更多信息请参见 jsonlines
    • jsonl.gz 以 gzip 压缩的 jsonl.gz 文件形式加载 URL 及可选标题。更多信息请参见 jsonlines
    • parquet 以 Parquet 文件形式加载 URL 及可选标题
  • url_col Parquet 和 CSV 文件中 URL 列的名称(默认 url
  • caption_col Parquet 和 CSV 文件中标题列的名称(默认 None
  • bbox_col 边界框列的名称。假设边界框的格式为 [x_min, y_min, x_max, y_max],其中所有元素均为介于 [0,1] 之间的浮点数(相对于图片尺寸)。如果设置为 None,则不会对边界框进行模糊处理(默认 None
  • number_sample_per_shard 每个分片将下载的样本数量(默认 10000
  • extract_exif 如果为真,则提取图片的 EXIF 信息并将其保存到元数据中(默认 True
  • save_additional_columns 从 CSV/Parquet 文件中提取并保存到元数据文件中的附加列列表(默认 None
  • timeout 尝试下载一张图片时的最大等待时间(以秒为单位)(默认 10
  • enable_wandb 是否启用 WandB 日志记录(默认 False
  • wandb_project 使用的 W&B 项目名称(默认 img2dataset
  • oom_shard_count 分片数量的数量级,仅用于决定为分片文件命名时应使用多少位零填充(默认 5
  • compute_hash 需要计算并存储在元数据中的原始图片哈希值,可选值为 Nonemd5sha256sha512(默认 sha256
  • verify_hash 如果不为 None,则该参数为一个包含两个元素的列表,用于根据提供的输入验证哈希值。列表的第一个元素是输入文件中包含哈希值的列的标签,第二个元素是所检查哈希值的类型(默认 None
  • distributor 选择下载任务的分配方式(默认 multiprocessing):
    • multiprocessing 使用多进程池来启动进程
    • pyspark 使用 PySpark 会话在 Spark 集群上创建工作节点(详情见下文)
    • ray 使用 Ray 集群。请参阅 Ray 示例。
  • subjob_size 支持该功能的每个子任务中要下载的分片数量,例如,一个子任务可以是一个 PySpark 作业。(默认 1000
  • retries 下载失败后重试的次数(默认 0
  • disable_all_reencoding 如果设置为 True,图片文件将保持其原始状态,不进行任何缩放或格式转换,甚至不会检查图片是否有效。适用于基准测试。仅当您计划使用其他程序对图片进行后处理且拥有充足存储空间时才使用。(默认 False
  • min_image_size 待下载图片的最小尺寸(默认 0
  • max_image_area 待下载图片的最大面积(默认 inf
  • max_aspect_ratio 待下载图片的最大宽高比(默认 inf
  • incremental_mode 可选值为 "incremental"、"overwrite" 或 "extend"。对于 "incremental",img2dataset 将下载所有尚未下载的分片;对于 "overwrite",img2dataset 将递归删除输出文件夹并从头开始;对于 "extend",img2dataset 将从下一个可用的分片编号开始下载。(默认 incremental
  • max_shard_retry 在最后重试失败分片的次数(默认 1
  • user_agent_token 额外的身份标识令牌,将被添加到用于下载图片的 HTTP 请求的 User-Agent 头中;例如:"img2downloader"。(默认 None
  • disallowed_header_directives X-Robots-Tags 头部指令列表,如果在下载图片时的 HTTP 响应中出现这些指令,则该图片将被排除在输出数据集之外。若要忽略 X-Robots-Tags,请传递 '[]'。(默认 '["noai", "noimageai", "noindex", "noimageindex"]')
  • ignore_ssl_certificate 如果设置为 True,下载图片时将禁用 SSL 证书验证。这允许从使用无效或自签名证书的服务器下载图片,但会降低安全性。请谨慎使用。(默认 False)

增量模式

如果首次下载因任何原因中断,您可以再次运行命令,并添加 --incremental "incremental"(这是默认设置),同时使用相同的输出文件夹、相同的 number_sample_per_shard 参数以及相同的输入 URL 列表,img2dataset 将会继续完成剩余部分的下载。

输出格式选择

Img2dataset 支持多种输出格式。不同格式各有优劣,需根据具体需求进行选择:

  • files:这是最简单的格式,图像直接以文件形式保存。适用于本地文件系统中最多 100 万张样本的情况。超过这个数量后,性能问题会迅速显现。在标准文件系统中处理超过 100 万个文件通常效果不佳。
  • webdataset:该格式将样本存储为 tar 文件,借助 webdataset 库,可以高效地在 PyTorch、TensorFlow 和 JAX 中加载生成的数据集。对于大多数应用场景,推荐使用此格式。它适用于任何类型的文件系统。
  • parquet:Parquet 是一种列式存储格式,支持快速过滤。使用 PyArrow 和 PySpark 可以非常方便地读取这种格式的数据。如果您的数据生态系统主要基于 PySpark,则可以选择此格式。Petastorm 也可以用来读取数据,但其使用便捷性不如 webdataset。
  • tfrecord:tfrecord 是一种基于 Protocol Buffers 的格式,特别适合在 TensorFlow 生态系统中使用,并可通过 tf.data API 轻松操作。如果您计划仅在 TensorFlow 环境中使用该数据集,可选择此格式。不过,TensorFlow 的写入器不支持 fsspec,因此仅支持有限的文件系统,包括本地、HDFS、S3 和 GCS。此外,在非本地文件系统上写入时,其效率也低于 webdataset 写入器,性能可能降低约 30%。

编码格式选择

图像可以采用 JPEG、PNG 或 WebP 格式进行编码,并且每种格式都支持不同的质量设置。

以下是 100 万张 256×256 分辨率图像在不同格式下的存储空间对比:

格式 质量 压缩方式 大小 (GB)
JPG 100 54.2
JPG 95 29.9
PNG 0 187.9
PNG 9 97.7
WebP 100 31.0
WebP 95 23.8

注意事项:

  • JPEG 在质量设置为 100 时并非无损压缩。
  • PNG 格式为无损压缩。
  • WebP 在质量设置高于 100 时为无损压缩(详见 OpenCV 文档)。
  • 不同格式之间的相同质量等级并不意味着图像质量完全一致。

数据集筛选

在条件允许的情况下,建议在下载数据集之前先对其进行预筛选。

如有需要,可以使用以下参数:

  • --min_image_size SIZE:用于过滤掉任意一边小于 SIZE 的图像。
  • --max_image_area SIZE:用于过滤掉面积大于 SIZE 的图像。
  • --max_aspect_ratio RATIO:用于过滤掉宽高比大于 RATIO 的图像。

在进行数据筛选时,建议先对数据集进行打乱排序,以减少对分片大小分布的影响。

哈希值与安全性

某些数据集(例如 laion5B)会公开原始图像的哈希值。

如果您希望更加安全,可以自动排除与这些哈希值不匹配的图像。此时可以使用 --compute_hash "md5" --verify_hash '["md5","md5"]' 参数。

需要注意的是,部分图像虽然经过轻微修改,但仍属有效。

SSL 证书处理

默认情况下,img2dataset 在下载图像时会验证 SSL 证书。然而,某些服务器可能使用无效或自签名的证书。

若要从这类服务器下载图像,可以禁用 SSL 证书验证:

img2dataset --url_list=myimglist.txt --output_folder=output_folder --ignore_ssl_certificate=True

警告:禁用 SSL 证书验证会降低安全性,使下载过程容易受到中间人攻击。请仅在必要且信任来源的情况下使用此选项。

参数调优建议

对于小型数据集,默认设置通常已足够。但对于大型数据集,以下建议可能有助于提升性能:

  • processes_count 设置为机器的核心数。
  • 在带宽和 CPU 使用未达到上限的前提下,适当增加 thread_count
  • 如果数据集规模超过 100 万条,建议将 output_format 设置为 webdataset,这样只需管理少量的 tar 文件,而非数百万个单独的图像文件。
  • 保持 metadata 参数为 True,以便查看已保存的项目,避免重复下载。

为了测试系统性能及 img2dataset 与其交互情况,可以启用以下选项(仅用于测试,不应用于实际下载):

  • --output_format dummy:不会保存任何内容,可用于消除存储瓶颈。
  • --disable_all_reencoding True:不会对图像进行重新编码,可用于消除 CPU 瓶颈。

当同时启用这两个选项时,剩下的唯一瓶颈就是网络相关因素,例如 DNS 配置、您的带宽或目标服务器的带宽。

文件系统支持

得益于 fsspec,img2dataset 支持在多种文件系统中读取和写入文件(详见 fsspec 文件系统列表)。使用时,只需在路径前加上相应文件系统的前缀即可,例如 hdfs://s3://http://gcs://ssh://hf://(包含 Dataset Viewer 功能)。

部分文件系统需要额外安装相应的库,例如 S3 需要 s3fs,GCS 需要 gcsfs,SSH 需要 fsspec/sshfs,而 HF 则需要 huggingface_hub

有关详细信息,请参阅 fsspec 官方文档。

如果您的文件系统需要特定配置,可以通过 fsspec 配置系统 来解决。例如,您可以在 .config/fsspec/s3.json 文件中添加如下内容:

{
  "s3": {
    "client_kwargs": {
            "endpoint_url": "https://some_endpoint",
            "aws_access_key_id": "your_user",
           "aws_secret_access_key": "your_password"
    }
  }
}

此类配置在使用兼容 S3 协议的文件系统(如 MinIO)时尤为必要。类似的配置同样适用于其他受 fsspec 支持的文件系统。

分发模式

Img2dataset 支持多种分发方式:

  • multiprocessing:启动一个进程池,利用本地进程进行下载。
  • pyspark:在 Spark 集群中启动工作节点来执行下载任务。

multiprocessing 适合在单机上进行下载,因此它是默认选项。而 pyspark 则可以利用多台机器并行下载,下载速度与机器数量成正比。当处理包含超过十亿张图片的数据集时,pyspark 尤其有用。

pyspark 配置

要使用 pyspark 运行 img2dataset,您需要完成以下步骤:

  1. 安装 pysparkpip install pyspark
  2. 使用 --distributor pyspark 选项
  3. 调整 --subjob_size 1000 参数:该参数指定每个子任务下载的图片数量。增大此值会延长将 Feather 文件放入临时目录的准备时间;减小则意味着每次发送给 PySpark 作业的分片更少。

默认情况下,会创建一个本地 Spark 会话。根据您的具体 Spark 集群配置,您可能希望创建自定义的 Spark 会话。有关详细信息,请参阅 pyspark_example.py,您可以在其中插入自定义代码以创建 Spark 会话,然后运行 img2dataset,它将使用该会话进行下载。

如需搭建 Spark 集群,请参考 分布式 img2dataset 教程

与 Weights & Biases 的集成

要启用 Weights & Biases 日志记录,使用 --enable_wandb=True 选项。

性能指标将通过 Weights & Biases 进行监控。

W&B 指标

此外,最常见的错误也会被记录下来,以便于调试。

W&B 表格

其他功能包括:

  • 记录环境配置(操作系统、Python 版本、CPU 核数、主机名等)
  • 监控硬件资源(GPU/CPU、内存、磁盘、网络等)
  • 自定义图表和报告
  • 比较不同运行结果(在优化线程数或 CPU 数等参数时非常方便)

首次运行脚本时,您可以选择将指标关联到您的账户,或者以匿名方式记录。

您也可以提前通过运行 wandb login 登录(或创建账户)。

路线图

目前,该工具在最多 1 亿个元素的情况下表现良好。未来目标包括:

  • 针对 10 亿张图片的基准测试,这可能需要
    • 对图像缩放部分进一步优化
    • 更好的多节点支持
    • 集成增量下载功能(仅下载新增元素)

架构说明

该工具旨在尽可能快速地下载图片,这会对各种资源造成压力。以下是一些假设每秒下载 1350 张图片时的估算:

  • 带宽:每秒下载一千张平均大小的图片大约需要 130 MB/s 的带宽。
  • CPU:缩放一张图片可能需要几毫秒,每秒数千张图片可能会占用多达 16 个核心。
  • DNS 查询:百万个 URL 意味着百万个域名,默认的操作系统设置通常不足以应对。可能需要配置本地 bind9 解析器。
  • 磁盘:如果使用缩放功能,写入速度需要达到 30 MB/s;如果不使用缩放,则需要 130 MB/s。通过将数据写入少量 tar 文件,可以使用机械硬盘代替 SSD。

基于以上信息,设计选择了如下方案:

  • 将 URL 列表拆分为 K 个分片。K 的取值应使每个分片在磁盘上具有合理大小(例如 256 MB),默认 K = 10000。
  • 启动 N 个进程(使用 multiprocessing 进程池):
    • 每个进程启动 M 个线程。M 应尽可能大,以便充分利用网络带宽,同时确保 CPU 使用率不超过 100%。
    • 每个线程下载一张图片并返回。
    • 主线程负责图像缩放(这意味着同一时刻最多只有 N 个缩放任务在运行,充分利用所有核心但不会超负荷)。
    • 主线程将数据保存到与其他进程不同的 tar 文件中。

这种设计能够高效利用 CPU 资源,每个核心只执行一次缩放操作;通过为每个核心打开一个文件来减少磁盘开销;同时利用每个进程中的 M 个线程最大限度地发挥带宽优势。

有关 Python 模块的具体划分,请参阅 architecture.md

搭建高性能 DNS 解析器

为了获得 img2dataset 的最佳性能,使用高效的 DNS 解析器至关重要。

  • Knot Resolver 可以并行运行。
  • Bind Resolver 是历史悠久的解析器,虽然是单核的,但经过高度优化。

搭建 Knot Resolver

您可以按照 官方快速入门指南 操作,或者在 Ubuntu 上执行以下命令:

安装 Knot Resolver:

wget https://secure.nic.cz/files/knot-resolver/knot-resolver-release.deb
sudo dpkg -i knot-resolver-release.deb
sudo apt update
sudo apt install -y knot-resolver
sudo sh -c 'echo `hostname -I` `hostname` >> /etc/hosts'
sudo sh -c 'echo nameserver 127.0.0.1 > /etc/resolv.conf'
sudo systemctl stop systemd-resolved

然后启动 4 个实例:

sudo systemctl start kresd@1.service
sudo systemctl start kresd@2.service
sudo systemctl start kresd@3.service
sudo systemctl start kresd@4.service

通过以下命令验证是否正常工作:

dig @localhost google.com

搭建 Bind9 解析器

为了保持较高的成功率,使用高效的 DNS 解析器是必要的。我尝试过 systemd-resolved、dnsmaskq 和 bind9 等多种解决方案,最终得出结论:bind9 在此场景下表现最佳。以下是如何在 Ubuntu 上进行配置的方法。运行以下命令:

sudo apt install bind9
sudo vim /etc/bind/named.conf.options

并在 options 中添加以下内容:

	recursive-clients 10000;
	resolver-query-timeout 30000;
	max-clients-per-query 10000;
	max-cache-size 2000m;

然后运行:

sudo systemctl restart bind9
echo nameserver 127.0.0.1 | sudo tee -a /etc/resolv.conf

这样可以在进行数千次 DNS 查询的同时,保持较高的成功率。您还可以参考 Bind9 日志记录指南,以检查是否有少量 DNS 错误发生。

AI 使用的影响

img2dataset 用于从网络上抓取图像,并使其易于供机器学习用例使用。其应用场景包括:

可以使用图像/文本数据集训练的模型包括:

  • CLIP:一种图像理解模型,可用于判断图像是否安全、是否具有美学价值、包含何种动物等;
  • 文本到图像模型:根据文本生成图像。

关于文本到图像模型的后果,目前存在大量讨论。一些观点包括:

  • AI 艺术正在使艺术更加民主化,让数亿人能够通过艺术表达自我,从而使艺术作品变得更加普遍和独特;
  • 不应使用创作者不希望分享的图像来训练 AI 模型。

“退出机制”旨在允许那些不希望自己的作品被用于索引和训练的创作者,确保其作品不会被使用。

开发指南

您可以在本地或在 GitPod 中进行开发(请注意,在 GitPod 中需要执行 export PIP_USER=false 命令)。

设置虚拟环境:

python3 -m venv .env
source .env/bin/activate
pip install -e .

运行测试:

pip install -r requirements-test.txt

然后执行:

make lint
make test

您可以使用 make black 来格式化代码。

运行特定测试的命令为:

python -m pytest -x -s -v tests -k "dummy"

基准测试

10,000 张图像基准测试

cd tests/test_files
bash benchmark.sh

1800 万张图像基准测试

首先下载“在家爬取”数据集的第一部分,然后执行以下命令:

cd tests
bash large_bench.sh

下载 1800 万张图片耗时约 3.7 小时。

目前观察到的性能为每秒 1350 张图像,即每小时 480 万张图像,每天可处理 1.16 亿张图像。

3600 万张图像基准测试

下载两个各包含 1800 万条记录的 Parquet 文件(总大小 936GB),耗时 7 小时 24 分钟,平均速度为每秒 1345 张图像。

1.9 亿张图像基准测试

从“在家爬取”数据集(cah-prepro)下载 1.9 亿张图像,耗时 41 小时(总大小 5TB),平均速度为每秒 1280 张图像。

50 亿张图像基准测试

从 LAION-5B 数据集(laion5B dataset)下载 58 亿张图像,耗时 7 天(总大小 240TB),在 10 台机器上平均速度为每秒 9500 个样本。详细技术说明请参见:semantic search at billions scale

引用

@misc{beaumont-2021-img2dataset,
  author = {Romain Beaumont},
  title = {img2dataset: Easily turn large sets of image urls to an image dataset},
  year = {2021},
  publisher = {GitHub},
  journal = {GitHub repository},
  howpublished = {\url{https://github.com/rom1504/img2dataset}}
}

版本历史

1.47.02025/08/09
1.46.02025/08/09
1.45.02024/01/22
1.44.12024/01/11
1.44.02024/01/11
1.43.02024/01/06
1.42.02023/08/20
1.41.02023/01/07
1.40.02022/12/22
1.39.02022/12/19
1.38.02022/12/17
1.37.02022/12/17
1.36.02022/12/10
1.35.02022/11/26
1.34.02022/11/25
1.33.02022/08/23
1.32.02022/07/24
1.31.02022/06/27
1.30.22022/06/24
1.30.12022/05/26

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|2周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

160.8k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

109.2k|★★☆☆☆|昨天
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|1周前
插件开发框架