R&D
CENTER

瓶颈原来是 PNG 编码器 — 增强速度提升 16 倍的记录

增强时间的 90% 以上都耗在 PIL 的 PNG 编码器上。仅通过调整一个压缩级别并改为并行保存,就把每张图像的处理时间从 4.3 秒缩短到 0.26 秒。

在 2448×2048 的 PNG 上运行 Image Processing Tool 的默认增强(Factor 5、Random ±5°),每张约需 4.3 秒。这意味着准备数千张训练数据需要好几个小时。

时间耗在了哪里

性能分析显示,瓶颈不是旋转或对齐,而是保存。运行时间的 90% 以上都耗在 PIL 的 PNG 编码器(默认压缩 level 6)上。

做了哪些修改

  1. PNG 压缩 level 1 — 仍然是无损压缩,编码速度约快 5 倍。代价是文件大约增大 10%。
  2. 并行保存输出 — 每张输入对应的 6 张输出,通过 ThreadPoolExecutor(最多 8 个线程)同时保存。PIL 编码器会释放 GIL,因此速度可随核心数提升。
  3. 简化旋转流程 — 将原来 rotate(expand=True) 后再裁剪中央的做法,改为只执行一次 rotate(expand=False)。结果相同,开销减半。
  4. 日志节流 — 原来每个文件都输出的日志,改为每 10 条输出一次。

结果

项目 v1.6.1 v1.6.2
每张处理时间 约 4.3 秒 约 0.26 秒
输出文件大小 基准 约 +10%
配置文件格式 — 无变化

旋转边界处会产生不到 0.003% 的像素差异,但不影响增强质量。