kornia/kornia
摘要
Kornia 是一个基于 PyTorch 的可微分计算机视觉库,提供 1200 多种可微分图像处理与几何视觉算子,支持批量参数、GPU 加速和自动微分。项目正转向成为 PyTorch 生态中可微分计算机视觉与几何的参考实现与可执行规范。
查看缓存全文
缓存时间: 2026/11/01 15:17
kornia/kornia
来源:https://github.com/kornia/kornia
— English | 简体中文
文档 • 立即试用 • 教程 • 示例 • 博客 • 社区
PyPI 版本 (https://pypi.org/project/kornia) · 下载量 (https://pepy.tech/project/kornia) · star (https://gitcode.com/kornia/kornia) · Discord (https://discord.gg/HfnywwpBnD) · Twitter (https://twitter.com/kornia_foss) · License
Kornia 是一个可微分的计算机视觉库,提供了丰富的可微分图像处理与几何视觉算法。基于 PyTorch (https://pytorch.org) 构建,Kornia 可无缝集成到现有的 AI 工作流中,让你充分利用强大的批量变换、自动微分和 GPU 加速。无论你在处理图像变换、数据增强还是 AI 驱动的图像处理,Kornia 都能为你提供将想法变为现实所需的工具。
📢 方向:Kornia 正在成为 PyTorch 生态中可微分计算机视觉与几何的参考实现与可执行规范 —— 优先保证明确的约定、一致性测试和诚实的基准测试,而非 API 数量的增长。请阅读 Roadmap。
何时使用 Kornia
当手写实现变得冗长或脆弱,或者替代方案需要把数据从 GPU 上搬下来时,Kornia 的价值就能体现出来:
-
覆盖面广。 1,200+ 公开算子,其中大多数在 torchvision 中没有对应实现:相机模型与对极几何、极小求解器与 RANSAC、特征检测、描述与匹配、边缘检测、形态学运算、Lab 与 Bayer 颜色空间、图像损失函数与评估指标。与 torchvision 的重叠主要在缩放、裁剪、翻转、颜色抖动和模糊上。
-
单次批量调用中使用逐样本参数。
gaussian_blur2d(x, (9, 9), sigma)接受(B, 2)形状的sigma;rotate接受(B,)形状的角度,warp_affine/warp_perspective接受(B, 2, 3)/(B, 3, 3)形状的矩阵,adjust_brightness接受(B,)形状的系数。torchvision 的函数式算子每次调用只能使用一个参数。从 Kornia 0.9.1 起,sigma张量和增强相关的数值检查(gamma、contrast、solarize)在设备端进行校验,因此 CUDA 调用或 PyTorch ≥ 2.13 下的 MPS 调用无需为这些操作进行主机同步。 -
批量极小求解器与鲁棒估计。
find_fundamental(x1, x2, method="7POINT")求解(B, 7, 2)形状的样本并返回所有实数解,形状为(B, 3, 3, 3),未使用的槽位填零矩阵;八点法、五点本质矩阵(find_essential)、DLT 单应性和 PnP(solve_pnp_dlt)求解器也一应俱全。RANSAC(单应性、基本矩阵和本质矩阵模型)在设备端采样和评估假设;默认情况下其精化和最终选择在主机上以 float64 执行,compile=True(PyTorch ≥ 2.14,支持 CPU 和 CUDA)可将整个估计过程作为单个编译图在设备端运行。 -
可微分几何。 深度与 3D 之间的转换(
depth_to_3d_v2、unproject_points、project_points)、warp_frame_depth、remap、带有 Brown–Conrady 和 Kannala–Brandt 畸变的相机模型,以及李群(So3、Se3),都保留了对深度、位姿和相机参数的梯度。 -
带标注的增强。
AugmentationSequential在 2D 中对图像、掩码、边界框和关键点同时应用同一个采样变换,并支持逆变换;3D 增强支持对体数据进行变换,但不带标注和逆变换。在 CUDA 上,增强模块会将其采样的参数异步传输到 GPU 而不阻塞设备,sync-guard 测试确保所有公开的增强算子都避免了可避免的主机同步。 -
GPU 上的局部特征。 SIFT、HardNet、DISK、ALIKED、XFeat、DeDoDe、LoFTR 和 LightGlue,以及互最近邻和比率测试匹配器。
-
形态学运算,支持在批量张量上使用任意结构元素。
-
可编译、可导出。 绝大多数已测试的算子配置都能在
torch.compile下运行且与 eager 模式结果一致,超过 1,000 个算子可导出至 ONNX;每个算子的结果都发布在导出支持页面上。 -
在设计目标场景下速度极快:GPU 上的批量张量。 在已发布的 0.9.0 旗舰基准测试中(RTX 4090,batch 32),许多滤波器、变换、特征匹配步骤和图像评估指标在 eager 模式下比 CPU 上逐张处理的 OpenCV 或 scikit-image 快约 10 到 70 倍,
torch.compile可让其中部分算子超过 100 倍。在同一 GPU 上与 torchvision 有少量重叠的部分,eager 模式下 Kornia 较慢;编译后的 Kornia 在色相、颜色抖动和高斯模糊上更快,在翻转、裁剪和亮度调整上仍然较慢。对于单张uint8的 CPU 工作负载,OpenCV 胜出。结果因硬件和工作负载而异;每个数字、胜出和失败都发布在性能页面上。这些算子直接在输入所在的设备上运行,无需 NumPy 往返,且大多数是可微分的;鲁棒估计(RANSAC)和 DeDoDe、XFeat 等可学习特征的提取方法不支持梯度。对于单次固定参数的操作,比如一次模糊或一次缩放,几行 PyTorch 或 torchvision 代码同样好用。
核心组件
- 可微分图像处理
Kornia 提供了一套全面的图像处理算子,全部可微分,可直接集成到深度学习流水线中。
- 滤波器:Gaussian、Sobel、Median、Box Blur 等。
- 变换:仿射、单应性、透视等。
- 增强:直方图均衡化、CLAHE、Gamma 校正等。
- 边缘检测:Canny、Laplacian、Sobel 等。
- ……请查看我们的文档了解更多。
- 高级数据增强
使用 Kornia 的内置功能执行强大的数据增强,非常适合训练具有复杂增强流水线的 AI 模型。
- 增强流水线:AugmentationSequential、PatchSequential、VideoSequential 等。
- 自动增强:AutoAugment、RandAugment、TrivialAugment。
- AI 模型
利用针对各种视觉任务优化的预训练 AI 模型,全部在 Kornia 生态中。
- 人脸检测:YuNet
- 特征匹配:LoFTR、LightGlue
- 特征描述子:DISK、DeDoDe、SOLD2
- 分割:SAM
- 分类:MobileViT、VisionTransformer
来看看我们支持的一些方法!(总共超过 500 个算子!)
| 类别 | 方法/模型 |
|---|---|
| 图像处理 | - 颜色空间转换(RGB、灰度、HSV 等) - 几何变换(仿射、单应性、缩放等) - 滤波(高斯模糊、中值模糊等) - 边缘检测(Sobel、Canny 等) - 形态学运算(腐蚀、膨胀等) |
| 增强 | - 随机裁剪、随机擦除 - 随机几何变换(仿射、翻转、鱼眼、透视、薄板样条、弹性变形) - 随机噪声(高斯、中值、运动、方框、雨、雪、椒盐) - 随机颜色抖动(对比度、亮度、CLAHE、Equalize、Gamma、色相、反色、JPEG、Plasma、Posterize、饱和度、锐度、Solarize) - 随机 MixUp、CutMix、Mosaic、Transplantation 等 |
| 特征检测 | - 检测器(Harris、GFTT、Hessian、DoG、KeyNet、DISK 和 DeDoDe) - 描述子(SIFT、HardNet、TFeat、HyNet、SOSNet 和 LAFDescriptor) - 匹配(最近邻、互最近邻、几何感知匹配、AdaLAM、LightGlue 和 LoFTR) |
| 几何 | - 相机模型与标定 - 立体视觉(对极几何、视差等) - 单应性估计 - 由视差估计深度 - 3D 变换 |
| 深度学习层 | - 自定义卷积层 - 视觉任务的循环层 - 损失函数(如 SSIM、PSNR 等) - 面向视觉的优化器 |
| 光度函数 | - 光度损失函数 - 光度增强 |
| 滤波 | - 双边滤波 - DexiNed - Dissolving - 引导模糊 - Laplacian - Gaussian - 非局部均值 - Sobel - USM 锐化 |
| 颜色 | - 颜色空间转换 - 亮度/对比度调整 - Gamma 校正 |
| 立体视觉 | - 视差估计 - 深度估计 - 极线校正 |
| 图像配准 | - 基于仿射和单应性的配准 - 基于特征匹配的图像对齐 |
| 位姿估计 | - 本质矩阵和基本矩阵估计 - PnP 问题求解器 - 位姿精化 |
| 光流 | - Farneback 光流 - 稠密光流 - 稀疏光流 |
| 3D 视觉 | - 深度估计 - 点云操作 |
| 图像去噪 | - 高斯噪声去除 - 泊松噪声去除 |
| 边缘检测 | - Sobel 算子 - Canny 边缘检测 |
| 变换 | - 旋转 - 平移 - 缩放 - 剪切 |
| 损失函数 | - SSIM(结构相似性度量) - PSNR(峰值信噪比) - Cauchy - Charbonnier - Depth Smooth - Dice - Hausdorff - Tversky - Welsch |
| 形态学运算 | - 膨胀 - 腐蚀 - 开运算 - 闭运算 |
CUDA 与半精度支持
下方模块表统计的是 Linux CPU 已知失败清单中的条目(cpu_float16.txt、cpu_bfloat16.txt),固定于 Python 3.11 和 PyTorch 2.15.0。
共有 243 个 float16 和 256 个 bfloat16 已记录的失败。这些是参数化测试用例的数量,并非不支持的函数数量。剩余的工作记录在 #4153。目前没有 CI 任务覆盖 CUDA 或 MPS 半精度;CPU 结果不能证明这些后端上的支持情况。
| 模块 | float16 | bfloat16 | 已知失败(fp16 / bf16) | 备注 |
|---|---|---|---|---|
kornia.color | ✅ | ✅ | 0 / 0 | Lab/Luv 转换和 rgb255_to_normals 在 float32 中计算半精度输入并返回输入的数据类型 |
kornia.filters | ✅ | ✅ | 0 / 0 | Canny、Gaussian 核/模糊和 CPU FFT 卷积在 float32 中计算半精度输入并返回输入的数据类型 |
kornia.enhance | ✅ | ✅ | 0 / 0 | ZCA 将半精度输入的拟合状态保持在 float32 中;白化和 JPEG 在 float32 计算后返回输入的数据类型 |
kornia.morphology | ✅ | ✅ | 0 / 0 | |
kornia.augmentation | ⚠️ | ⚠️ | 59 / 48 | float16:容器 autocast/运行时错误及精度问题;两种数据类型:3D 反向传播和随机生成器精度 |
kornia.geometry.transform | ⚠️ | ⚠️ | 31 / 31 | 旋转矩阵、仿射/透视变换和单应性变换器精度 |
kornia.geometry.camera | ⚠️ | ⚠️ | 13 / 23 | 投影、畸变往返和立体重投影;包含测试侧的数据类型断言 |
kornia.geometry.calibration | ⚠️ | ⚠️ | 13 / 12 | solve_pnp_dlt 拒绝半精度输入;undistort_points 精度 |
kornia.geometry.epipolar | ⚠️ | ⚠️ | 36 / 36 | 本质矩阵分解/运动估计和 KRt_from_projection 缺少 CPU 半精度内核;基本矩阵精度 |
kornia.geometry.homography | ⚠️ | ⚠️ | 10 / 16 | DLT 求解器精度,包括迭代和基于直线的变体 |
kornia.geometry.liegroup | ✅ | ✅ | 0 / 0 | So2/Se2 拒绝 bfloat16 旋转构建:PyTorch 没有复数 bfloat16 数据类型;这些预期错误/跳过不在清单范围内 |
kornia.geometry.solvers | ✅ | ✅ | 0 / 0 | |
kornia.geometry.subpix | ⚠️ | ⚠️ | 6 / 3 | SpatialSoftArgmax2d 和 ConvQuadInterp3d 精度;bfloat16:render_gaussian2d 精度 |
kornia.geometry.conversions | ⚠️ | ⚠️ | 65 / 65 | 角轴、四元数和旋转矩阵精度;包含 tests/integration/test_conversions.py |
kornia.geometry.ransac | ⚠️ | ⚠️ | 2 / 2 | 本质矩阵拟合在对极几何求解器中引发异常 |
kornia.geometry(其他) | ⚠️ | ⚠️ | 6 / 13 | 边界框变换和深度精度 |
kornia.image | ⚠️ | ⚠️ | 2 / 2 | 圆/椭圆多边形填充比较使用半精度计算的顶点和参考掩码 |
kornia.losses | ✅ | ⚠️ | 0 / 2 | bfloat16:全变差精度 |
kornia.feature | ✅ | ✅ | 0 / 0 | 匹配对半精度数据类型使用手动 cdist 回退;LightGlue 的 float16 测试被跳过 |
kornia.metrics | ✅ | ✅ | 0 / 0 | |
kornia.models | ✅ | ⚠️ | 0 / 1 | bfloat16:RT-DETR RepVGG 融合精度 |
contrib, core, io, onnx, sensors, tracking, utils | ✅ | ⚠️ | 0 / 2 | bfloat16:直方图匹配和 _torch_svd_cast 精度 |
✅ CPU 已知失败清单中无条目 ⚠️ 存在已记录的 CPU 失败。这两个符号都不意味着完整的数据类型支持:跳过、预期异常和源码级别的 xfail 不在此计数范围内。部分算子在内部以 float32 或 float64 计算并返回输入的数据类型。
观察到的 CPU CI 结果:
定时运行 93f1376e,2026-10-21(https://github.com/kornia/kornia/actions/runs/39524889979),使用 Linux x86_64、Python 3.11 和 PyTorch 2.14.0,不含慢速测试和编译测试:
| 运行 | 通过 | 失败 | 跳过 | XFAIL(全部) | XPASS | 严格清单条目 |
|---|---|---|---|---|---|---|
| CPU float16 (https://github.com/kornia/kornia/actions/runs/39524889979/job/118977300500) | 23905 | 0 | 5132 | 284 | 4 | 250 |
| CPU bfloat16 (https://github.com/kornia/kornia/actions/runs/39524889979/job/118977300410) | 23726 | 0 | 5286 | 309 | 4 | 274 |
每个任务还取消选择了 3 个 ONNX 一致性测试。XFAIL 总数包含严格清单条目和源码级别的预期失败。每个成功任务中的 4 个 XPASS 是通过了的非严格预期失败;一个清单条目通过会导致验证失败,异常变化、跳过的条目或过期的节点 ID 也会导致验证失败。因此绿色任务意味着记录的基线得到了复现,尽管已知失败和跳过仍然存在。这些总数描述的是链接的版本;模块表描述的是已提交的清单。
在固定环境中验证完整的 CPU 配置:
KORNIA_TEST_OPTIMIZER= pixi run test-module tests/ --verify-known-failures --known-failure-profile=cpu-float16
KORNIA_TEST_OPTIMIZER= pixi run test-module tests/ --verify-known-failures --known-failure-profile=cpu-bfloat16
pixi run test-half 是未设置种子的 CPU 扫描,不包含严格配置基线。有关针对性检查和基线维护,请参阅 TESTING.md。
CUDA 支持与测量限制: Kornia 接受 CUDA 张量以实现 GPU 加速,但受各算子的数据类型和后端限制。目前没有阻塞式的 CUDA CI 任务,也没有已提交的 CUDA 已知失败清单,因此上述 CPU xfail 计数不能提供当前的 CUDA 通过率。此前的本地测量结果仅作为历史证据保留在此:
历史运行(f8449854,2026-09-23) | 通过 | 失败 | 跳过 |
|---|---|---|---|
| CUDA float32 | 12193 | 22 | 3957 |
| CUDA float16 | 11738 | 451 | 3983 |
| CUDA bfloat16 | 11736 | 500 | 3936 |
这些使用了 RTX 4090、Python 3.11 和 PyTorch 2.14.0+cu130。已排除源码标记的 xfail。半精度测试在进程内以 KORNIA_TEST_IN_SUBPROCESS=1 运行,随后对失败项进行隔离重试;两个单应性测试被取消选择。它们不是当前分支的测量结果。那两个测试(TestFindHomographyDLT::test_nocrash 和 test_nocrash_lu)在 649b3f86d 上现已在本地通过所有三种 CUDA 数据类型;在引用新的总数之前需要进行一次全新的完整 CUDA 扫描。对于 CUDA 半精度测试,请使用 --isolate-half-precision 以确保每个测试都在新进程中运行。不指定该选项时这些测试默认被跳过;仅选择半精度数据类型并不能触发 CUDA 半精度支持路径。
相似文章
使用 Kornia 进行可微分数据增强
一篇综述 Kornia 可微分数据增强模块的论文,该模块适用于二维和三维张量,可与 PyTorch 的 autograd 和 optim 集成,文中还包含对不同数据增强框架进行比较的基准测试。
TorchKM:面向GPU的核学习与模型选择库
TorchKM是一个开源的GPU加速核机器库(支持向量机、核逻辑回归等),采用scikit-learn风格的API。通过重用矩阵运算加速训练和模型选择,相比标准基线实现了显著的加速比。
opencv/opencv
OpenCV是一个开源计算机视觉库,提供图像处理、机器学习和人工智能开发的工具。
@Huahuazo: 平时 PyTorch 封装 API 调得飞起,一旦脱离框架裸写算子,分分钟现原形——公式在脑子里打转,落到代码上就卡壳;思路能讲一套,一动手就断片。 GitHub 上有个开源刷题平台叫 TorchCode,专治这个毛病,把"手写深度学习算…
TorchCode是一个开源刷题平台,将手写深度学习算子做成LeetCode模式,包含40道高频面试题,提供自动评测和提示,支持Docker一键部署和Hugging Face Spaces在线使用。
@liao_lucas: https://x.com/liao_lucas/status/2097149853499588971
本文介绍了在AI推理和性能工程背景下的GPU内核,解释了它们的定义、使用方法以及自定义内核在优化中的优势。