📌 项目地址:kornia/kornia | ⭐ 11,773 颗星 | 🔧 Python | 📜 未标注
先说结论
如果你在 PyTorch 里训练模型,但图像预处理和增强还在 CPU 上用 OpenCV 或 PIL 做,Kornia 值得认真看。11.7k star,纯 Python 库,把 1200 多个图像处理和几何视觉算子写成了可微分的 PyTorch 算子,直接跑 GPU,参与反向传播。
这意味着增强、几何变换这些以前只能放在 DataLoader 里的操作,现在可以塞进模型内部,端到端一起训练。
和 torchvision 比,重叠其实很小
torchvision 的 transforms 够用吗?看需求。README 说得直白:torchvision 主要覆盖 resize、crop、flip、color jitter、blur 这几样。Kornia 大部分算子在 torchvision 里找不到对应物:相机模型、对极几何、特征检测/描述/匹配、边缘检测、形态学、Lab 和 Bayer 色彩、图像损失函数和指标。
写代码时体感差别最大的一点是逐样本参数。torchvision 的 functional 算子一次调用只吃一个参数,Kornia 这些全接受张量:
gaussian_blur2d(x, (9, 9), sigma)的sigma可以是(B, 2)张量rotate接受(B,)角度,一个 batch 里每张图转的角度都不一样warp_affine/warp_perspective接受(B, 2, 3)/(B, 3, 3)矩阵adjust_brightness接受(B,)系数
大规模增强时,一次调用搞定整个 batch,这个差别很明显。
性能上还有个细节:从 0.9.1 起,sigma 张量和增强参数校验(gamma、contrast、solarize)都在设备上做,CUDA 调用不用为校验同步回 CPU。PyTorch ≥ 2.13 上的 MPS 调用也一样。
几何视觉才是重头
做 SLAM、三维重建或几何深度学习的人,关心的是这一部分。README 给的例子:
find_fundamental(x1, x2, method="7POINT") 解 (B, 7, 2) 的样本批次,返回 (B, 3, 3, 3) 的全部实数解,没用到的槽位填零矩阵。同类的还有 8 点法、5 点本质矩阵求解(find_essential)、DLT 单应性估计、PnP(solve_pnp_dlt)。
RANSAC 部分支持单应性、基础矩阵、本质矩阵三种模型,采样和打分都在设备上跑。默认配置下,精化和最终选择在 host 上用 float64 做,保证数值精度。想全程留在设备上,开 compile=True(需要 PyTorch ≥ 2.14,CPU 和 CUDA 都行),整个估计过程编译成一个图。
也就是说,以前需要 OpenCV + numpy 手搓、只能离线跑的几何估计管线,现在可以批量塞进训练回路。
项目走向
官方在 README 里写明了方向:Kornia 要成为 PyTorch 生态里可微分计算机视觉和几何的参考实现、可执行规范。重点不在扩 API,而在明确的约定、一致性测试、诚实的基准测试。我觉得这个定位对使用者是好事:API 稳定和数值正确,比堆新功能实在。
用之前想清楚两件事
第一,这是 PyTorch 生态的库。管线不在 PyTorch 上,迁移成本先算清楚。
第二,部分新特性对 PyTorch 版本要求很新:MPS 无同步校验要 PyTorch ≥ 2.13,RANSAC 的 compile=True 要 PyTorch ≥ 2.14。老环境里这些功能用不了,升级前先看自己的 PyTorch 版本。
从哪开始
安装入口在 PyPI(pypi.org/project/kornia)。具体安装命令和入门代码 README 正文没给,但官方文档、Tutorials、Examples 的链接都在仓库首页,照着走就行。社区有 Discord,中文用户可以走 GitCode 访问。
一句话总结:工作涉及 GPU 上大规模数据增强,或者需要把几何估计放进训练回路,Kornia 应该出现在你的依赖列表里。