76

可微分的「OpenCV」:这是基于PyTorch的可微计算机视觉库

 4 years ago
source link: https://www.tuicool.com/articles/VFva6fj
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如何打造一个可微分的OpenCV?如何将图像处理嵌入到训练流程中?你需要 Kornia 这个开源可微的计算机视觉库。

  • 项目地址:https://github.com/arraiyopensource/kornia

目前最经典的图像处理库差不多就是OpenCV了,它从最经典的图像算法到非常前沿的 DL 预训练模型囊括了 CV 的很多方面。但现在有一个问题,OpenCV是不可微的,这意味着它更多的是做预处理等工作,而不能嵌入到整个训练流程中。

在这个项目中,开发者提出了一种新型开源可微分计算机视觉库 Kornia,并且它建立在 PyTorch 之上。

Kornia 包含了一组例程和可微分模块,并致力于解决通用计算机视觉问题。在 Kornia 的核心代码中,它使用 PyTorch 作为主要后端,并高效地利用反向模式自动微分机制来定义并计算复杂函数的梯度。如下所示为 Kornia 可微分处理的一个示例:

QrQ3eeB.png!web

受到OpenCV的启发,Kornia 由包含各种运算子的子集包组成,这些运算子可以插入到神经网络中,以在训练中执行图像转换、对极几何、深度估计和各种底层图像处理,例如直接在张量上进行滤波和边缘检测等操作。

从比较高的层次上来说,Kornia 库主要包含以下组件:

m2uU3yA.png!web

使用入门

Kornia 使用起来非常简单,它的 API 就可以直接当做算子进行操作,更多的 API 文档或教程可以查阅使用指南。

  • 文档地址:https://kornia.readthedocs.io/en/latest/

import torch
import kornia

x_rad = kornia.pi * torch.rand(1, 3, 3)
x_deg = kornia.rad2deg(x_rad)

# True
torch.allclose(x_rad, kornia.deg2rad(x_deg))

使用案例

项目还提供了很多 Jupyter Notebook,它们展示了使用 Kornia 的各种实例。在这里我们简要介绍了如何使用 Kornia 抽取图像特征。首先得读取并打印图像,这一点和OpenCV或其它图像处理库都差不多:

rUBjUn2.png!web

因为这个示例展示的是经典图像处理方法,后面就需要加载预定义的检测特征:

vIZVzqZ.png!web

后面就可以根据特征抽取一些图像块,并准备做后续的处理了。

zUjaeaM.png!web

最后,前面根据特征抽取的 2000 个图像块可以进一步采用 SIFT 方法构建描述向量。

rQV7JfM.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK