NVAE

GitHub
1.1k 179 中等 1 次阅读 2周前NOASSERTION图像
AI 解读 由 AI 自动生成,仅供参考

NVAE 是一个基于 PyTorch 实现的深度分层变分自编码器,源自 NeurIPS 2020 的焦点论文。它主要用于构建高性能的生成模型,能够在 MNIST、CIFAR-10、CelebA 及 ImageNet 等多个图像数据集上训练出具有业界领先(SOTA)似然估计能力的模型。

传统变分自编码器在处理高分辨率图像时,往往难以平衡生成质量与概率建模的准确性。NVAE 通过引入深层分层结构,有效解决了这一难题,显著提升了模型捕捉复杂数据分布的能力,从而生成更清晰、细节更丰富的图像。

这款工具特别适合人工智能研究人员、深度学习开发者以及计算机视觉领域的工程师使用。如果你正在探索生成式 AI 的前沿技术,或需要复现高质量的图像生成实验,NVAE 提供了完整的训练脚本和数据预处理流程。其独特的技术亮点在于“深度分层”架构,通过在潜在空间的不同层级进行建模,极大地增强了模型对图像全局结构与局部纹理的理解力。虽然配置过程涉及 LMDB 数据集转换等技术细节,但其开源代码为学术研究和工程落地提供了坚实的基础。

使用场景

某时尚电商公司的算法团队正致力于构建一个高保真的人脸图像生成系统,用于虚拟模特试衣和个性化营销素材制作。

没有 NVAE 时

  • 生成图像细节模糊:传统变分自编码器(VAE)在处理高分辨率人脸(如 CelebA HQ 256x256)时,往往丢失高频纹理,导致生成的皮肤质感像“磨皮过度”,缺乏真实毛孔和发丝细节。
  • 潜在空间控制力弱:模型难以捕捉从全局轮廓到局部五官的多尺度特征,开发者无法独立调整发型、表情或光照而不影响其他面部结构。
  • 训练收敛困难:在深层网络中尝试增加层级以提升效果时,常遭遇梯度消失或模式崩溃,导致训练不稳定,难以在大规模数据集上达到业界领先的似然估计分数。

使用 NVAE 后

  • 还原极致纹理细节:利用 NVAE 的深度分层架构,模型成功学习了多层级的潜在变量,生成的人脸图像清晰呈现了皮肤纹理、发丝走向甚至眼神光,视觉效果达到 SOTA 水平。
  • 实现精细化编辑:得益于分层潜在空间,团队可以分别操控不同层级的变量,实现了仅改变人物表情而保持身份不变,或仅调整光照而不扭曲五官的精准编辑能力。
  • 稳定训练大规模数据:NVAE 在 ImageNet 和 FFHQ 等大数据集上表现出卓越的训练稳定性,无需复杂的技巧即可收敛,显著缩短了从实验到部署的周期。

NVAE 通过深度分层建模突破了传统生成模型的分辨率与细节瓶颈,让高质量、可控的人脸合成真正落地于商业生产环境。

运行环境要求

操作系统
  • Linux
GPU
  • 必需 NVIDIA GPU
  • 根据数据集不同,需求如下:MNIST (2x 16GB V100), CIFAR-10/CelebA 64 (8x 16GB V100), ImageNet 32x32 (24x 16GB V100), CelebA HQ 256/FFHQ 256 (24x 32GB V100)
  • 支持多节点分布式训练 (mpirun)
内存

未说明

依赖
notes1. 大型数据集(如 CelebA, ImageNet, FFHQ)需预先转换为 LMDB 格式以提高 I/O 效率,README 中提供了具体的转换脚本。2. 多节点训练需配置 mpirun 并指定主节点 IP 和节点排名。3. 部分小模型可在较少 GPU(如 8 张)上训练,但官方推荐配置基于 V100 显卡。4. 代码依赖 `requirements.txt` 安装,具体版本以 PyTorch 1.6.0 为准。
python3.7
torch==1.6.0
lmdb
numpy
pillow
scipy
NVAE hero image

快速开始

