
關於作者:
Edgar Riba 是 IRI – Institut de Robòtica i Informàtica Industrial,CSIC-UPC 的研究科學家。巴塞羅那自治大學計算機視覺中心的博士候選人,OpenCV.org 技術委員會成員。他是 Kornia 的建立者,由 Gary Bradski 指導,目前是專案負責人,負責管理主要庫活動和核心開發。

什麼是 Kornia?Kornia [1, 2] 可以定義為一個用於 PyTorch [3] 的計算機視覺庫,其靈感來自 OpenCV 並且具有強大的 GPU 支援。Kornia 允許使用者像使用原生 PyTorch 一樣編寫程式碼,為直接在張量上計算的視覺演算法提供高階介面。此外,Kornia 繼承了 PyTorch 的一些主要功能,例如高效能環境,可輕鬆訪問自動微分、在不同裝置(CPU、GPU 或張量處理單元 - TPU)上執行模型、預設並行程式設計、用於跨多個計算節點的多程序並行的通訊原語以及可用於生產的程式碼。

可微分。任何可以定義為有向無環圖 (DAG) 結構的影像處理演算法都可以整合到神經網路中,並且可以在訓練期間進行最佳化,利用反向模式自動微分,透過反向傳播計算梯度。在實踐中,這意味著計算機視覺函式是運算子,可以作為神經網路中的層放置,以便透過反向傳播訓練它們。
透明 API。庫設計中的一個關鍵組成部分是其輕鬆的方式,可以以最小的努力將硬體加速無縫地新增到您的程式中。庫 API 與輸入源裝置無關,這意味著演算法可以在多種裝置型別(例如 CPU、GPU 或最近推出的 TPU)上執行。
並行程式設計。批處理是另一個重要功能,它能夠預設使用資料並行來執行視覺運算子。運算子的假設是接收 N 通道影像張量作為輸入批次,這與具有單個 1-3 通道影像的標準視覺庫相反。因此,可以使用 Kornia 以直接的方式處理多光譜、高光譜或體積影像。
分散式。支援跨多個計算節點的通訊原語,這些節點在本地或雲端的一組或多組機器上執行。庫設計允許使用者在不同的分散式系統中執行他們的應用程式,甚至能夠以有效的方式處理大型視覺管道。
生產。從 v1.0.0 版本開始,PyTorch 具有序列化和最佳化模型以用於生產目的的功能。基於其即時 (JIT) 編譯器,PyTorch 跟蹤模型,在執行時建立 TorchScript 程式,以便在使用核心融合進行更快推理的獨立 C++ 程式中執行。這使得我們的庫也非常適合內建視覺產品。
Kornia 旨在作為 OpenCV 的重新實現,用於研究目的,從某種意義上說,它模仿了一些主要功能,並添加了透過不同運算子反向傳播的能力。但是,請注意,Kornia 並不旨在替代 OpenCV,因為它沒有針對生產目的進行最佳化,也沒有在嵌入式裝置中實現高效能。即使該專案得到了 OpenCV.org 的支援,短期內也沒有任何將兩個專案合併的形式的意圖。Kornia 可以理解為一組用於訓練神經網路的工具,這些工具稍後可使用其他最佳化框架在生產中使用。
庫結構
庫的內部結構旨在涵蓋不同的計算機視覺領域,包括顏色轉換、低階影像處理、幾何變換以及一些用於訓練的實用程式,例如特定的損失函式、不同框架之間的資料佈局轉換或輕鬆視覺化影像和除錯模型的功能訓練期間。

| 元件 | 描述 |
| kornia | 一個類似 OpenCV 的可微分計算機視覺庫,具有強大的 GPU 支援 |
| kornia.augmentation | 一個在 GPU 上執行資料增強的模組 |
| kornia.color | 一組執行顏色空間轉換的例程 |
| kornia.contrib | 使用者貢獻和實驗運算子的彙編 |
| kornia.enhance | 一個執行歸一化和強度變換的模組 |
| kornia.feature | 一個執行特徵檢測的模組 |
| kornia.filters | 一個執行影像濾波和邊緣檢測的模組 |
| kornia.geometry | 一個幾何計算機視覺庫,用於使用不同的相機模型執行影像變換、3D 線性代數和轉換 |
| kornia.losses | 一組損失函式,用於解決不同的視覺任務 |
| kornia.utils | 影像到張量實用程式以及視覺問題的指標 |
入門
Kornia 在 GitHub [4] 上公開提供,並使用 Apache License 2.0,並且可以安裝在任何 Linux、MacOS 或 Windows 作業系統中,並將 PyTorch 作為唯一的依賴項,透過 Python 包索引 (PyPI) 使用以下命令
pip install kornia
開始使用 Kornia 和 OpenCV
import cv2
import numpy as np
import torch
import kornia as K
img: np.ndarray = cv2.imread(“bruce.png”, cv2.IMREAD_COLOR) # HxWx3
img_t: torch.Tensor = K.image_to_tensor(img) # 1x3xHxW
Img_out: torch.Tensor = K.warp_perspective(img_t, H, (h, w)) # 1x3xHxW

