OpenCV 3.0以後三年半,OpenCV 4.0出爐

機器之心編輯,參與:機器之心編輯部。html

2015 年 6 月,OpenCV 3.0 發佈。時隔三年半,OpenCV 4.0 終於發佈。至此,OpenCV 已經走過了近 18 個年頭。git

OpenCV 是英特爾開源的跨平臺計算機視覺庫。也就是說,它是一套包含從圖像預處理到預訓練模型調用等大量視覺 API 的庫,並能夠處理圖像識別、目標檢測、圖像分割和行人再識別等主流視覺任務。OpenCV 最顯著的特色是它提供了整套流程的工具,所以咱們根本不須要了解各個模型的原理就能一個個 API 構建視覺任務。github

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 版本的發佈已通過去三年多,近日 OpenCV 4.0 final 版發佈,它進一步完善了核心接口,並添加了二維碼檢測器、ONNX 轉換格式等新特色。網絡

重要更新:框架

  • OpenCV 4.0 如今是一個 C++11 庫,要求 C++11 兼容的編譯器。所需的 CMake 至少是 3.5.1 版本。ide

  • 移除 OpenCV 1.x 中的大量 C API。函數

  • core 模塊中的 Persistence(用於存儲和加載 XML、YAML 或 JSON 格式的結構化數據)能夠徹底使用 C++ 來從新實現,所以這裏的 C API 也被移除。工具

  • 添加了新模塊 G-API,它可做爲基於圖的高效圖像處理流程。

  • dnn 模塊包括實驗用 Vulkan 後端,且支持 ONNX 格式的網絡。

  • 實現了流行的 Kinect Fusion 算法,且爲 CPU 和 GPU (OpenCL) 進行優化。

  • objdetect 模塊中添加了二維碼檢測器和解碼器。

  • 將高效、高質量的 DIS dense optical flow 算法從 opencv_contrib 移到 video 模塊。

此外,OpenCV 4.0 支持 Mask-RCNN 模型,性能也有所提高,圖像處理操做可實現 15%-30% 的速度提高。

OpenCV 與深度學習

在 OpenCV 4.0 的更新中,它強化了 DNN 模塊並添加支持 ONNX 交換格式的神經網絡,這一切都代表 OpenCV 很是注重其與深度學習之間的關係。其實自從 OpenCV 3.1 以來,它就包含了能實現深度網絡前向傳播的 DNN 模塊,這些深度網絡通常都由 Caffe 等深度學習框架預訓練而成。在 OpenCV 3.3 中,DNN 模塊從 opencv_contrib 移到了核心代碼庫,並取得了顯著的加速。

更重要的是除了 libprotobuf 之外,OpenCV 中的 DNN 模塊不包含額外的依賴項,並且如今 libprotobuf 已經包含到了 OpenCV 中。如下是目前 OpenCV 支持的一些框架:

  • Caffe

  • TensorFlow

  • 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

  • LSTM

  • 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 後端。

你能夠在這裏找到最新的基準結果:github.com/opencv/open…

單張圖像前向傳播的中位最佳時間(以毫秒爲單位,基於 CPU 在 float32 上計算)。

如下網絡已經通過測試並證明可行:

  • AlexNet

  • GoogLeNet v1 (也稱爲 Inception-5h)

  • ResNet-34/50/...

  • SqueezeNet v1.1

  • VGG-based FCN(語義分割網絡)

  • ENet(輕量級語義分割網絡)

  • VGG-based SSD(目標檢測網絡)

  • MobileNet-based SSD(輕量級目標檢測網絡)

OpenCV 4.0 發佈地址: opencv.org/opencv-4-0-…
相關文章
相關標籤/搜索