“NVAE:一种深度层次化变分自编码器”的官方 PyTorch 实现 (NeurIPS 2020 Spotlight 论文)



NVAE 是一种深度层次化变分自编码器,它使得在多个图像数据集上训练 SOTA 基于似然的生成模型成为可能。

要求

NVAE 使用 Python 3.7 和 PyTorch 1.6.0 构建。请使用以下命令安装依赖:

pip install -r requirements.txt

设置文件路径和数据

我们已经在多个数据集上测试了 NVAE。对于大型数据集,为了提高 I/O 效率,我们将数据存储在 LMDB 数据集中。点击下方的每个数据集,查看如何准备您的数据。其中,$DATA_DIR 表示包含所有数据集的数据目录路径,而 $CODE_DIR 指的是代码目录:

MNIST 和 CIFAR-10

首次运行 train.py 进行 NVAE 主训练时,这些数据集会自动下载。您可以使用 --data=$DATA_DIR/mnist--data=$DATA_DIR/cifar10 参数,以便将数据集下载到相应的目录中。

CelebA 64 运行以下命令下载 CelebA 图像并将其存储为 LMDB 数据集:
cd $CODE_DIR/scripts
python create_celeba64_lmdb.py --split train --img_path $DATA_DIR/celeba_org --lmdb_path $DATA_DIR/celeba64_lmdb
python create_celeba64_lmdb.py --split valid --img_path $DATA_DIR/celeba_org --lmdb_path $DATA_DIR/celeba64_lmdb
python create_celeba64_lmdb.py --split test  --img_path $DATA_DIR/celeba_org --lmdb_path $DATA_DIR/celeba64_lmdb

上述命令会自动将图像下载到 $DATA_DIR/celeba_org 目录,随后在 $DATA_DIR/celeba64_lmdb 创建 LMDB 数据集。

ImageNet 32x32

运行以下命令从 GLOW 下载 tfrecord 文件,并将其转换为 LMDB 数据集:

mkdir -p $DATA_DIR/imagenet-oord
cd $DATA_DIR/imagenet-oord
wget https://storage.googleapis.com/glow-demo/data/imagenet-oord-tfr.tar
tar -xvf imagenet-oord-tfr.tar
cd $CODE_DIR/scripts
python convert_tfrecord_to_lmdb.py --dataset=imagenet-oord_32 --tfr_path=$DATA_DIR/imagenet-oord/mnt/host/imagenet-oord-tfr --lmdb_path=$DATA_DIR/imagenet-oord/imagenet-oord-lmdb_32 --split=train
python convert_tfrecord_to_lmdb.py --dataset=imagenet-oord_32 --tfr_path=$DATA_DIR/imagenet-oord/mnt/host/imagenet-oord-tfr --lmdb_path=$DATA_DIR/imagenet-oord/imagenet-oord-lmdb_32 --split=validation
CelebA HQ 256

运行以下命令从 GLOW 下载 tfrecord 文件,并将其转换为 LMDB 数据集:

mkdir -p $DATA_DIR/celeba
cd $DATA_DIR/celeba
wget https://storage.googleapis.com/glow-demo/data/celeba-tfr.tar
tar -xvf celeba-tfr.tar
cd $CODE_DIR/scripts
python convert_tfrecord_to_lmdb.py --dataset=celeba --tfr_path=$DATA_DIR/celeba/celeba-tfr --lmdb_path=$DATA_DIR/celeba/celeba-lmdb --split=train
python convert_tfrecord_to_lmdb.py --dataset=celeba --tfr_path=$DATA_DIR/celeba/celeba-tfr --lmdb_path=$DATA_DIR/celeba/celeba-lmdb --split=validation
FFHQ 256

访问 此 Google Drive 链接 并下载 images1024x1024.zip。运行以下命令解压图像并将它们存储为 LMDB 数据集:

mkdir -p $DATA_DIR/ffhq
unzip images1024x1024.zip -d $DATA_DIR/ffhq/
cd $CODE_DIR/scripts
python create_ffhq_lmdb.py --ffhq_img_path=$DATA_DIR/ffhq/images1024x1024/ --ffhq_lmdb_path=$DATA_DIR/ffhq/ffhq-lmdb --split=train
python create_ffhq_lmdb.py --ffhq_img_path=$DATA_DIR/ffhq/images1024x1024/ --ffhq_lmdb_path=$DATA_DIR/ffhq/ffhq-lmdb --split=validation
LSUN

我们在后续工作中使用了 LSUN 数据集。请访问 LSUN 获取下载该数据集的说明。由于 LSUN 场景数据集以 LMDB 格式提供,因此可以直接使用 torchvision 的数据加载器进行加载。

运行 NVAE 主训练和评估脚本

我们在每个数据集上使用以下命令来训练 NVAE,以用于 论文 中的表 1。除 MNIST 外,其他所有数据集均启用了归一化流。更多训练细节请参阅论文中的表 6。请注意,对于多节点训练(超过 8 张 GPU 的实验),我们使用 mpirun 命令在多个节点上运行训练脚本。请根据您的设置调整以下命令。其中,IP_ADDR 是将承载 rank 0 进程的机器的 IP 地址(详见 此处)。NODE_RANK 是当前节点在整个作业中所处的序号。

MNIST

使用两块 16GB 的 V100 GPU 对动态二值化的 MNIST 进行训练。训练大约需要 21 小时。

export EXPR_ID=UNIQUE_EXPR_ID
export DATA_DIR=PATH_TO_DATA_DIR
export CHECKPOINT_DIR=PATH_TO_CHECKPOINT_DIR
export CODE_DIR=PATH_TO_CODE_DIR
cd $CODE_DIR
python train.py --data $DATA_DIR/mnist --root $CHECKPOINT_DIR --save $EXPR_ID --dataset mnist --batch_size 200 \
        --epochs 400 --num_latent_scales 2 --num_groups_per_scale 10 --num_postprocess_cells 3 --num_preprocess_cells 3 \
        --num_cell_per_cond_enc 2 --num_cell_per_cond_dec 2 --num_latent_per_group 20 --num_preprocess_blocks 2 \
        --num_postprocess_blocks 2 --weight_decay_norm 1e-2 --num_channels_enc 32 --num_channels_dec 32 --num_nf 0 \
        --ada_groups --num_process_per_node 2 --use_se --res_dist --fast_adamax 
CIFAR-10

使用八块 16GB 的 V100 GPU 对 CIFAR-10 进行训练。训练大约需要 55 小时。

export EXPR_ID=唯一表达式ID
export DATA_DIR=数据目录路径
export CHECKPOINT_DIR=检查点目录路径
export CODE_DIR=代码目录路径
cd $CODE_DIR
python train.py --data $DATA_DIR/cifar10 --root $CHECKPOINT_DIR --save $EXPR_ID --dataset cifar10 \
        --num_channels_enc 128 --num_channels_dec 128 --epochs 400 --num_postprocess_cells 2 --num_preprocess_cells 2 \
        --num_latent_scales 1 --num_latent_per_group 20 --num_cell_per_cond_enc 2 --num_cell_per_cond_dec 2 \
        --num_preprocess_blocks 1 --num_postprocess_blocks 1 --num_groups_per_scale 30 --batch_size 32 \
        --weight_decay_norm 1e-2 --num_nf 1 --num_process_per_node 8 --use_se --res_dist --fast_adamax 
CelebA 64

训练 NVAE 在 CelebA 64 数据集上时,使用了八块 16GB 显存的 V100 GPU。训练大约需要 92 小时。

export EXPR_ID=唯一表达式ID
export DATA_DIR=数据目录路径
export CHECKPOINT_DIR=检查点目录路径
export CODE_DIR=代码目录路径
cd $CODE_DIR
python train.py --data $DATA_DIR/celeba64_lmdb --root $CHECKPOINT_DIR --save $EXPR_ID --dataset celeba_64 \
        --num_channels_enc 64 --num_channels_dec 64 --epochs 90 --num_postprocess_cells 2 --num_preprocess_cells 2 \
        --num_latent_scales 3 --num_latent_per_group 20 --num_cell_per_cond_enc 2 --num_cell_per_cond_dec 2 \
        --num_preprocess_blocks 1 --num_postprocess_blocks 1 --weight_decay_norm 1e-1 --num_groups_per_scale 20 \
        --batch_size 16 --num_nf 1 --ada_groups --num_process_per_node 8 --use_se --res_dist --fast_adamax
