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

单张图像前向传播的中位最佳时间(以毫秒为单位,基于 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

原文发布于微信公众号 - 机器之心(almosthuman2014)

原文发表时间:2018-11-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏锦小年的博客

Nilearn学习笔记1-Nilearn库介绍

nilearn是一个将机器学习、模式识别、多变量分析等技术应用于神经影像数据的应用中,能完成多体素模式分析(MVPA:mutli-voxel pattern a...

2445
来自专栏量子位

深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目

问耕 编译自 Source Dexter 量子位 出品 | 公众号 QbitAI 作者简介:akshay pai,数据科学工程师,热爱研究机器学习问题。Sour...

5609
来自专栏FreeBuf

Kaggle:一套完整的网站流量预测模型

今天给大家推荐的是一个名叫Kaggle的网站流量预测项目,本项目采用Python语言开发,可以给大家的流量预测建模提供一些思路。 ? 数据模型 Kaggle的训...

4646
来自专栏数据小魔方

excel数据分析库系列|抽样设计

今天开始跟大家分享excel数据分析库系列——抽样设计! 作为微软excel中一直以来隐藏的最深最上档次的功能组件,excel数据分析工具库需要用户手动调用并开...

3597
来自专栏吉浦迅科技

如何在Jetson TX2上用Python捕获摄像头影像,并用Caffe进行推理

本文转载自JK Jung的帖子:https://jkjung-avt.github.io/tx2-camera-caffe/ 如果有侵犯到贴主利益,请立刻跟我联...

5695
来自专栏机器学习算法与Python学习

KNN算法实战-改进约会网站配对效果

kNN实战之改进约会网站配对效果 引言 简单的说,KNN算法采用测量不同特征值之间的距离方法进行分类。工作原理:存在一个样本数据集,即训练数据集,并且样本集中每...

56610
来自专栏编程

基于micropython的数字滤波器

刚参加了昨天的硕士研究生考试,专业课考的信号与系统,报考学校今年出题出的有点偏,不是题型偏而是考察知识点有明显的偏重,简单说考纲里所罗列的考点最多只考了百分之三...

2866
来自专栏玉树芝兰

如何用Python和深度神经网络识别图像?

(由于微信公众号外部链接的限制,文中的部分链接可能无法正确打开。如有需要,请点击文末的“阅读原文”按钮,访问可以正常显示外链的版本。)

1762
来自专栏机器之心

资源 | 谷歌全attention机器翻译模型Transformer的TensorFlow实现

选自GitHub 机器之心编译 参与:黄小天、Smith 谷歌前不久在 arXiv 上发表论文《Attention Is All You Need》,提出一种完...

49511
来自专栏专知

基于深度学习的文本生成【附217页PPT下载】

【导读】文本生成是许多NLP应用程序的关键组件。在数据驱动方法中,它用语言表达知识库的内容或从丰富的语言产生自然英语句子表示,例如依赖树或抽象含义表示。另一方面...

2015

扫码关注云+社区

领取腾讯云代金券