Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

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

2015 年 6 月,OpenCV 3.0 发布。时隔三年半,OpenCV 4.0 终于发布。至此,OpenCV 已经走过了近 18 个年头。

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 版本的发布已经过去三年多,近日 OpenCV 4.0 final 版发布,它进一步完善了核心接口,并添加了二维码检测器、ONNX 转换格式等新特点。

重要更新:

  • OpenCV 4.0 现在是一个 C++11 库,要求 C++11 兼容的编译器。所需的 CMake 至少是 3.5.1 版本。

  • 移除 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

  • Tensor Flow

  • Torch

  • Darknet

  • ONNX 交换格式的模型

目前 OpenCV 所支持的 深度学习 层级函数:

  • AbsVal

  • Average Pooling

  • Batch Normalization

  • 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

  • Max Pooling

  • 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 上计算)。

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

  • AlexNet

  • GoogLeNet v1 (也称为 Inception-5h)

  • ResNet-34/50/...

  • SqueezeNet v1.1

  • VGG -based FCN( 语义分割 网络)

  • ENet(轻量级 语义分割 网络)

  • VGG -based SSD (目标检测网络)

  • MobileNet-based SSD (轻量级目标检测网络)

OpenCV 4.0 发布地址:https://opencv.org/opencv-4-0-0.html

工程 OpenCV 开源库 GitHub
3
相关数据
英特尔 机构
深度学习 技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

可扩展标记语言 技术

可扩展标记语言,是一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。如何定义这些标记,既可以选择国际通用的标记语言,比如HTML,也可以使用像XML这样由相关人士自由决定的标记语言,这就是语言的可扩展性。XML是从标准通用标记语言中简化修改出来的

图像分割 技术

图像分割就是把图像分成若干个特定的、具有独特性质的区域并提出感兴趣目标的技术和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像索赋予相同的编号。

池化 技术

池化(Pooling)是卷积神经网络中的一个重要的概念,它实际上是一种形式的降采样。有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见的。它是将输入的图像划分为若干个矩形区域,对每个子区域输出最大值。直觉上,这种机制能够有效的原因在于,在发现一个特征之后,它的精确位置远不及它和其他特征的相对位置的关系重要。池化层会不断地减小数据的空间大小,因此参数的数量和计算量也会下降,这在一定程度上也控制了过拟合。通常来说,CNN的卷积层之间都会周期性地插入池化层。

Dropout 技术

神经网络训练中防止过拟合的一种技术

VGG 技术

2014年,牛津大学提出了另一种深度卷积网络VGG-Net,它相比于AlexNet有更小的卷积核和更深的层级。AlexNet前面几层用了11×11和5×5的卷积核以在图像上获取更大的感受野,而VGG采用更小的卷积核与更深的网络提升参数效率。VGG-Net 的泛化性能较好,常用于图像特征的抽取目标检测候选框生成等。VGG最大的问题就在于参数数量,VGG-19基本上是参数量最多的卷积网络架构。VGG-Net的参数主要出现在后面两个全连接层,每一层都有4096个神经元,可想而至这之间的参数会有多么庞大。

基准 技术

一种简单的模型或启发法,用作比较模型效果时的参考点。基准有助于模型开发者针对特定问题量化最低预期效果。