Skip to content

Releases: sdcb/SimdPaddleOCR

SimdPaddleOCR 1.4.2

Choose a tag to compare

@sdcb sdcb released this 20 Sep 14:01

发布 SimdPaddleOCR 1.4.2。这一版把 CLS 测试集正确率拉到了 100%

DET 长行如果整行挤进 160×80,字形会被压扁,0/180 就变成噪声。1.4.2 对宽高比超过 4:1 的行只采样左边 4×height 窗口,再按原来的 keep-aspect + RecNorm 送进网络。2:1 太短,倒着的拉丁尾巴仍会漏翻;4:1 是正确率和简单性比较合适的折中。

本机 DET 匹配行 1022/1022,CI 1020/1020。墙钟和内存相对 1.4 不变。

完整数字见 docs/perf.md。NuGet:Sdcb.SimdPaddleOCR

SimdPaddleOCR 1.4

Choose a tag to compare

@sdcb sdcb released this 19 Sep 12:36

非常自豪地发布 SimdPaddleOCR 1.4。这一版把 1.3 没开闸的路径补上了:墙钟更快、工作集腰斩、medium 正确率贴上 C,像素也不用再先转成 BGR。

性能碉堡

图级 NHWC 从「仅 AVX2」扩到 ns2 / x64 scalar / net10 AdvSIMD。预处理直接写 NHWC,少一次输入搬家。

本机 Ryzen 7 5800X、4 worker、同一套 100 张(墙钟 n=99):

模型 路径 1.3 1.4 相对
tiny net10 AVX2 86.0 ms 63.1 ms 0.73×
tiny ns2 203.1 ms 96.5 ms 0.48×
small net10 AVX2 222 ms 200 ms 0.90×
medium net10 AVX2 628 ms 585 ms 0.93×
medium ns2 1606 ms 874 ms 0.54×

CI 上 linux-arm64 N2 tiny-4w 241 → 180 ms(约快 25%);win-x64 7763 的 ns2 343 → 228 ms。AVX2 默认路径和 1.3 持平,台阶在以前吃不到 NHWC 的那些人。

内存优化

tiny 工作集峰值 804 → 515 MB,medium 2489 → 1206 MB。CI 同一把尺子:7763 817 → 515 MB,N2 840 → 572 MB,Δ WS 从大约 400 MB 掉到 100–160 MB。

正确率优化

CLS 预处理改回 PaddleOCR ClsResizeImg 保比例,细长拉丁行不再被拉成 160×80 后 0/180 翻面。本机同一 1036 行:tiny / small 没动;medium CER 0.67% → 0.26%,已经贴上 lw.PPOCR.C 的 0.24%。

像素格式

Run 默认仍是 Bgr24,也可以直接吃 RGB24 / BGRA32 / RGBA32。swizzle 发生在本来就要做的 resize / warp 里,不摊一张中间 BGR。ImageSharp 的 Rgba32、Skia / Bitmap 的 BGRA 可以原样送进来。

LINQPad

NuGet 包带 4 个脚本:imagesharp / skiasharp / opencvsharp5 / bitmap。下载示例图,tiny 模型识别,控制台输出文字。打了 linqpad-samples 标签,免费版也能用。bitmap 在 LINQPad 5 / .NET Framework 4.8 和 .NET 10 上都能跑。

完整数字和读数规则见 docs/perf.md。NuGet:Sdcb.SimdPaddleOCR

SimdPaddleOCR 1.3.0

Choose a tag to compare

@sdcb sdcb released this 14 Sep 15:23

AVX2+FMA 上对连续卷积段走图级 NHWC;netstandard2.0 / ARM / PPOCR_NHWC=0 仍是 NCHW。正确率不变。

相对 1.2

