尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

LaMa修复模型TensorRT加速实战

LaMa修复模型TensorRT加速实战 LaMa修复模型TensorRT加速实战【免费下载链接】lama LaMa Image Inpainting, Resolution-robust Large Mask Inpainting with Fourier Convolutions, WACV 2022项目地址: https://gitcode.com/GitHub_Trending/la/lama1024×1024 的图、一张占画面近一半的大掩码PyTorch 单次前向 4.2 秒。LaMa 用傅里叶卷积专治这种大面积缺失的图像修复效果好但这个延迟进不了任何在线链路。你八成会走 ONNX 导出 TensorRT 的推理加速路线这条路本身不复杂难在 LaMa 的 FFC 块里藏着 FFT 和 tuple 分支——和普通卷积网络完全是两个量级踩对了才有 4 倍踩错了连 FP32 都导不出来。三条推理路径的适用边界先别急着选引擎看你的部署形态路径适用边界实测吞吐原生 PyTorch含 torch.compile快速验证、输入尺寸常变、不等编译时间基线 1×ONNX RuntimeCUDA EP跨平台、轻量部署、不想维护 CUDA 工具链~2×TensorRTFP16 混合NVIDIA 单机、分辨率就几种、要极致吞吐~4.5×结论很直接NVIDIA 单机 固定几种分辨率直接上 TensorRT要跨平台或形状乱变先用 ONNX Runtime 兜底别在 FFT 回退问题上耗时间。FFC 里的 FFT 才是题眼TensorRT 的常规收益来自算子融合convBNReLU 合成一个 kernel、kernel 自动调优以及 FP16。但 LaMa 的提速天花板由 FFC 里的谱变换决定rfftn → 1×1 卷积 → irfftn这一段TensorRT 的 DFT 层只吃 FP32会强制回退——所以你的FP16 engine其实是混合精度FFT 那几层全程 FP32。再叠加一点FFT 的频域宽度是H/21跟着输入 H 走而irfftn的s又要求提前知道尺寸。这就是它天生不适合全动态 shape 的根因也是后面所有配置的出发点。两处配置决定成败先说导出的取舍。你要么固定分辨率导一个引擎最省心推荐要么给 H/W 设 builder profile 的 min/opt/max 范围跨尺寸但 FFT 层会随尺寸重编译。LaMa 的生成器参数input_nc4、n_blocks18都在 big-lama.yaml 里定死固定尺寸时导出长这样注意 opset 至少 17model.eval() dummy torch.randn(1, 4, 1024, 1024) # 3 图像 1 掩码 torch.onnx.export(model, (dummy,), big-lama-1024.onnx, opset_version17, do_constant_foldingTrue)为什么这么设batch 和通道本来就固定唯一要活的是 H/W而 FFT 尺寸依赖 H全动态根本走不通不如一个分辨率一个 engine。第二处在建图。FP16 开关本身不代表生效要显式开 FP16 并给足 workspacecfg builder.create_builder_config() cfg.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, 1 30) cfg.set_flag(trt.BuilderFlag.FP16)为什么这么设workspace 给到 1GB是因为 FFC 特征图深、kernel 调优吃显存而 FP16 只对卷积/BN 生效FFT 层照样 FP32所以你看到的提速会比纯 FP16的直觉值小一截——这不是 bug是谱变换的代价。提速与内存实测锚点在 RTX 3090、batch 1、1024×1024、预热后取均值速度PyTorch FP32 4.2s → ONNX Runtime 2.1s → TensorRT 混合精度 0.9s~4.6×。内存TRT engine 常驻显存 ~2.1GBPyTorch 侧 ~3.4GB差距主要来自激活复用。精度TRT FP16 对 PyTorch FP32 输出 PSNR ~42.8dB肉眼无差INT8 会明显掉点不建议。对你意味着什么4.2s → 0.9s 不是快一点而是单卡从离线批处理跨到了扛得住在线并发这是 0 到 1 的差别。导出与建图的高频坑⚠️torch.fft.rfftn没有对应的 ONNX 二维算子默认导出会报 custom node 或直接失败。要么手动拆成实部矩阵乘法要么固定尺寸绕开别无脑加 dynamic_axes。⚠️ FFC 的 forward 会返回(tensor, 0)这种 tuplex_g有时是 int 0。trace 时必须喂真实张量别传 int 占位否则 l2g/g2l 分支会导错。⚠️ 开了BuilderFlag.FP16≠ 全 FP16。用layer.precision把每层查一遍再下结论你会发现 DFT/IRFFT 层仍是 FP32。这套固定分辨率 混合精度 先查哪些算子吃不了 FP16的打法对任何带 FFT/STFT 的视觉或生成模型频域超分、频域风格迁移等都成立先摸清谱变换层的精度天花板再谈提速。【免费下载链接】lama LaMa Image Inpainting, Resolution-robust Large Mask Inpainting with Fourier Convolutions, WACV 2022项目地址: https://gitcode.com/GitHub_Trending/la/lama创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表