OpenCV创始人GaryBradski等人最近发表了对Kornia的评论。Kornia是一个基于PyTorch的可微分计算机视觉库,实现了可微分的基本计算机视觉算子和可微分的数据增强。该项目在Github上获得了3k星。无论是在深度学习还是传统的视觉处理方案中,最常用的图像处理库是OpenCV和PIL。但是由于OpenCV和PIL都是不可微分的,这些过程只能作为图像预处理,不能通过观察梯度变化来优化(基于梯度的优化)。因此,科尼亚诞生了。论文链接:https://arxiv.org/pdf/2009.10521.pdf项目链接:https://github.com/kornia/kornia文档链接:https://kornia.readthedocs.io/en/latest/index.htmlKornia它是一个基于PyTorch的可微分计算机视觉(differentiablecomputervision)开源库,在Github上已经有3000个star。为了平衡传统视觉处理和深度学习的需求,Kornia实现了:可微分的基本计算机视觉算子。可区分的数据增强。由于Kornia基于PyTorch,它还将具有以下属性:可微性。所有算子的梯度都可以通过PyTorch的AutoGrad进行计算,并使用PyTorch的优化器(如Adam)进行优化。GPU/TPU加速。除了CPU,Kornia还可以在GPU甚至TPU中进行计算。批量数据处理。同时处理大量数据,提高运营效率。1.Kornia的可微分计算机视觉为了解决不同计算机视觉领域的问题,如颜色转换、图像底层处理、图像几何变换、特征检测等,Kornia设计了如下图所示的模块。值得一提的是,Kornia不仅用PyTorch重新实现了OpenCV的功能,还把传统视觉中的一些不可微运算做了可微运算。例如裁剪操作是通过透视变换(Perspectivetransform)和仿射变换(Affinetransform)来实现的。基于可微性,Kornia中的传统视觉方法也可以通过梯度下降进行优化。例如使用梯度下降法实现图像深度估计(DepthEstimation):详细代码参考https://github.com/kornia/kornia-examples/blob/master/depth_estimation.ipynb或使用梯度下降法实现图像配准(ImageRegistration):详细代码参考https://github.com/kornia/kornia-examples/blob/master/homography.ipynb2.Korniadeepdifferentiabledataaugmentation中最常用的优化方法学习方便是基于梯度的优化,但常用的数据增强库(如TorchVision、Albumentations)不具备可微性。为了更好的与深度学习结合,Kornia参考了TorchVision的API,实现了可微分数据增强(DDA,DifferentiableDataAugmentation)。目前,开发团队也在持续开发更多可区分的2D图像和3DVolume数据增强,如下图(RGB3DVolume很少见,实现与否由社区推动)。由于Kornia是基于PyTorch开发的,数据增强的逻辑很自然地集成到PyTorch网络中,就像使用卷积层和池化层一样。同样,我们可以任意定义、保存和加载Kornia增强模块,并在任何设备(CPU/GPU/TPU)上运行它们。特别是在训练中,如果你的CPU已经过载,Kornia会大大提高你的训练速度和GPU利用率。同时,Kornia的数据增强方法也可以很容易地通过梯度进行优化。下面的例子展示了如何使用ColorJitter来更新图像和增强参数,其中我们通过nn.Parameter定义了亮度(brightness)、饱和度(saturation)和对比度(contrast)三个可微参数,并通过torch.tensor定义了不可微参数色调(hue)。从结果中我们可以看到经过较大学习率(学习率=1e+5)更新后的图像以及三个可微分参数的变化。3.可区分数据增强甚至计算机视觉近年来在社区中引起了越来越多的关注。最近的工作,例如FasterAutoAugment,是一种基于Kornia可微性的自动数据增强策略的优化方法。开发团队表示,他们也希望自己的工作能够更多地应用到各种有潜力的项目中。未来,他们将添加更多的数据增强操作、梯度估计方法和对JIT的支持。