同一 CPU、同一 ISA、PP-OCRv6 tiny、去掉 warmup 的中位墙钟(34818949921 vs 34303303418):

  • win-x64(EPYC 7763 AVX2):4 worker 232 → 160 ms(约快 31%,吞吐约 1.45×)。强制 noavx512 同样是 0.69×。
  • win-x64 netstandard2.0(无 NHWC):361 → 343 ms,几乎没动。
  • linux-arm64(Neoverse N2):273 → 241 ms(约快 12%)。
  • 同 replica OpenVINO / 本库:1.2 为 0.96(OV 略快);1.3 为 1.38(本库反超)。

本机 Ryzen 7 5800X、medium 4 worker、同一 100 张:相对标签 1.2.0 1507 → 641 ms(约 0.43×,吞吐约 2.3×),CER 仍 0.68%。

当前基准(1.3)

GitHub-hosted runner,tiny,34818949921

平台 ISA 中位 ms/图 工作集峰值
win-x64 / EPYC 7763 AVX2 160 ~817 MB
win-x64 netstandard2.0 AVX2(Vector,无 NHWC) 343 ~775 MB
linux-arm64 / Neoverse N2 AdvSimd(无 NHWC) 241 ~840 MB

正确率跨 Windows / Linux / macOS 与 scalar 都是 757/1022、CER 3.53%。

本机引擎对比(Ryzen 7 5800X,4 worker,仓库 dataset/ 100 张,n=99)。c 为 lw.PPOCR.C 20d0de62026-09-14 DLL)。墙钟是 mean ms/图。

模型 引擎 mean ms/图 相对本库 行精确 CER 工作集峰值
tiny 本库 87.8 1.00 734/1026 2.71% 803 MB
tiny OpenVINO.NET 132 1.51 644/1026 3.55% 2785 MB
tiny lw.PPOCR.C 186 2.12 744/1026 4.01% 539 MB
medium 本库 641 1.00 992/1026 0.68% 2430 MB
medium OpenVINO.NET 1077 1.68 810/1026 1.74% 4516 MB
medium lw.PPOCR.C 2193 3.42 1004/1026 0.24% 1481 MB

small 和读数规则见 docs/perf.md。NuGet:Sdcb.SimdPaddleOCR 1.3.0。

SimdPaddleOCR 1.2.0

Choose a tag to compare

@sdcb sdcb released this 09 Sep 02:27

ARM64 上把 AdvSimd 铺进热路径;win-x64 默认 AVX2 与 1.1 持平。正确率不变。

相对 1.1

同一 CPU、同一 ISA、PP-OCRv6 tiny、去掉 warmup 的中位墙钟:

  • linux-arm64(Neoverse N2):4 worker 472 → 273 ms(约快 42%,吞吐约 1.73×);1 worker 658 → 399 ms(约快 40%)。scalar 几乎没动。
  • win-x64 关掉 AVX 的 Vector128:554 → 494 ms(约快 11%)。
  • win-x64 默认 AVX2(EPYC 7763):233 → 238 ms,持平。

当前基准(1.2)

GitHub-hosted runner,tiny,4 次 CI 合计:

平台 ISA 中位 ms/图 工作集峰值
win-x64 / EPYC 7763 AVX2 238 ~790 MB
win-x64 netstandard2.0 AVX2(Vector 373 ~785 MB
linux-arm64 / Neoverse N2 AdvSimd 273 ~847 MB

同机引擎对比(win-x64 / EPYC 7763,tiny 4 worker):

引擎 中位 ms/图 工作集峰值 行精确 CER
本库 224 ~790 MB 757/1022 3.53%
lw.PPOCR.C 281 ~586 MB 759/1022 4.18%
OpenVINO.NET 214 ~2600 MB 698/1022 3.63%

lw.PPOCR.C 用的是 2026 年 8 月底的一份构建,不代表其最新版本。

正确率跨 Windows / Linux / macOS 与 scalar 都是 757/1022、CER 3.53%。墙钟接近 OpenVINO.NET、比该份 C 快约 26%;工作集约 OpenVINO.NET 的 1/3。

环境、ISA 阶梯和读数规则见 docs/perf.md。NuGet:Sdcb.SimdPaddleOCR 1.2.0。