OpenCV 3.0之后三年半,OpenCV 4.0出炉
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密集光流算法从opencv_contrib移到视频模块。
此外,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支持的一些框架:
- 咖啡
- TensorFlow
- 火炬
- 暗网
- ONNX交换格式的模型
目前OpenCV所支持的深度学习层级函数:
- ABSVAL
- AveragePooling
- BatchNormalization
- 级联
- 卷积(包括扩张卷积)
- 作物
- 反卷积,又称转置卷积或完全卷积
- DetectionOutput(SSD特定层)
- 退出
- Eltwise(+,*,max)
- 弄平
- FullyConnected
- LRN
- LSTM
- MaxPooling
- MaxUnpooling
- MVN
- NormalizeBBox(特定于SSD的层)
- 填充
- 置换
- 功率
- PReLU(包括具有特定通道斜率的ChannelPReLU)
- PriorBox(SSD特定层)
- RELU
- RNN
- 规模
- 转移
- 乙状结肠
- 切片
- SOFTMAX
- 分裂
- 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的FCN(语义分割网络)
- ENET(轻量级语义分割网络)
- 基于VGG的SSD(目标检测网络)
- 基于MobileNet的SSD(轻量级目标检测网络)
OpenCV 4.0发布地址:https://opencv.org/opencv-4-0-0.html