如何打造一个可微分的 OpenCV? 如何将图像处理嵌入到训练流程中? 你需要 Kornia 这个开源可微的计算机视觉库.
项目地址: https://github.com/arraiyopensource/kornia
目前最经典的图像处理库差不多就是 OpenCV 了, 它从最经典的图像算法到非常前沿的 DL 预训练模型囊括了 CV 的很多方面. 但现在有一个问题, OpenCV 是不可微的, 这意味着它更多的是做预处理等工作, 而不能嵌入到整个训练流程中.
在这个项目中, 开发者提出了一种新型开源可微分计算机视觉库 Kornia, 并且它建立在 PyTorch 之上.
Kornia 包含了一组例程和可微分模块, 并致力于解决通用计算机视觉问题. 在 Kornia 的核心代码中, 它使用 PyTorch 作为主要后端, 并高效地利用反向模式自动微分机制来定义并计算复杂函数的梯度. 如下所示为 Kornia 可微分处理的一个示例:
受到 OpenCV 的启发, Kornia 由包含各种运算子的子集包组成, 这些运算子可以插入到神经网络中, 以在训练中执行图像转换, 对极几何, 深度估计和各种底层图像处理, 例如直接在张量上进行滤波和边缘检测等操作.
从比较高的层次上来说, Kornia 库主要包含以下组件:
使用入门
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 或其它图像处理库都差不多:
因为这个示例展示的是经典图像处理方法, 后面就需要加载预定义的检测特征:
后面就可以根据特征抽取一些图像块, 并准备做后续的处理了.
最后, 前面根据特征抽取的 2000 个图像块可以进一步采用 SIFT 方法构建描述向量.
来源: http://www.tuicool.com/articles/VFva6fj