32

OpenCV 3.0之后三年半,OpenCV 4.0出炉

 5 years ago
source link: https://www.jiqizhixin.com/articles/2018-11-21-11?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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 万。

j2YV3ej.png!web

可以说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 格式的网络。

  • 实现了流行的 Kinect Fusion 算法,且为 CPU 和 GPU (OpenCL) 进行优化。

  • 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

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

你可以在这里找到最新的基准结果:https://github.com/opencv/opencv/wiki/DNN-Efficiency

fUVbiqU.png!web

单张图像前向传播的中位最佳时间(以毫秒为单位,基于 CPU 在 float32 上计算)。

以下网络已经经过测试并证实可行:

  • AlexNet

  • 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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK