1. 程式人生 > >OpenCV 4.0新特性合集

OpenCV 4.0新特性合集

Summary:一文讀懂OpenCV 4.0 所有新特性

Author:Amusi

Date:2018-11-28

微信公眾號:CVer

github:https://github.com/amusi

知乎專欄:https://zhuanlan.zhihu.com/c_172507674

文章目錄


距離OpenCV 3.0釋出已逾三年半了,終於在2018-11-20,
OpenCV 4.0正式版
強勢來襲!至此開始OPenCV 4.x的王朝!

其實為了打磨OpenCV 4.0正式版,OpenCV曾推出過OpenCV 4.0-alphaOpenCV 4.0 Beta版本。

OpenCV 4.0-alpha 新特性

https://opencv.org/opencv-4-0-0-alpha.html

OpenCV 4.0 alpha包括3.4分支的所有最新改進,優化和 Bug修復。尤其是:

  • ONNX解析器已新增到OpenCV DNN模組中。它支援各種分類網路,如AlexNet,Inception v2,Resnet,VGG等。還支援 tiny YOLO v2物件檢測網路。

  • 其他一些顯著的DNN改進:

    • Mask RCNN 支援和示例
    • Faster R-CNN:使用Intel Inference Engine(英特爾OpenVINO的一部分)加速
    • 基於OpenCL backend的幾個穩定性改進。
  • 快速QR碼檢測器(detector)(Core i5 desktop的~80FPS @ 640x480解析度)。官方計劃在OpenCV 4.0正式版中新增QR碼解碼器(decoder),以便有一個完整的解決方案。

  • 通過所謂的“wide universal intrinsics”不斷擴充套件SSE4,AVX2和NEON優化核心集。

此外,OpenCV 4.0 alpha包含一些獨有的功能,例如:

  • OpenCV現在是基於C ++ 11庫,它需要符合C ++ 11標準的編譯器。因此,預設情況下可以使用一些很好的功能,例如parallel_for和lambda函式,方便迭代cv :: Mat,初始化cv :: Mat,通過列出它的元素等。

  • 標準的std :: string和std :: shared_ptr取代了手工製作的cv :: String和cv :: Ptr。我們的parallel_for現在可以使用std :: threads pool 作為後端。

  • OpenCV 1.x的舊版C API(使用CvMat,IplImage等)被部分排除在外;cleanup 應該主要由OpenCV 4.0 正式版完成。

  • 添加了基本的FP(float point)16支援(添加了新的CV_16F型別)。
    CPU和GPU加速的KinFu實時三維密集重建演算法已包含在opencv_contrib中。

  • HPX parallel backend(感謝Jakub Golinowski)

  • 新的chessboard detector(棋盤探測器)(感謝Alexander Duda)

總的來說,OpenCV 4.0 alpha版本包括85個補丁,包括來自3.4分支的28個大規模合併請求。

OpenCV 4.0-beta 新特性

https://opencv.org/opencv-4-0-0-beta.html

OpenCV 4.0 Beta 包括許多新功能和增強功能。除了這個新的庫,還有新的開源工具OpenVINO™(Open Visual Inference and Neural Network Optimization),可以幫助幫助快速跟蹤高效能運算機視覺開發和深度學習推理。

OpenCV 4.0 Beta包括29個新補丁,包括自OpenCV 4.0 alpha 以來3.4分支的大規模合併:

  • ONNX *(Open Neural Network Exchange)importer 已得到進一步改進,以支援更多擴充套件。

  • OpenCV DNN示例object_detection.py已經改進,可以填寫正確的模型引數,因此現在使用起來要容易得多。

  • G-API(Graph API) - 超高效影象處理 pipeline 引擎已整合為opencv_gapi模組

  • 快速QR碼解碼器(decoder),該算是是基於免費的QUirc(https://github.com/dlbeer/quirc)庫,所以現在我們有一個完整的QR碼檢測和解碼實現(執行~20-80FPS @ 640x480解析度)。

  • 使用“wide universal intrinsics”為AVX2加速了超過60個核心的18個功能。

  • 針對iGPU加速了Kinect Fusion演算法,在高解析度 volume(512x512x512)上實現了並行CPU版本的3倍加速。

OpenCV 4.0-rc 新特性

https://opencv.org/opencv-4-0-0-rc.html

OpenCV 4.0-rc 相比OpenCV 4.0 beta新增了約60個補丁。

  • 將實驗中的Vulkan backend新增到DNN模組

  • opencv_stitching模組介面被重構

  • 實現了更加精確的相機鏡頭校正演算法

  • 核心模組的部分函式(即以XML / YML / JSON格式儲存資料到硬碟)已在C ++中重寫,使得在讀取FileStorage時佔用的記憶體較少。 C語言風格的API(CvFileStorage)已被刪除

  • 擴充套件了Graph API模組,使其獲得初始異構支援,OpenCL支援,文件也更加完善,並支援獨立構建它

  • 刪除了以下模組的C語言風格API:photo, video, imgcodecs, videoio

  • 刪除了videoio 與 highgui 模組中過時的後端支援,包括: QuickTime, QTKit, Unicap, Video for Windows, libv4l, DC1394_V1, Carbon

-shape, superres, videostab, viz 模組和 TVL1 光流演算法被移動到opencv_contrib

  • DIS 光流演算法從opencv_contrib被移動到main repository

  • 包含OpenCV 3.4版本的一些最新改進,比如:libpng更新 (安全修復), 支援XCode 10, 支援Turing GPU, 許多優化和Bug 修復

OpenCV 4.0 正式版新特性

https://opencv.org/opencv-4-0-0.html

  • OpenCV現在基於C++ 11庫,需要符合C++ 11 標準的編譯器。所需的最低CMake版本已提升至3.5.1。

  • 很多來自OpenCV 1.x的C API已被刪除。

  • 在core模組中的部分功能(如在XML,YAML或JSON中儲存和載入結構化資料)已在C++中完全重新實現,並且也刪除了C API。

  • 添加了新的模組G-API,它可以作為非常有效的基於圖形的影象處理 pipeline的引擎。

  • dnn模組使用OpenVINO™工具包R4中的Deep Learning Deployment Toolkit進行了更新。請參閱指南如何構建和使用支援DLDT的OpenCV。

  • dnn模組現在包括實驗性Vulkan backend,並支援ONNX格式的網路。

  • Kinect Fusion演算法已針對CPU和GPU(OpenCL)進行實現和優化

  • QR碼檢測器和解碼器已新增到objdetect模組中

  • 非常高效且高質量的DIS密集光流演算法已從opencv_contrib轉移到video模組。

  • 更多細節可以在之前的宣佈中找到:4.0-alpha4.0-beta4.0-rc更新日誌

OpenCV 4.0 更新日誌

https://github.com/opencv/opencv/wiki/ChangeLog#version400

OpenCV 4.0-alpha:2018年9月

OpenCV 4.0-beta:2018年10月

OpenCV 4.0-final:2018年11月

下面是介紹OpenCV 4.0新特性:

  • 刪除大量OpenCV 1.x 遺留的C語言風格的API介面,主要模組是objdetect, photo, video, videoio, imgcodecs, calib3d。

  • 在core模組中的部分函式(在XML,YAML或JSON中儲存和載入結構化資料)已用C++ 重新實現,同時刪除了C 風格的API。 目前,base64支援尚未完成(僅支援base64編碼的ML和YAML載入,還不支援編碼)。現在,儲存在FileNode中的序列的隨機訪問是O(N)時間複雜度; 使用cv::FileNodeIterator可以更快地順序訪問。另一方面,載入FileStorage比以前少了3-6倍的記憶體!

  • OpenCV 4.0 現在是基於C++ 11,所以編譯OpenCV時需要支援C++ 11 的編譯器。請注意,通過將-DENABLE_CXX11 = ON標誌傳遞給CMake,OpenCV 3.x也可以構建為C ++ 11庫。 現在這已經變成必選項,因此不需要ON標誌。

    • 感謝擴充套件的C++ 11標準庫,我們可以擺脫自己實現的cv::String和cv::Ptr。 現在cv::String == std::string和cv::Ptr是std::shared_ptr之上的thin warpper。 另外,在Linux/BSD for cv :: parallel_for_上,我們現在使用std::thread而不是pthreads。
  • DNN模組的改進:

    • 增加Mask-RCNN模型的支援。其使用指南:TensorFlow-Object-Detection-API並參考Python示例

    • 整合ONNX解析器(parser)。支援多個主流的分類網路。 支援YOLO 目標檢測網路(YOLO的ONNX版本缺少一些提供矩形列表的卷積層)

    • 為了進一步優化DNN模組的效能,引入Intel DLDT
      順便說一下,Intel DLDT 近期已經開源,參考這份指南可知道如何構建和使用帶有DLDT的OpenCV

    • API修改:預設情況下,blobFromImage方法不會交換Red和Blue通道,也不會對輸入影象進行裁剪。這個API的修改已經新增到OpenCV 3.4分支。

    • 處於實驗中的Vulkan backen已經新增到不支援OpenCL的平臺:https://github.com/opencv/opencv/pull/12703

    • 為OpenCV支援的最主流的深度學習網路新增快捷方式(shotcuts)。 你可以指定模型的別名,以跳過預處理引數甚至模型的路徑!比如:

python object_detection.py --model opencv_face_detector.caffemodel --config opencv_face_detector.prototxt --mean 104 177 123 --width 300 --height 300

你也可以輸入:

python object_detection.py opencv_fd
  • 修復了在AMD和NVIDIA GPUs上的OpenCL加速。 現在你可以為沒有其他環境變數的模型啟用DNN_TARGET_OPENCL。請注意,DNN_TARGET_OPENCL_FP16僅在英特爾GPU上進行測試,因此仍需要額外的標誌

  • 添加了全新的opencv_gapi模組。 它是非常有效的影象處理的引擎,基於處理圖的lazy評估和動態構造(因此名稱為Graph API或G-API)。 有關詳細資訊,請參見Graph API(G-API

  • 效能優化

    • OpenCV中的幾百個基本核心已經使用“廣泛通用內在函式(intrinsics)”進行了重寫。這些內在函式對映到SSE2,SSE4,AVX2,NEON或VSX內在函式,具體取決於目標平臺和編譯標誌。它應該轉化為明顯更好的效能,即使對於一些已經優化的功能也是如此。例如,如果使用CPU_BASELINE = AVX2 CMake標誌配置和編譯OpenCV,則可以為某些影象處理操作提供額外15-30%的速度提升。通過OpenCV 4.0 gold,我們計劃將更多核心轉換為此類內在函式,並採用我們的動態排程機制,因此在x64平臺上,AVX2優化核心始終內建,如果實際硬體支援此類指令,則可以在執行中進行選擇(無需更改CPU_BASELINE)。

    • 隨著IPPICV元件升級,增加了對IPP 2019的支援

  • QR 檢測器和解碼器已經與現有的sample一起新增到opencv/objdetect模組中。目前,解碼器構建在QUirc庫之上(我們將這個snapshot放入opencv)

  • 主流的Kinect Fusion演算法已經實現,針對CPU和GPU(OpenCL)進行優化,並整合到opencv_contrib/rgbd模組中。 為了使現有sample有效,我們在opencv/videoio模組中更新了Kinect 2支援。在OpenCV 4.0 beta版本中,iGPU的程式碼已經加速,在高解析度的情況下(512x512x512),效能提升了3倍

  • 非常高效且高質量的DIS密集光流演算法已經從opencv_contrib轉移到opencv的video 模組。詳見示例

  • 同時,較慢的TV L1光流演算法已從opencv轉移到opencv_contrib

Reference

https://opencv.org/releases.html

https://opencv.org/opencv-4-0-0.html

https://opencv.org/opencv-4-0-0-alpha.html

https://opencv.org/opencv-4-0-0-beta.html

https://opencv.org/opencv-4-0-0-rc.html