Kornia v0.4 版本
Kornia 團隊很高興地宣佈釋出 v0.4 版本。
我們釋出了 Kornia 的新版本,其中包含用於處理**3D 增廣**和**體積資料**、**區域性特徵匹配**、**單應性**和**極幾何**的不同功能。
簡而言之,我們列出了以下新功能
- 支援 PyTorch v1.6.0。
- 區域性描述符匹配、單應性和極幾何 API。
- 3D 增廣和用於處理體積資料的低階 API。
區域性特徵匹配
我們包含了一個kornia.feature.matching API,用於執行區域性描述符匹配,例如最近鄰 (NN) 的經典版本和派生版本。

import torch
import kornia as K
desc1 = torch.rand(2500, 128)
desc2 = torch.rand(2500, 128)
dists, idxs = K.feature.matching.match_nn(desc1, desc2) # 2500 / 2500x2
單應性和極幾何
我們還引入了kornia.geometry.homography,其中包含用於處理單應性和基於 DLT 公式和迭代重加權最小二乘 (IRWLS) 的可微估計器的不同功能。

import torch
import kornia as K
pts1 = torch.rand(1, 8, 2)
pts2 = torch.rand(1, 8, 2)
H = K.find_homography_dlt(pts1, pts2, weights=torch.rand(1, 8)) # 1x3x3
此外,我們已將一些現有的演算法從opencv.sfm 移植到 PyTorch,位於kornia.geometry.epipolar 下,其中包含用於處理**基礎**、**本質**或**投影**矩陣以及**三角測量**方法的不同功能,這些方法對運動結構問題很有用。
3D 增廣和體積
我們使用一系列運算子擴充套件了kornia.augmentaion,以對體積資料執行 3D 增廣。

在此版本中,我們包含了以下第一組幾何 3D 增廣方法
- RandomDepthicalFlip3D(沿深度軸)
- RandomVerticalFlip3D(沿高度軸)
- RandomHorizontalFlip3D(沿寬度軸)
- RandomRotation3D
- RandomAffine3D
3D 增廣的 API 與 2D 影像增廣的 API 相同
import torch
import kornia as K
x = torch.eye(3).repeat(3, 1, 1)
aug = K.augmentation.RandomVerticalFlip3D(p=1.0)
print(aug(x))
tensor([[[[[0., 0., 1.],
[0., 1., 0.],
[1., 0., 0.]],
<BLANKLINE>
[[0., 0., 1.],
[0., 1., 0.],
[1., 0., 0.]],
<BLANKLINE>
[[0., 0., 1.],
[0., 1., 0.],
[1., 0., 0.]]]]])
最後,我們還引入了一個低階 API 來執行 4D 特徵變換kornia.warp_projective 並擴充套件濾波運算子以支援 3D 核心kornia.filter3D。
更多 2D 運算子
我們還根據論文AutoAugment:從資料中學習增廣策略擴充套件了 2D 影像增廣列表。
- Solarize
- Posterize
- Sharpness
- Equalize
- RandomSolarize
- RandomPosterize
- RandomShaprness
- RandomEqualize
請隨時檢視GitHub 上的釋出說明,以瞭解新的庫功能並獲取更多詳細資訊。
祝您程式設計愉快 🙂
#計算機視覺 #人工智慧 #深度學習 #pytorch
參考文獻
[1] Edgar Riba、Dmytro Mishkin、Dani Ponsa、Rublee Ethan 和 Gary Bradski。Kornia:一個用於 pytorch 的開源可微分計算機視覺庫。在計算機視覺應用冬季會議,2020 年。
[2] Edgar Riba、Dmytro Mishkin、Jian Shi、Dani Ponsa、Francesc Moreno-Noguer 和 Gary Bradski。關於 Kornia 的調查:一個用於 pytorch 的開源可微分計算機視覺庫。2020 年。
[3] Adam Paszke、Sam Gross、Soumith Chintala、Gregory Chanan、Edward Yang、Zachary DeVito、Zeming Lin、Alban Desmaison、Luca Antiga 和 Adam Lerer。PyTorch 中的自動微分。在NIPS-W,2017 年。
[4]Kornia GitHub:https://github.com/kornia/kornia






