尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

InvokeAI 中的 NormalBAE 骨干网络性能基准与推理管线解析

发布时间:2026/9/10 14:01:09

资讯中心
01
ARTICLE

InvokeAI 中的 NormalBAE 骨干网络性能基准与推理管线解析

InvokeAI 中的 NormalBAE 骨干网络性能基准与推理管线解析
InvokeAI 中的 NormalBAE 骨干网络性能基准与推理管线解析【免费下载链接】InvokeAIInvoke is a leading creative engine for Stable Diffusion models, empowering professionals, artists, and enthusiasts to generate and create visual media using the latest AI-driven technologies. The solution offers an industry leading WebUI, and serves as the foundation for multiple commercial products.项目地址: https://gitcode.com/GitHub_Trending/in/InvokeAI导读本文以 InvokeAI 仓库内 NormalBAE 法线估计模型的骨干网络性能基准文档为核心详细解读 EfficientNet 系列、MixNet、MobileNet-V3、MnasNet 在 PyTorch → ONNX → Caffe2 导出链路下的实测性能数据并结合仓库源码剖析该骨干网络在 NormalBAE 法线检测器中的实际加载与推理方式帮助读者理解模型导出—优化—基准测试的完整工程实践。背景NormalBAE 骨干网络与性能基准的定位NormalBAEBilateral Accelerated Features是 InvokeAI 中用于生成法线贴图normal map的深度估计模型。在 normal_bae 目录 中其骨干网络由efficientnet_repo提供——这是 Ross Wightman 的 GenEfficientNet 实现覆盖 EfficientNet、MixNet、MobileNetV3、MnasNet 等高效卷积架构全部由GenEfficientNet或MobileNetV3类实现并通过字符串化架构定义配置块布局。BENCHMARK.md正是这一骨干网络家族的性能基准文档记录了多组模型在固定工具链下的逐算子operator时间、FLOPs、特征内存读写与参数量统计。本文以此文档为核心骨架结合同目录下的导出/转换/基准脚本源码进行深度解读。基准测试的完整工具链从 PyTorch 到 Caffe2 的五步流水线文档开篇给出了所有基准的统一执行方式这是一个PyTorch 模型 → ONNX 图 → 优化图 → Caffe2 模型 → Caffe2 基准的完整链路python onnx_export.py --model mobilenetv3_100 ./mobilenetv3_100.onnx python onnx_optimize.py ./mobilenetv3_100.onnx --output mobilenetv3_100-opt.onnx python onnx_to_caffe.py ./mobilenetv3_100.onnx --c2-prefix mobilenetv3 python onnx_to_caffe.py ./mobilenetv3_100-opt.onnx --c2-prefix mobilenetv3-opt python caffe2_benchmark.py --c2-init ./mobilenetv3.init.pb --c2-predict ./mobilenetv3.predict.pb python caffe2_benchmark.py --c2-init ./mobilenetv3-opt.init.pb --c2-predict ./mobilenetv3-opt.predict.pb各脚本的源码均位于 efficientnet_repo 目录职责如下onnx_export.py——PyTorch 模型导出为 ONNX核心入口调用geffnet.create_model(..., exportableTrue)创建模型并执行一次前向推理以固定 SAME 卷积的 padding 参数然后通过torch.onnx._export导出。关键参数包括--opset默认 10、--batch-size默认 1、--img-size默认 224、--keep-init与--aten-fallbackPyTorch 1.6/ONNX 1.7 下导出 Caffe2 兼容模型必需、--dynamic-size动态宽高对带 SAME padding 的 tf 前缀模型不推荐。导出完成后会调用onnx.checker.check_model校验若同时开启--keep-init与--aten-fallback还会加载到 Caffe2 后端做前向一致性比对np.testing.assert_almost_equal精度 5 位小数。onnx_optimize.py——ONNX 图优化通过onnx.optimizer.optimize应用一组 pass 列表包括eliminate_identity、eliminate_nop_transpose、fuse_bn_into_conv、fuse_add_bias_into_conv、fuse_consecutive_transposes、fuse_pad_into_conv等目的是剪除冗余节点、将 BN 融合进卷积等。脚本会打印优化前后节点数对比。需注意脚本注释中的警告该优化器在 PyTorch 1.6/ONNX 1.7 组合下并不稳定建议改用 onnxruntime 的在线优化。onnx_to_caffe.py——ONNX 转 Caffe2通过Caffe2Backend.onnx_graph_to_caffe2_net将 ONNX 模型转换为 init 与 predict 两个 pb 文件--c2-prefix指定前缀分别生成prefix.init.pb与prefix.predict.pb。caffe2_benchmark.py——Caffe2 基准测试加载 init/predict pb用GaussianFill生成随机输入通过workspace.BenchmarkNet(net, 5, 20, True)执行 5 次 warmup 20 次迭代基准输出每次迭代毫秒数、每秒迭代数以及按算子类型统计的时间、FLOPs、特征内存读写、参数量。该流水线正是 BENCHMARK.md 中所有数据来源理解它能帮助读者正确解读下述每一个数字。性能数据总览七个模型、两档优化状态基准文档覆盖了 7 个骨干架构其中部分同时给出未优化Unoptimized与优化Optimized两档数据模型状态每迭代耗时 (ms)每秒迭代数总 FLOPs参数量 (MB)EfficientNet-B0Unoptimized49.286220.28970.807256 GFLOP21.1168EfficientNet-B0Optimized46.083821.69960.780305 GFLOP20.9488EfficientNet-B1Optimized71.810213.92561.38816 GFLOP30.8719EfficientNet-B2Optimized92.2810.83662.00568 GFLOP36.1081MixNet-MOptimized63.112215.84480.70648 GFLOP19.9579TF MobileNet-V3 Large 1.0Optimized22.049545.35250.438743 GFLOP21.8091MobileNet-V3 (RW)Unoptimized24.831640.27120.456141 GFLOP21.8994MobileNet-V3 (RW)Optimized22.098145.25270.438542 GFLOP21.8018MnasNet-A1Unoptimized30.089233.23450.648867 GFLOP15.5312MnasNet-A1Optimized24.236741.25970.623979 GFLOP15.3972MnasNet-B1Unoptimized28.310935.3220.650951 GFLOP17.5332MnasNet-B1Optimized26.636437.54260.629124 GFLOP17.3816几点值得注意的工程结论优化收益随模型结构差异显著EfficientNet-B0 优化后单迭代耗时仅下降约 6.5%49.29 → 46.08 ms而 MnasNet-A1 优化后提速约 19.4%30.09 → 24.24 ms、MnasNet-B1 提速约 5.9%、MobileNet-V3 (RW) 提速约 11%。优化主要通过 BN 融合进卷积、裁剪冗余节点实现因此对含大量 SpatialBN 的模型收益更大。Conv 始终是绝对性能瓶颈全部模型的卷积算子Conv在时间占比中均超过 60%最高达 94%MnasNet-B1 OptimizedFLOPs 占比普遍在 95% 以上。Sigmoid 在 EfficientNet/MixNet 中占比可观如 EfficientNet-B0 未优化版占 24.78% 时间这与 EfficientNet 的 SE 模块Squeeze-and-Excitation设计直接相关。优化同时降低 FLOPs 与内存带宽以 EfficientNet-B0 为例优化后总 FLOPs 从 0.807256 降至 0.780305 GFLOP特征内存读总量从 135.824 MB 降至 108.621 MB写总量从 88.6412 降至 61.6904 MB——BN 融合消解了大量中间张量的读写。MobileNet-V3 Large 是延迟最优选无论 RW 版本还是 TF 版本优化后单迭代耗时都在约 22 ms 量级、吞吐约 45 iters/s明显快于同参数规模的 EfficientNet-B1/B2。算子级剖析以 EfficientNet-B0 为例文档以 EfficientNet-B0 的完整算子统计为例未优化版本数据如下时间分布Total 49.1416 msConv 29.7378 ms60.51%、Sigmoid 12.1785 ms24.78%、SpatialBN 3.62811 ms7.38%、Mul 2.98444 ms6.07%、AveragePool 0.326902 ms、FC 0.197317 ms、Add 0.0852877 ms、Squeeze 0.0032607 ms。FLOPs 分布Total 0.807256 GFLOPConv 0.76907 GFLOP95.27%、SpatialBN 0.0269508 GFLOP3.34%、Mul 0.00846444 GFLOP、FC 0.002561 GFLOP、Add 0.000210112 GFLOP。特征内存读取Total 135.824 MBMul 58.5253 MB43.09%、Conv 43.2015 MB31.81%、SpatialBN 27.2869 MB20.09%、FC 5.12912 MB、Add 1.6809 MB。特征内存写入Total 88.6412 MBMul 33.8578 MB38.20%、Conv 26.9881 MB30.45%、SpatialBN 26.9508 MB30.40%、Add 0.840448 MB、FC 0.004 MB。参数量Total 21.1168 MBConv 15.8248 MB74.94%、FC 5.124 MB24.27%、SpatialBN 0.168064 MB。优化后Total 45.8078 ms最显著的变化是SpatialBN 算子完全消失其计算与参数被融合进 ConvMul 变为第二耗时算子3.15073 ms6.88%Sigmoid 耗时占比升至 26.81%特征内存读写总量分别降至 108.621 MB 与 61.6904 MB。这说明onnx_optimize.py中的fuse_bn_into_convpass 在基准中确实生效。从架构角度Sigmoid 的高耗时与高内存占比来源于 EfficientNet 的 SESqueeze-and-Excitation注意力模块——每个 MBConv 块内都包含Squeeze全局池化→FC→Sigmoid→Mul通道加权这一序列这也是文档中该组算子反复出现的根本原因。多模型对比EfficientNet 家族与混合卷积架构EfficientNet-B1OptimizedTotal 69.0456 ms13.9256 iters/s。Conv 45.7915 ms66.32%、Sigmoid 17.8718 ms25.88%、Mul 4.44132 ms6.43%。总 FLOPs 1.38816 GFLOP参数量 30.8719 MB。EfficientNet-B2OptimizedTotal 90.942 ms10.8366 iters/s。Conv 61.4627 ms67.58%、Sigmoid 22.7458 ms25.01%。总 FLOPs 2.00568 GFLOP参数量 36.1081 MB。相较 B0B2 每迭代耗时约翻倍符合其 FLOPs 增长幅度。MixNet-MOptimizedTotal 63.9768 ms15.8448 iters/s。架构特色体现在算子分布上Conv 48.1139 ms75.21%之外还出现 Split 1.38707 ms2.17%与 Concat 1.29322 ms2.02%、Relu 1.00093 ms1.56%——这正是 MixConv混合卷积拆分为不同核大小子卷积再拼接的结构特征。其参数量 19.9579 MB 是全部基准中最低档之一。移动端轻量架构MobileNet-V3 与 MnasNetTF MobileNet-V3 Large 1.0OptimizedTotal 21.7939 ms45.3525 iters/s全表最高吞吐。Conv 17.437 ms80.01%其余算子分散且占比极小Add 5.86%、Div 5.17%、Mul 3.22%、Relu 2.58%、Clip 1.98%总 FLOPs 仅 0.438743 GFLOP参数量 21.8091 MB。注意该版本权重来自 TensorFlow 移植按 README 说明应采用 Inception 风格的 mean/std0.5, 0.5, 0.5预处理。MobileNet-V3 (RW)RW 指 Ross Wightman 自训练版本。未优化 Total 22.9946 ms40.2712 iters/s优化后 21.7323 ms45.2527 iters/s。未优化版含 SpatialBN2.36551 ms10.29%优化后 SpatialBN 消失、Conv 占比升至 78.90%。特征内存读写从 95.3317/65.9447 MB 降至 77.5861/48.3455 MB。MnasNet-A1未优化 Total 30.9337 ms优化后 24.1994 ms41.2597 iters/s提速幅度约 22%。优化后 Conv 占比高达 91.14%SpatialBN 被完全融合特征内存读总量从 92.5406 降至 67.4524 MB。参数量 15.3972 MB为全表最轻。MnasNet-B1未优化 Total 34.9451 ms优化后 26.5566 ms37.5426 iters/s。优化后 Conv 时间占比达 94.10%FLOPs 占比 99.55%特征内存读写降至 61.1658/42.1895 MB。B1 与 A1 的核心差异在于 A1 带 Squeeze-Excite 模块因此保留 Sigmoid、Squeeze 算子B1 则没有 SE。从基准到实战该骨干网络在 InvokeAI 中的真实角色需要强调的是BENCHMARK.md 所测模型是 NormalBAE 骨干网络家族的通用性能画像而 InvokeAI 实际采用的具体骨干在 encoder.py 中有明确实现tf_efficientnet_b5_apEfficientNet-B5 AdvPropTensorFlow 移植权重通过torch.hub.load(repo_path, tf_efficientnet_b5_ap, pretrainedFalse, sourcelocal)从本仓库的efficientnet_repo本地加载随后将global_pool与classifier替换为nn.Identity()以移除分类头仅保留特征提取能力。按 README 的说明AdvProp 系列权重使用 Inception 风格的 mean/std0.5, 0.5, 0.5预处理——这一约定与 normal_bae 包 中实际使用的 ImageNet 标准化mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]存在差异从源码结构看说明推理时采用的标准预处理在加载权重后由调用方自行归一化该包先将图像除以 255 再做标准化而并非直接套用 AdvProp 的原始预处理约定。NormalBAE 的完整结构在 NNET.py 中NNET由Encoder上述 EfficientNet-B5 骨干逐层输出多尺度特征列表与Decoder组成前向过程为decoder(encoder(img))。InvokeAI 通过 NormalMapDetector 封装其推理权重文件为scannet.pt来自lllyasviel/Annotators仓库输入图像先被缩放到 8 的倍数、归一化后送入模型取解码器输出最后一层的前 3 个通道经((normal 1) * 0.5).clip(0, 1)映射到 0–1 范围并缩回原始分辨率最终输出法线贴图。该检测器被 controlnet_processor.py 引用用于 ControlNet 流程中的法线图条件输入。由此可以推断基准文档的工程价值虽然 NormalBAE 部署时选用的是 B5-AdvProp 骨干偏向精度但 BENCHMARK.md 展示的同一工具链可用于评估轻量骨干如 MobileNet-V3、MnasNet的替换成本——当需要在低算力设备上运行法线检测时可依据本文表格中的延迟、FLOPs 与内存数据选择替换骨干并用同一套 onnx 导出/转换/基准脚本完成量化验证。使用与复现建议若要在本仓库环境中复现基准需注意以下前提与限制依赖版本efficientnet_repo的 README 声明其开发测试环境为 Linux x86-64 Conda Python 3.6–3.8PyTorch 1.4–1.6 已测试onnx_export.py默认参数针对 PyTorch 1.6 ONNX 1.7并明确提示PyTorch/ONNX 新版本频繁导致导出破坏复现时应固定版本组合。Caffe2 兼容导出新版 PyTorch/ONNX 下必须在onnx_export.py同时传入--keep-init与--aten-fallback否则 Caffe2 后端无法正确加载。优化脚本的稳定性onnx_optimize.py自述在 PyTorch 1.6/ONNX 1.7 下可能触发duplicate definition of name错误此时可改用 onnxruntime 的在线优化onnx_validate.py脚本提供了--onnx-output-opt路径。测试命令参考仓库的 tests 目录 下针对各后端模块有大量测试可结合pytest运行相关用例验证环境正确性法线检测的端到端行为可通过NormalMapDetector的run方法直接验证。小结BENCHMARK.md 以可复现的五步工具链导出 → 优化 → 转 Caffe2 → 基准给出了 7 个高效骨干架构的算子级性能画像Conv 是绝对瓶颈时间占比 60%–94%、FLOPs 占比 95%EfficientNet/MixNet 的 SE 模块使 Sigmoid/Mul 成为第二梯队耗时点BN 融合优化能显著降低内存带宽与总 FLOPs。这些数据既是对 NormalBAE 骨干家族能力的量化记录也为后续在 InvokeAI 中按算力选型或替换骨干网络提供了可直接套用的方法论。【免费下载链接】InvokeAIInvoke is a leading creative engine for Stable Diffusion models, empowering professionals, artists, and enthusiasts to generate and create visual media using the latest AI-driven technologies. The solution offers an industry leading WebUI, and serves as the foundation for multiple commercial products.项目地址: https://gitcode.com/GitHub_Trending/in/InvokeAI创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。