OpenCV 3.0之後三年半,OpenCV 4.0出爐
OpenCV是英特爾開源的跨平臺計算機視覺庫。也就是說,它是一套包含從影象預處理到預訓練模型呼叫等大量視覺 API 的庫,並可以處理影象識別、目標檢測、影象分割和行人再識別等主流視覺任務。OpenCV最顯著的特點是它提供了整套流程的工具,因此我們根本不需要了解各個模型的原理就能一個個 API 構建視覺任務。
OpenCV使用 BSD 許可證,因此對研究和商業用途均免費。它具備 C++、Python 和 Java 介面,支援 Windows、Linux、Mac OS、iOS 和 Android 系統。OpenCV旨在提高計算效率,專注於實時應用。它使用優化的 C/C++寫成,能夠利用多核處理。
此外,在 OpenCL 的加持下,OpenCV可以利用底層異構計算平臺的硬體加速。它的 GitHub 頁面中有一個「open_model_zoo」資源庫,包含了大量的計算機視覺預訓練模型,並提供下載方法,有助於加速開發和產品部署過程。OpenCV應用廣泛,目前在全世界約有 4.7 萬用戶,下載量約為 1400 萬。
可以說OpenCV是 CV 領域開發者與研究者的必備工具包,Mask-RCNN 等很多開源專案都依賴於這個工具包。現在距離 3.0 版本的釋出已經過去三年多,近日OpenCV4.0 final 版釋出,它進一步完善了核心介面,並添加了二維碼檢測器、ONNX 轉換格式等新特點。
重要更新:
-
OpenCV4.0 現在是一個 C++11 庫,要求 C++11 相容的編譯器。所需的 CMake 至少是 3.5.1 版本。
-
移除OpenCV1.x 中的大量 C API。
-
core 模組中的 Persistence(用於儲存和載入XML、YAML 或 JSON 格式的結構化資料)可以完全使用 C++ 來重新實現,因此這裡的 C API 也被移除。
-
添加了新模組 G-API,它可作為基於圖的高效影象處理流程。
-
dnn 模組包括實驗用 Vulkan 後端,且支援 ONNX 格式的網路。
-
objdetect 模組中添加了二維碼檢測器和解碼器。
-
將高效、高質量的 DIS dense optical flow 演算法從 opencv_contrib 移到 video 模組。
此外,OpenCV4.0 支援 Mask-RCNN 模型,效能也有所提升,影象處理操作可實現 15%-30% 的速度提升。
OpenCV與深度學習
在OpenCV4.0 的更新中,它強化了 DNN 模組並新增支援 ONNX 交換格式的神經網路,這一切都表明OpenCV非常注重其與深度學習之間的關係。其實自從OpenCV3.1 以來,它就包含了能實現深度網路前向傳播的 DNN 模組,這些深度網路一般都由 Caffe 等深度學習框架預訓練而成。在OpenCV3.3 中,DNN 模組從 opencv_contrib 移到了核心程式碼庫,並取得了顯著的加速。
更重要的是除了 libprotobuf 以外,OpenCV中的 DNN 模組不包含額外的依賴項,而且現在 libprotobuf 已經包含到了OpenCV中。以下是目前OpenCV支援的一些框架:
-
Caffe
-
Torch
-
Darknet
-
ONNX 交換格式的模型
目前OpenCV所支援的深度學習層級函式:
-
AbsVal
-
AveragePooling
-
BatchNormalization
-
Concatenation
-
Convolution (including dilated convolution)
-
Crop
-
Deconvolution, a.k.a. transposed convolution or full convolution
-
DetectionOutput (SSD-specific layer)
-
Dropout
-
Eltwise (+, *, max)
-
Flatten
-
FullyConnected
-
LRN
-
MaxPooling
-
MaxUnpooling
-
MVN
-
NormalizeBBox (SSD-specific layer)
-
Padding
-
Permute
-
Power
-
PReLU (including ChannelPReLU with channel-specific slopes)
-
PriorBox (SSD-specific layer)
-
ReLU
-
RNN
-
Scale
-
Shift
-
Sigmoid
-
Slice
-
Softmax
-
Split
-
TanH
對於對效能要求很高的神經網路層,這個 DNN 模組包括 SSE、AVX、AVX2 和 NEON 等底層加速庫,且還有持續優化中的 Halide 後端。
你可以在這裡找到最新的基準結果:https://github.com/opencv/opencv/wiki/DNN-Efficiency
單張影象前向傳播的中位最佳時間(以毫秒為單位,基於 CPU 在 float32 上計算)。
以下網路已經經過測試並證實可行:
-
GoogLeNetv1 (也稱為 Inception-5h)
-
ResNet-34/50/...
-
SqueezeNet v1.1
-
VGG-based FCN(語義分割網路)
-
ENet(輕量級語義分割網路)
-
VGG-basedSSD(目標檢測網路)
-
MobileNet-basedSSD(輕量級目標檢測網路)
OpenCV4.0 釋出地址:https://opencv.org/opencv-4-0-0.html