SANA 推理时间扩展实战:基于 NVILA-Verifier(VISA)的候选图像筛选与 GenEval 性能跃升

发布时间:2026/9/16 11:08:21
SANA 推理时间扩展实战:基于 NVILA-Verifier(VISA)的候选图像筛选与 GenEval 性能跃升 SANA 推理时间扩展实战基于 NVILA-VerifierVISA的候选图像筛选与 GenEval 性能跃升【免费下载链接】SanaSANA: Efficient High-Resolution Image Synthesis with Linear Diffusion Transformer项目地址: https://gitcode.com/GitHub_Trending/sana/Sana导读本文围绕 SANA 仓库中的推理时间扩展Inference Time Scaling方案展开讲解如何借助专门训练的 NVILA-2B 视觉语言模型作为图像打分器命名为 VISA即 VIla as SAna verifier在文本到图像生成阶段先生成大量候选图、再择优挑选从而显著提升 GenEval 组合生成能力。通过完整复现批量生成 → 模型挑选 → 指标评测三步流水线读者可以掌握从零构建一套以推理计算换取生成质量的高效评测方案并理解底层源码的实现细节。一、方案背景用推理计算换取生成质量扩散模型的生成质量通常受限于单次采样的随机性即使给定相同的提示词不同随机种子得到的图像质量也参差不齐。SANA-1.5 的推理时间扩展思路非常直接——多生成、再择优为每个提示词生成 N 张候选图然后用一个自动化的图像-文本对齐打分器挑选其中最好的 K 张参与最终评测。为此项目训练了一个专门的验证模型VISAVIla as SAna verifier其主体为 NVILA-Lite-2B-Verifier仓库中通过Efficient-Large-Model/NVILA-Lite-2B-Verifier引用。该验证器接收提示词与图像输出 yes/no 判断并给出置信度分数用于在候选图中两两比较、逐轮淘汰。二、效果数据GenEval 分数的显著提升原文档给出的核心结论如下从2048 张候选图中挑选 Top-4SD1.5 与 SANA-1.5-4.8B v2 的 GenEval 分数分别从42 → 87、81 → 96即使在候选数量较少的场景如32 张SANA-1.5-4.8B v2 的 GenEval 仍可突破90%。缩放曲线展示了 SANA-0.6B / 1.6B / 4.8B-v1 / 4.8B-v2 四个模型在候选样本数从 4 增至 2048 时 GenEval Score 的变化趋势样本数越多、模型规模越大分数越高且 SANA-4.8B-v2 全程领先。results.jpg 为 Table 2 | Detailed GenEval evaluation benchmark 对比表按 Overall / Single / Two / Counting / Colors / Position / Color Attribution 等子项列出了各方法得分展示了 SANA-1.5 Inference Scaling 在 2048 样本下与开源及商业方法的对比情况。三、环境要求在开始前需要安装以下依赖inference_scaling.md 中明确说明# other transformers version may also work, but we have not tested pip install transformers4.46 pip install githttps://github.com/bfshi/scaling_on_scales.git注意transformers固定为 4.46 版本其他版本可能可用但未经测试并需要安装scaling_on_scales库以支持 NVIDIA 的缩放推理支持。此外最终评测环节还需要 GenEval 的专用 conda 环境见下文第四步。四、三步流水线完整实战整个推理时间扩展流程分为三步生成 N 张候选图 → 用 NVILA-Verifier 挑选 → 计算 GenEval 指标。第 1 步为每个提示词生成 N 张图像首先下载 SANA 模型权重然后调用仓库中的 GenEval 批量推理脚本# download the checkpoint for the following generation huggingface-cli download Efficient-Large-Model/Sana_600M_512px --repo-type model --local-dir output/Sana_600M_512px --local-dir-use-symlinks False # 32 is a relatively small number for test but can already push the geneval90% when we verify the SANA-1.5-4.8B v2 model. Set it to larger number like 2048 for the limit of sky. n_samples32 pick_number4 output_diroutput/geneval_generated_path # example bash scripts/infer_run_inference_geneval.sh \ configs/sana_config/512ms/Sana_600M_img512.yaml \ output/Sana_600M_512px/checkpoints/Sana_600M_512px_MultiLing.pth \ --img_nums_per_sample$n_samples \ --output_dir$output_dir关键参数解读n_samples32每个提示词生成的候选图数量。文档注释指出 32 个即可将 SANA-1.5-4.8B v2 的 GenEval 推过 90%若追求极限可设 2048pick_number4最终保留的最佳图像数量即从 N 张中选 K 张配置文件选用 configs/sana_config/512ms/Sana_600M_img512.yaml该配置定义了 600M 参数模型在 512px 分辨率下的完整推理设置模型SanaMS_600M_P1_D28、VAE 采用AutoencoderDCmit-han-lab/dc-ae-f32c32-sana-1.1-diffusers下采样率 32、文本编码器为gemma-2-2b-itmodel_max_length: 300并启用了 CHI 提示词增强采样器为flow_dpm-solver、flow_shift: 3.0。从底层实现看scripts/infer_run_inference_geneval.sh 会按 GPU 数量把 553 个 GenEval 提示词平均切分到多张卡上并行推理每条命令最终调用 scripts/inference_geneval.pycmd_templateDPM_TQDMTrue python scripts/inference_geneval.py --config{config_file} --model_path{model_path} \ --sampling_algo $sampling_algo --step $step --cfg_scale $cfg_scale --sample_nums $sample_nums --n_samples $img_nums_per_sample \ --batch_size $batch_size --gpu_id {gpu_id} --start_index {start_index} --end_index {end_index}推理脚本默认参数step20、sampling_algoflow_dpm-solver、cfg_scale4.5、sample_nums553。生成结果按{output_dir}/{index:05d}/samples/{sample_count:05}.png的目录结构落盘并在每个提示词目录下写入metadata.jsonl包含 prompt 与 include 标签该目录结构是后续 NVILA 挑选脚本的输入约定。第 2 步使用 NVILA-Verifier 从生成图中挑选bash tools/inference_scaling/nvila_sana_pick.sh \ $output_dir \ $n_samples \ $pick_number该脚本会依据本机 GPU 数量把 552 个提示词索引均匀切分并为每张 GPU 启动一个挑选进程tools/inference_scaling/nvila_sana_pick.shnum_gpu$(nvidia-smi -L | wc -l) for idx in $(seq 0 $((num_gpu - 1))); do start_idx$((idx * (552 / num_gpu))) end_idx$((start_idx 552 / num_gpu)) ... CUDA_VISIBLE_DEVICES$idx python tools/inference_scaling/nvila_sana_pick.py \ --start_idx $start_idx --end_idx $end_idx \ --base_dir $sana_dir --number_of_files $number_of_files --pick_number $pick_number done wait其底层算法tools/inference_scaling/nvila_sana_pick.py值得展开说明这是整个方案的核心原理加载验证模型AutoModel.from_pretrained(Efficient-Large-Model/NVILA-Lite-2B-Verifier, trust_remote_codeTrue, device_mapauto)并预取yes/no两个 token 的 logit id 用于分数比较两两比较淘汰赛制对每个提示词将其与两张候选图构造 promptYou are an AI assistant specializing in image analysis and ranking. Your task is to analyze and compare image based on how well they match the given prompt... Please consider the prompt and the image to make a decision and response directly with yes or no.分别对两张图做判断平局裁决若两张图都判 yes取yestoken 分数更高者都判 no 则取notoken 分数更低者一票 yes 一票 no 时直接选 yes 方逐轮淘汰每轮把候选两两配对、每对保留胜者直到剩余数量等于pick_number即while len(files) pick_number每轮数量减半这正是 N 与 K 必须为 2 的幂次的原因结果落盘将最终选中的 K 张图复制到{output_dir}/best_{pick_number}_of_{number_of_files}/{base_dir}/{idx:05d}/samples/并复制对应的metadata.jsonl若目标目录已存在 4 张图则自动跳过该提示词支持断点续跑。代码中还内置了参数合法性校验若pick_number或number_of_files不是 2 的幂会自动向下取整并打印 warning。第 3 步计算 GenEval 指标最终评测需要 GenEval 专用环境其安装指南见 tools/metrics/geneval/geneval_env.md创建genevalconda 环境Python 3.8.10、安装 PyTorch 2.1.2、open-clip-torch、mmcv-full、mmdetection 2.x 等依赖并运行download_models.sh下载 Mask2Former 评测权重。# activate geneval env conda activate geneval DIR_AFTER_PICKoutput/nvila_pick/best_${pick_number}_of_${n_samples}/${output_dir} bash tools/metrics/compute_geneval.sh $(dirname $DIR_AFTER_PICK) $(basename $DIR_AFTER_PICK)tools/metrics/compute_geneval.sh 会调用 tools/metrics/geneval/evaluation/evaluate_images.py 对挑选后的图像目录逐项计算 GenEval 各子指标Single / Two / Counting / Colors / Position / Color Attribution / Overall并将结果输出到{img_path}/{exp_name}_geneval_result.txt同时可上报 wandb默认report_towandblog_genevaltrue。脚本末尾会把 PATH 从 geneval 环境切回sana环境保证仓库主环境不受影响。五、关键源码导读与参数速查阶段脚本作用与要点批量生成scripts/infer_run_inference_geneval.sh scripts/inference_geneval.py多 GPU 并行生成--img_nums_per_sample控制每提示词候选数--output_dir控制落盘位置验证挑选tools/inference_scaling/nvila_sana_pick.sh tools/inference_scaling/nvila_sana_pick.py多 GPU 并行两两淘汰number_of_files与pick_number须为 2 的幂指标评测tools/metrics/compute_geneval.sh在 geneval 环境下计算 GenEval 各项分数并输出 txt / wandbnvila_sana_pick.py的主要命令行参数由 fire 自动生成 CLI--start_idx/--end_idx处理的提示词索引区间由 shell 脚本按 GPU 切分--base_dir第 1 步生成的图像根目录--model_name验证模型名默认Efficient-Large-Model/NVILA-Lite-2B-Verifier--number_of_files每个提示词的候选数即第 1 步的n_samples--output_dir挑选结果根目录默认output/nvila_pick--pick_number最终保留数默认 4。六、实操建议与注意事项候选数的取舍从缩放曲线看候选数从 32 提升到 128 后收益趋于平缓而推理成本线性增长。测试阶段建议用 32 快速验证流程正式实验再扩展到 20482 的幂约束挑选脚本的淘汰赛机制要求候选数与保留数均为 2 的幂传入其他数值会被自动向下取整并打印 warning可断点续跑若某提示词的结果目录已存在 4 张候选图挑选脚本会自动跳过便于中断后恢复环境隔离生成与挑选在 SANA 主环境运行评测必须在独立的genevalconda 环境运行且transformers需固定为 4.46目录约定整个流水线强依赖{index:05d}/samples/与metadata.jsonl的目录结构使用自定义输出目录时需保持该结构否则挑选脚本无法读取 prompt 与图片。七、小结推理时间扩展为 SANA-1.5 提供了一条以算力换质量的实用路径借助 VISANVILA-2B-Verifier作为自动化图像对齐裁判通过批量采样与两两淘汰挑选出与提示词最匹配的图像可在不改变模型参数的前提下把 GenEval 分数推向 90% 以上。本文给出的三步流水线生成 → 挑选 → 评测已在仓库中完整实现并可直接复现适合作为文本到图像模型对齐能力评测与迭代优化的标准范式。【免费下载链接】SanaSANA: Efficient High-Resolution Image Synthesis with Linear Diffusion Transformer项目地址: https://gitcode.com/GitHub_Trending/sana/Sana创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考