kornia/kornia

GitHub Trending (daily) 工具

摘要

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 代码同样好用。

核心组件

  1. 可微分图像处理

Kornia 提供了一套全面的图像处理算子,全部可微分,可直接集成到深度学习流水线中。

  • 滤波器:Gaussian、Sobel、Median、Box Blur 等。
  • 变换:仿射、单应性、透视等。
  • 增强:直方图均衡化、CLAHE、Gamma 校正等。
  • 边缘检测:Canny、Laplacian、Sobel 等。
  • ……请查看我们的文档了解更多。
  1. 高级数据增强

使用 Kornia 的内置功能执行强大的数据增强,非常适合训练具有复杂增强流水线的 AI 模型。

  • 增强流水线:AugmentationSequential、PatchSequential、VideoSequential 等。
  • 自动增强:AutoAugment、RandAugment、TrivialAugment。
  1. 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 结果不能证明这些后端上的支持情况。

模块float16bfloat16已知失败(fp16 / bf16)备注
kornia.color✅✅0 / 0Lab/Luv 转换和 rgb255_to_normals 在 float32 中计算半精度输入并返回输入的数据类型
kornia.filters✅✅0 / 0Canny、Gaussian 核/模糊和 CPU FFT 卷积在 float32 中计算半精度输入并返回输入的数据类型
kornia.enhance✅✅0 / 0ZCA 将半精度输入的拟合状态保持在 float32 中;白化和 JPEG 在 float32 计算后返回输入的数据类型
kornia.morphology✅✅0 / 0
kornia.augmentation⚠️⚠️59 / 48float16:容器 autocast/运行时错误及精度问题;两种数据类型:3D 反向传播和随机生成器精度
kornia.geometry.transform⚠️⚠️31 / 31旋转矩阵、仿射/透视变换和单应性变换器精度
kornia.geometry.camera⚠️⚠️13 / 23投影、畸变往返和立体重投影;包含测试侧的数据类型断言
kornia.geometry.calibration⚠️⚠️13 / 12solve_pnp_dlt 拒绝半精度输入;undistort_points 精度
kornia.geometry.epipolar⚠️⚠️36 / 36本质矩阵分解/运动估计和 KRt_from_projection 缺少 CPU 半精度内核;基本矩阵精度
kornia.geometry.homography⚠️⚠️10 / 16DLT 求解器精度,包括迭代和基于直线的变体
kornia.geometry.liegroup✅✅0 / 0So2/Se2 拒绝 bfloat16 旋转构建:PyTorch 没有复数 bfloat16 数据类型;这些预期错误/跳过不在清单范围内
kornia.geometry.solvers✅✅0 / 0
kornia.geometry.subpix⚠️⚠️6 / 3SpatialSoftArgmax2d 和 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 / 2bfloat16:全变差精度
kornia.feature✅✅0 / 0匹配对半精度数据类型使用手动 cdist 回退;LightGlue 的 float16 测试被跳过
kornia.metrics✅✅0 / 0
kornia.models✅⚠️0 / 1bfloat16:RT-DETR RepVGG 融合精度
contrib, core, io, onnx, sensors, tracking, utils✅⚠️0 / 2bfloat16:直方图匹配和 _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)23905051322844250
CPU bfloat16 (https://github.com/kornia/kornia/actions/runs/39524889979/job/118977300410)23726052863094274

每个任务还取消选择了 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 float3212193223957
CUDA float16117384513983
CUDA bfloat16117365003936

这些使用了 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 进行可微分数据增强

Papers with Code Trending

一篇综述 Kornia 可微分数据增强模块的论文,该模块适用于二维和三维张量,可与 PyTorch 的 autograd 和 optim 集成,文中还包含对不同数据增强框架进行比较的基准测试。

TorchKM:面向GPU的核学习与模型选择库

arXiv cs.LG

TorchKM是一个开源的GPU加速核机器库(支持向量机、核逻辑回归等),采用scikit-learn风格的API。通过重用矩阵运算加速训练和模型选择,相比标准基线实现了显著的加速比。

opencv/opencv

GitHub Trending (daily)

OpenCV是一个开源计算机视觉库,提供图像处理、机器学习和人工智能开发的工具。

@Huahuazo: 平时 PyTorch 封装 API 调得飞起,一旦脱离框架裸写算子,分分钟现原形——公式在脑子里打转,落到代码上就卡壳;思路能讲一套,一动手就断片。 GitHub 上有个开源刷题平台叫 TorchCode,专治这个毛病,把"手写深度学习算…

X AI KOLs Timeline

TorchCode是一个开源刷题平台,将手写深度学习算子做成LeetCode模式,包含40道高频面试题,提供自动评测和提示,支持Docker一键部署和Hugging Face Spaces在线使用。