关于作者:
Edgar Riba 是 IRI – Institut de Robòtica i Informàtica Industrial,CSIC-UPC 的研究科学家。巴塞罗那自治大学计算机视觉中心的博士候选人,OpenCV.org 技术委员会成员。他是 Kornia 的创建者,由 Gary Bradski 指导,目前是项目负责人,负责管理主要库活动和核心开发。
什么是 Kornia?Kornia [1, 2] 可以定义为一个用于 PyTorch [3] 的计算机视觉库,其灵感来自 OpenCV 并且具有强大的 GPU 支持。Kornia 允许用户像使用原生 PyTorch 一样编写代码,为直接在张量上计算的视觉算法提供高级接口。此外,Kornia 继承了 PyTorch 的一些主要功能,例如高性能环境,可轻松访问自动微分、在不同设备(CPU、GPU 或张量处理单元 - TPU)上执行模型、默认并行编程、用于跨多个计算节点的多进程并行的通信原语以及可用于生产的代码。
可微分。任何可以定义为有向无环图 (DAG) 结构的图像处理算法都可以集成到神经网络中,并且可以在训练期间进行优化,利用反向模式自动微分,通过反向传播计算梯度。在实践中,这意味着计算机视觉函数是运算符,可以作为神经网络中的层放置,以便通过反向传播训练它们。
透明 API。库设计中的一个关键组成部分是其轻松的方式,可以以最小的努力将硬件加速无缝地添加到您的程序中。库 API 与输入源设备无关,这意味着算法可以在多种设备类型(例如 CPU、GPU 或最近推出的 TPU)上执行。
并行编程。批处理是另一个重要功能,它能够默认使用数据并行来运行视觉运算符。运算符的假设是接收 N 通道图像张量作为输入批次,这与具有单个 1-3 通道图像的标准视觉库相反。因此,可以使用 Kornia 以直接的方式处理多光谱、高光谱或体积图像。
分布式。支持跨多个计算节点的通信原语,这些节点在本地或云端的一组或多组机器上运行。库设计允许用户在不同的分布式系统中运行他们的应用程序,甚至能够以有效的方式处理大型视觉管道。
生产。从 v1.0.0 版本开始,PyTorch 具有序列化和优化模型以用于生产目的的功能。基于其即时 (JIT) 编译器,PyTorch 跟踪模型,在运行时创建 TorchScript 程序,以便在使用内核融合进行更快推理的独立 C++ 程序中运行。这使得我们的库也非常适合内置视觉产品。
Kornia 旨在作为 OpenCV 的重新实现,用于研究目的,从某种意义上说,它模仿了一些主要功能,并添加了通过不同运算符反向传播的能力。但是,请注意,Kornia 并不旨在替代 OpenCV,因为它没有针对生产目的进行优化,也没有在嵌入式设备中实现高性能。即使该项目得到了 OpenCV.org 的支持,短期内也没有任何将两个项目合并的形式的意图。Kornia 可以理解为一组用于训练神经网络的工具,这些工具稍后可使用其他优化框架在生产中使用。
库结构
库的内部结构旨在涵盖不同的计算机视觉领域,包括颜色转换、低级图像处理、几何变换以及一些用于训练的实用程序,例如特定的损失函数、不同框架之间的数据布局转换或轻松可视化图像和调试模型的功能训练期间。
组件 | 描述 |
kornia | 一个类似 OpenCV 的可微分计算机视觉库,具有强大的 GPU 支持 |
kornia.augmentation | 一个在 GPU 上执行数据增强的模块 |
kornia.color | 一组执行颜色空间转换的例程 |
kornia.contrib | 用户贡献和实验运算符的汇编 |
kornia.enhance | 一个执行归一化和强度变换的模块 |
kornia.feature | 一个执行特征检测的模块 |
kornia.filters | 一个执行图像滤波和边缘检测的模块 |
kornia.geometry | 一个几何计算机视觉库,用于使用不同的相机模型执行图像变换、3D 线性代数和转换 |
kornia.losses | 一组损失函数,用于解决不同的视觉任务 |
kornia.utils | 图像到张量实用程序以及视觉问题的指标 |
入门
Kornia 在 GitHub [4] 上公开提供,并使用 Apache License 2.0,并且可以安装在任何 Linux、MacOS 或 Windows 操作系统中,并将 PyTorch 作为唯一的依赖项,通过 Python 包索引 (PyPI) 使用以下命令
pip install kornia
开始使用 Kornia 和 OpenCV
import cv2
import numpy as np
import torch
import kornia as K
img: np.ndarray = cv2.imread(“bruce.png”, cv2.IMREAD_COLOR) # HxWx3
img_t: torch.Tensor = K.image_to_tensor(img) # 1x3xHxW
Img_out: torch.Tensor = K.warp_perspective(img_t, H, (h, w)) # 1x3xHxW
Kornia v0.4 版本
Kornia 团队很高兴地宣布发布 v0.4 版本。
我们发布了 Kornia 的新版本,其中包含用于处理**3D 增广**和**体积数据**、**局部特征匹配**、**单应性**和**极几何**的不同功能。
简而言之,我们列出了以下新功能
- 支持 PyTorch v1.6.0。
- 局部描述符匹配、单应性和极几何 API。
- 3D 增广和用于处理体积数据的低级 API。
局部特征匹配
我们包含了一个kornia.feature.matching API,用于执行局部描述符匹配,例如最近邻 (NN) 的经典版本和派生版本。
import torch
import kornia as K
desc1 = torch.rand(2500, 128)
desc2 = torch.rand(2500, 128)
dists, idxs = K.feature.matching.match_nn(desc1, desc2) # 2500 / 2500x2
单应性和极几何
我们还引入了kornia.geometry.homography,其中包含用于处理单应性和基于 DLT 公式和迭代重加权最小二乘 (IRWLS) 的可微估计器的不同功能。
import torch
import kornia as K
pts1 = torch.rand(1, 8, 2)
pts2 = torch.rand(1, 8, 2)
H = K.find_homography_dlt(pts1, pts2, weights=torch.rand(1, 8)) # 1x3x3
此外,我们已将一些现有的算法从opencv.sfm 移植到 PyTorch,位于kornia.geometry.epipolar 下,其中包含用于处理**基础**、**本质**或**投影**矩阵以及**三角测量**方法的不同功能,这些方法对运动结构问题很有用。
3D 增广和体积
我们使用一系列运算符扩展了kornia.augmentaion,以对体积数据执行 3D 增广。
在此版本中,我们包含了以下第一组几何 3D 增广方法
- RandomDepthicalFlip3D(沿深度轴)
- RandomVerticalFlip3D(沿高度轴)
- RandomHorizontalFlip3D(沿宽度轴)
- RandomRotation3D
- RandomAffine3D
3D 增广的 API 与 2D 图像增广的 API 相同
import torch
import kornia as K
x = torch.eye(3).repeat(3, 1, 1)
aug = K.augmentation.RandomVerticalFlip3D(p=1.0)
print(aug(x))
tensor([[[[[0., 0., 1.],
[0., 1., 0.],
[1., 0., 0.]],
<BLANKLINE>
[[0., 0., 1.],
[0., 1., 0.],
[1., 0., 0.]],
<BLANKLINE>
[[0., 0., 1.],
[0., 1., 0.],
[1., 0., 0.]]]]])
最后,我们还引入了一个低级 API 来执行 4D 特征变换kornia.warp_projective 并扩展滤波运算符以支持 3D 内核kornia.filter3D。
更多 2D 运算符
我们还根据论文AutoAugment:从数据中学习增广策略扩展了 2D 图像增广列表。
- Solarize
- Posterize
- Sharpness
- Equalize
- RandomSolarize
- RandomPosterize
- RandomShaprness
- RandomEqualize
请随时查看GitHub 上的发布说明,以了解新的库功能并获取更多详细信息。
祝您编程愉快 🙂
#计算机视觉 #人工智能 #深度学习 #pytorch
参考文献
[1] Edgar Riba、Dmytro Mishkin、Dani Ponsa、Rublee Ethan 和 Gary Bradski。Kornia:一个用于 pytorch 的开源可微分计算机视觉库。在计算机视觉应用冬季会议,2020 年。
[2] Edgar Riba、Dmytro Mishkin、Jian Shi、Dani Ponsa、Francesc Moreno-Noguer 和 Gary Bradski。关于 Kornia 的调查:一个用于 pytorch 的开源可微分计算机视觉库。2020 年。
[3] Adam Paszke、Sam Gross、Soumith Chintala、Gregory Chanan、Edward Yang、Zachary DeVito、Zeming Lin、Alban Desmaison、Luca Antiga 和 Adam Lerer。PyTorch 中的自动微分。在NIPS-W,2017 年。
[4]Kornia GitHub:https://github.com/kornia/kornia