ImageNet 32x32

在 ImageNet 32x32 数据集上训练 NVAE 时,使用了 24 块 16GB 显存的 V100 GPU。训练大约需要 70 小时。

export EXPR_ID=唯一表达式ID
export DATA_DIR=数据目录路径
export CHECKPOINT_DIR=检查点目录路径
export CODE_DIR=代码目录路径
export IP_ADDR=IP地址
export NODE_RANK=节点排名(0 到 2 之间)
cd $CODE_DIR
mpirun --allow-run-as-root -np 3 -npernode 1 bash -c \
        'python train.py --data $DATA_DIR/imagenet-oord/imagenet-oord-lmdb_32 --root $CHECKPOINT_DIR --save $EXPR_ID --dataset imagenet_32 \
        --num_channels_enc 192 --num_channels_dec 192 --epochs 45 --num_postprocess_cells 2 --num_preprocess_cells 2 \
        --num_latent_scales 1 --num_latent_per_group 20 --num_cell_per_cond_enc 2 --num_cell_per_cond_dec 2 \
        --num_preprocess_blocks 1 --num_postprocess_blocks 1 --num_groups_per_scale 28 \
        --batch_size 24 --num_nf 1 --warmup_epochs 1 \
        --weight_decay_norm 1e-2 --weight_decay_norm_anneal --weight_decay_norm_init 1e0 \
        --num_process_per_node 8 --use_se --res_dist \
        --fast_adamax --node_rank $NODE_RANK --num_proc_node 3 --master_address $IP_ADDR '
CelebA HQ 256

在 CelebA HQ 256 数据集上训练 NVAE 时,使用了 24 块 32GB 显存的 V100 GPU。训练大约需要 94 小时。

export EXPR_ID=唯一表达式ID
export DATA_DIR=数据目录路径
export CHECKPOINT_DIR=检查点目录路径
export CODE_DIR=代码目录路径
export IP_ADDR=IP地址
export NODE_RANK=节点排名(0 到 2 之间)
cd $CODE_DIR
mpirun --allow-run-as-root -np 3 -npernode 1 bash -c \
        'python train.py --data $DATA_DIR/celeba/celeba-lmdb --root $CHECKPOINT_DIR --save $EXPR_ID --dataset celeba_256 \
        --num_channels_enc 30 --num_channels_dec 30 --epochs 300 --num_postprocess_cells 2 --num_preprocess_cells 2 \
        --num_latent_scales 5 --num_latent_per_group 20 --num_cell_per_cond_enc 2 --num_cell_per_cond_dec 2 \
        --num_preprocess_blocks 1 --num_postprocess_blocks 1 --weight_decay_norm 1e-2 --num_groups_per_scale 16 \
        --batch_size 4 --num_nf 2 --ada_groups --min_groups_per_scale 4 \
        --weight_decay_norm_anneal --weight_decay_norm_init 1. --num_process_per_node 8 --use_se --res_dist \
        --fast_adamax --num_x_bits 5 --node_rank $NODE_RANK --num_proc_node 3 --master_address $IP_ADDR '

在我们早期的实验中,一个通道数为 24 而不是 30 的较小模型,仅用 8 块 GPU 就能在相同时间内完成训练(批次大小为 6)。这些较小的模型仅比大模型高出 0.01 bpd 的负对数似然。

FFHQ 256

在 FFHQ 256 数据集上训练 NVAE 时,使用了 24 块 32GB 显存的 V100 GPU。训练大约需要 160 小时。

