可微分的「OpenCV」:這是基於PyTorch的可微計算機視覺庫

機器之心整理

參與:思

如何打造一個可微分的 OpenCV?如何將圖像處理嵌入到訓練流程中?你需要 Kornia 這個開源可微的計算機視覺庫。

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

目前最經典的圖像處理庫差不多就是 OpenCV 了,它從最經典的圖像算法到非常前沿的 DL 預訓練模型囊括了 CV 的很多方面。但現在有一個問題,OpenCV 是不可微的,這意味著它更多的是做預處理等工作,而不能嵌入到整個訓練流程中。

在這個項目中,開發者提出了一種新型開源可微分計算機視覺庫 Kornia,並且它建立在 PyTorch 之上。

Kornia 包含了一組例程和可微分模塊,並致力於解決通用計算機視覺問題。在 Kornia 的核心代碼中,它使用 PyTorch 作為主要後端,並高效地利用反向模式自動微分機制來定義並計算複雜函數的梯度。如下所示為 Kornia 可微分處理的一個示例:

可微分的「OpenCV」:這是基於PyTorch的可微計算機視覺庫

受到 OpenCV 的啟發,Kornia 由包含各種運算子的子集包組成,這些運算子可以插入到神經網絡中,以在訓練中執行圖像轉換、對極幾何、深度估計和各種底層圖像處理,例如直接在張量上進行濾波和邊緣檢測等操作。

從比較高的層次上來說,Kornia 庫主要包含以下組件:

可微分的「OpenCV」:這是基於PyTorch的可微計算機視覺庫

使用入門

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 或其它圖像處理庫都差不多:

可微分的「OpenCV」:這是基於PyTorch的可微計算機視覺庫

因為這個示例展示的是經典圖像處理方法,後面就需要加載預定義的檢測特徵:

可微分的「OpenCV」:這是基於PyTorch的可微計算機視覺庫

後面就可以根據特徵抽取一些圖像塊,並準備做後續的處理了。

可微分的「OpenCV」:這是基於PyTorch的可微計算機視覺庫

最後,前面根據特徵抽取的 2000 個圖像塊可以進一步採用 SIFT 方法構建描述向量。

可微分的「OpenCV」:這是基於PyTorch的可微計算機視覺庫


分享到:


相關文章: