Kornia開源可微分計算機視覺庫,基于Pytorch,GitHub 3000星
OpenCV 創始人 Gary Bradski 等人近期發表了一篇 Kornia 的綜述。Kornia 是一個基于 PyTorch 的可微分的計算機視覺庫,實現了可微的基礎計算機視覺算子和可微的數據增廣。該項目在 Github 上已經收獲了 3k 星。
無論在深度學習還是傳統的視覺處理方案中,最常用圖像處理庫就是 OpenCV 和 PIL 了。然而,因為 OpenCV 和 PIL 都是不可微的,所以這些處理都只可以作為圖像的預處理而無法通過觀察梯度的變化來對這些算子進行優化 (gradient-based optimization)。因此,Kornia 便應運而生。
- 論文鏈接:https://arxiv.org/pdf/2009.10521.pdf
- 項目鏈接:https://github.com/kornia/kornia
- 文檔鏈接:https://kornia.readthedocs.io/en/latest/index.html
Kornia 是一個基于 PyTorch 的可微分的計算機視覺 (differentiable computer vision) 開源庫,在 Github 上已經有了 3000 星。為了兼顧傳統視覺處理與深度學習的需求,Kornia 實現了:
- 可微的基礎計算機視覺算子。
- 可微的數據增廣(differentiable data augmentation)。
由于 Kornia 是基于 PyTorch 的,它同時會具備如下特性:
- 可微分性。所有算子的梯度都可以通過 PyTorch 的 AutoGrad 計算,并使用 PyTorch 的優化器(如:Adam)來優化。
- GPU/TPU 加速。除 CPU 外,Kornia 可以在 GPU 甚至 TPU 中進行運算。
- 批數據處理。同時處理大量數據來提高運行效率。
1.Kornia 可微計算機視覺
為了解決不同計算機視覺領域的問題,比如顏色轉換、底層圖像處理、圖像幾何變換、特征檢測等,Kornia 設計了如下圖的模塊。
值得一提的是,Kornia 不僅僅是將 OpenCV 的功能用 PyTorch 重新實現,它同時也將一些傳統視覺中不可微的操作可微化,譬如說裁切 (crop) 操作便是通過透視變換 (Perspective transform) 與仿射變換 (Affine transform) 實現的。
基于可微性,Kornia 中傳統的視覺方法也可以通過梯度下降的方法來進行優化。比如使用梯度下降的方法來實現圖像深度估計 (Depth Estimation):
詳細代碼可以參考 https://github.com/kornia/kornia-examples/blob/master/depth_estimation.ipynb
亦或是使用梯度下降的方法來實現圖像配準 (Image Registration):
詳細代碼可以參考 https://github.com/kornia/kornia-examples/blob/master/homography.ipynb
2.Kornia 可微數據增廣
深度學習中最常用的優化方法便是基于梯度的優化,但常用的數據增廣庫(如 TorchVision,Albumentations)并不具備可微性。為了更好地與深度學習相結合,Kornia 參考了 TorchVision 的 API 并實現了可微的數據增廣(DDA, Differentiable Data Augmentation)。目前,開發團隊也在持續開發更多的可微分的 2D 圖像與 3D Volume 的數據增廣,如下圖所示(RGB 3D Volume 很少見,實現與否將由社區驅動)。
由于 Kornia 是基于 PyTorch 開發而來的,那么數據增廣的邏輯便自然而然地整合進了 PyTorch 的網絡中,就像使用卷積層,池化層一樣。相似的,我們可以任意定義、保存、載入 Kornia 增廣模塊,并在任意設備(CPU/GPU/TPU)上運算。尤其在訓練中,如果你的 CPU 已經開始超負荷運行了,那么 Kornia 將會更大地提升你的訓練速度與 GPU 利用率。
同時, Kornia 的數據增廣方法也可以輕松地通過梯度來進行優化。下面的例子展示了如何使用 ColorJitter 來更新圖像與增廣參數,其中我們通過 nn.Parameter 定義了亮度 (brightness)、飽和度 (saturation)、對比度 (contrast)這三個可微的參數,以及通過 torch.tensor 定義色相 (hue)這一不可微的參數。從結果中,我們可以看到被大學習率(learning rate=1e+5)更新的圖像以及三個可微參數的變化。
3. 后話
可微的數據增廣乃至于計算機視覺在近幾年的社區中不斷被更多的人關注。近期的工作,例如 Faster AutoAugment,便是基于 Kornia 的可微性而來的針對自動數據增廣策略的優化方法。開發團隊表示,他們也希望自己的工作可以更多地應用于各種有潛力的項目。未來,他們將會加入更多的數據增廣操作、梯度估計方法,以及增加對 JIT 的支持。