export EXPR_ID=唯一表达式ID
export DATA_DIR=数据目录路径
export CHECKPOINT_DIR=检查点目录路径
export CODE_DIR=代码目录路径
export IP_ADDR=IP地址
export NODE_RANK=节点排名(0 到 2 之间)
cd $CODE_DIR
mpirun --allow-run-as-root -np 3 -npernode 1 bash -c \
        'python train.py --data $DATA_DIR/ffhq/ffhq-lmdb --root $CHECKPOINT_DIR --save $EXPR_ID --dataset ffhq \
        --num_channels_enc 30 --num_channels_dec 30 --epochs 200 --num_postprocess_cells 2 --num_preprocess_cells 2 \
        --num_latent_scales 5 --num_latent_per_group 20 --num_cell_per_cond_enc 2 --num_cell_per_cond_dec 2 \
        --num_preprocess_blocks 1 --num_postprocess_blocks 1 --weight_decay_norm 1e-1  --num_groups_per_scale 16 \
        --batch_size 4 --num_nf 2  --ada_groups --min_groups_per_scale 4 \
        --weight_decay_norm_anneal --weight_decay_norm_init 1. --num_process_per_node 8 --use_se --res_dist \
        --fast_adamax --num_x_bits 5 --learning_rate 8e-3 --node_rank $NODE_RANK --num_proc_node 3 --master_address $IP_ADDR '

在我们早期的实验中,一个通道数为 24 而不是 30 的较小模型,仅用 8 块 GPU 就能在相同时间内完成训练(批次大小为 6)。这些较小的模型仅比大模型高出 0.01 bpd 的负对数似然。

如果由于任何原因您的训练被中断,请使用完全相同的命令,并添加 --cont_training 参数,以从上次保存的检查点继续训练。如果您遇到 NaN 值,通常使用此标志继续训练并不能解决 NaN 问题。

已知问题

无法构建 CelebA 64 数据集,或在此数据集上训练时一开始就出现 NaN

多位用户报告称,在构建 CelebA 64 数据集时遇到问题,或者在该数据集上训练刚开始就出现 NaN。 如果您在此数据集上遇到类似问题,可以手动下载该数据集,并按照此 issue 中的说明构建 LMDB 文件: https://github.com/NVlabs/NVAE/issues/2。

训练几轮后出现 NaN

训练非常深层的层次化变分自编码器的主要挑战之一,就是我们在论文中讨论过的训练不稳定问题。 我们已经验证,上述命令中的设置可以实现稳定的训练。如果您修改了上述设置,并在训练几轮后遇到 NaN, 可以尝试以下技巧来稳定训练:i) 增加谱正则化系数 --weight_decay_norm;ii) 使用指数衰减调整 --weight_decay_norm,通过 --weight_decay_norm_anneal--weight_decay_norm_init 参数实现;iii) 降低学习率。

训练卡住且无 NaN

在极少数情况下,我们观察到训练进行 2–3 天后会卡住。我们认为其根本原因是由某个底层库中的竞态条件引起的。 如果训练因任何原因被中断,请终止当前运行,并使用完全相同的命令,加上 --cont_training 参数, 从上次保存的检查点继续训练。

监控训练进度

在运行上述任一命令时,您可以使用 TensorBoard 监控训练进度:

点击此处
tensorboard --logdir $CHECKPOINT_DIR/eval-$EXPR_ID/

其中,$CHECKPOINT_DIR$EXPR_ID 是与运行主训练脚本时使用的变量相同。

训练后的采样、评估和检查点

评估对数似然

您可以使用以下命令加载已训练好的模型,并在测试数据集上对其进行评估:

cd $CODE_DIR
python evaluate.py --checkpoint $CHECKPOINT_DIR/eval-$EXPR_ID/checkpoint.pt --data $DATA_DIR/mnist --eval_mode=evaluate --num_iw_samples=1000

其中,--num_iw_samples 表示评估时使用的重要性加权样本数量。 $CHECKPOINT_DIR$EXPR_ID 是与运行主训练脚本时使用的变量相同。 请将 --data 设置为训练 NVAE 时所用的参数(我们的示例针对 MNIST)。

采样

您还可以使用以下命令从已训练好的模型生成样本:

cd $CODE_DIR
python evaluate.py --checkpoint $CHECKPOINT_DIR/eval-$EXPR_ID/checkpoint.pt --eval_mode=sample --temp=0.6 --readjust_bn

其中,--temp 设置采样时使用的温度,而 --readjust_bn 则启用论文中描述的 BN 统计重调功能。 如果您移除 --readjust_bn,采样将以 BN 层的评估模式进行(即 BN 层将使用训练过程中提取的运行均值和方差)。

计算 FID 分数

您可以使用 5 万个样本计算 FID 分数。为此,您需要先使用如下命令为训练数据创建均值和协方差统计文件:

cd $CODE_DIR
python scripts/precompute_fid_statistics.py --data $DATA_DIR/cifar10 --dataset cifar10 --fid_dir /tmp/fid-stats/

上述命令将在 CIFAR-10 数据集上计算参考统计信息,并将其存储在 --fid_dir 目录中。 有了参考统计文件后,我们可以运行以下命令来计算 FID 分数:

cd $CODE_DIR
python evaluate.py --checkpoint $CHECKPOINT_DIR/eval-$EXPR_ID/checkpoint.pt --data $DATA_DIR/cifar10 --eval_mode=evaluate_fid --fid_dir /tmp/fid-stats/ --temp=0.6 --readjust_bn

其中,--temp 设置采样时使用的温度,而 --readjust_bn 则启用论文中描述的 BN 统计重调功能。 如果您移除 --readjust_bn,采样将以 BN 层的评估模式进行(即 BN 层将使用训练过程中提取的运行均值和方差)。 以上命令中,$CHECKPOINT_DIR$EXPR_ID 是与运行主训练脚本时使用的变量相同。 请将 --data 设置为训练 NVAE 时所用的参数(我们的示例针对 MNIST)。

检查点

我们在 此 Google Drive 目录 中提供了 MNIST、CIFAR-10、CelebA 64、CelebA HQ 256 和 FFHQ 的检查点。 对于 CIFAR-10 数据集,我们提供了两个检查点,因为我们发现多尺度 NVAE 在该数据集上能产生比单尺度模型更好的定性结果。 尽管多尺度模型在对数似然方面略逊一筹(低 0.01 bpd),但其生成的图像质量更高。 此外,我们还发现,早期在 CelebA HQ 256 数据集上训练的一个模型虽然对数似然低 0.01 bpd,但在较低温度下却能生成更高质量的图像。 您可以使用上述命令来评估或采样这些检查点。

如何构建更小的 NVAE 模型

在上述命令中,我们构建的是大型 NVAE 模型,通常需要数天的训练时间。如果您希望构建更小的 NVAE,可以使用以下技巧:

  • 降低网络宽度:--num_channels_enc--num_channels_dec 分别控制自下而上和自上而下网络中的初始通道数。请记住,在自下而上网络中,每经过一个空间下采样层,通道数就会减半;而在自上而下网络中,每经过一个上采样层,通道数就会加倍。通过减少 --num_channels_enc--num_channels_dec,您可以降低网络的整体宽度。

  • 减少层次结构中的残差单元数量:--num_cell_per_cond_enc--num_cell_per_cond_dec 分别控制自下而上和自上而下网络中每组潜在变量之间的残差单元数量。在我们的大多数实验中,这两类网络每组都使用两个残差单元。您可以将每个组的残差单元数量减少到一个,从而使模型更小。

  • 减少训练轮数:通过减少 --epochs 参数,可以缩短训练时间。

  • 减少组数:通过使用较少的潜在变量组,可以使 NVAE 更小。我们有两种设置组数的方式:

    1. 每个尺度的组数相等:这由 --num_groups_per_scale 参数决定,表示每个潜在变量尺度上的组数。减少该参数值即可得到一个较小的 NVAE。

    2. 自适应组数:通过启用 --ada_groups 参数来实现。在这种情况下,最高分辨率的潜在变量将有 --num_groups_per_scale 组,而较低分辨率的尺度则依次减半(参见 utils.py 中的 groups_per_scale)。我们不会让组数低于 --min_groups_per_scale。当启用 --ada_groups 时,您可以通过同时减少 --num_groups_per_scale--min_groups_per_scale 来降低总组数。

理解实现细节

如果您正在修改代码,可以参考下图,将代码与论文内容对应起来。

在潜在空间中遍历

我们可以通过在 NVAE 的潜在空间中进行遍历来生成图像。此序列是使用我们在 CelebA HQ 数据集上训练的模型生成的,通过对温度为 0.6 的样本进行插值得到。其中出现的一些伪影是由于 GIF 文件的颜色量化造成的。

许可协议

请查看 LICENSE 文件。NVAE 只能用于非商业用途,即仅限于研究或评估目的。如需商业合作,请联系 researchinquiries@nvidia.com

需要注意的是,变分自编码器是被训练来模仿训练数据分布的,因此数据收集过程中引入的任何偏差都会导致生成的样本带有类似的偏差。此外,在模型设计、训练阶段,或者在使用较低温度对模型进行采样时,也可能引入额外的偏差。偏见校正一直是生成式学习领域的研究热点,我们建议有兴趣的读者在使用 NVAE 构建应用之前,先了解这一领域。

BibTeX 引用:

如果您使用了本代码库,请引用我们的论文:

@inproceedings{vahdat2020NVAE,
  title={{NVAE}: A Deep Hierarchical Variational Autoencoder},
  author={Vahdat, Arash and Kautz, Jan},
  booktitle={Neural Information Processing Systems (NeurIPS)},
  year={2020}
}

常见问题

相似工具推荐

stable-diffusion-webui

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

162.1k|★★★☆☆|今天
开发框架图像Agent

ComfyUI

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

107.7k|★★☆☆☆|2天前
开发框架图像Agent

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

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

PaddleOCR

PaddleOCR 是一款基于百度飞桨框架开发的高性能开源光学字符识别工具包。它的核心能力是将图片、PDF 等文档中的文字提取出来,转换成计算机可读取的结构化数据,让机器真正“看懂”图文内容。 面对海量纸质或电子文档,PaddleOCR 解决了人工录入效率低、数字化成本高的问题。尤其在人工智能领域,它扮演着连接图像与大型语言模型(LLM)的桥梁角色,能将视觉信息直接转化为文本输入,助力智能问答、文档分析等应用场景落地。 PaddleOCR 适合开发者、算法研究人员以及有文档自动化需求的普通用户。其技术优势十分明显:不仅支持全球 100 多种语言的识别,还能在 Windows、Linux、macOS 等多个系统上运行,并灵活适配 CPU、GPU、NPU 等各类硬件。作为一个轻量级且社区活跃的开源项目,PaddleOCR 既能满足快速集成的需求,也能支撑前沿的视觉语言研究,是处理文字识别任务的理想选择。

74.9k|★★★☆☆|今天
语言模型图像开发框架

tesseract

Tesseract 是一款历史悠久且备受推崇的开源光学字符识别(OCR)引擎,最初由惠普实验室开发,后由 Google 维护,目前由全球社区共同贡献。它的核心功能是将图片中的文字转化为可编辑、可搜索的文本数据,有效解决了从扫描件、照片或 PDF 文档中提取文字信息的难题,是数字化归档和信息自动化的重要基础工具。 在技术层面,Tesseract 展现了强大的适应能力。从版本 4 开始,它引入了基于长短期记忆网络(LSTM)的神经网络 OCR 引擎,显著提升了行识别的准确率;同时,为了兼顾旧有需求,它依然支持传统的字符模式识别引擎。Tesseract 原生支持 UTF-8 编码,开箱即用即可识别超过 100 种语言,并兼容 PNG、JPEG、TIFF 等多种常见图像格式。输出方面,它灵活支持纯文本、hOCR、PDF、TSV 等多种格式,方便后续数据处理。 Tesseract 主要面向开发者、研究人员以及需要构建文档处理流程的企业用户。由于它本身是一个命令行工具和库(libtesseract),不包含图形用户界面(GUI),因此最适合具备一定编程能力的技术人员集成到自动化脚本或应用程序中

73.3k|★★☆☆☆|3天前
开发框架图像