在OpenCV3.3版本发布中把DNN模块从扩展模块移到了OpenCV正式发布模块中,当前DNN模块最早来自Tiny-dnn,可以加载预先训练好的Caffe模型数据,OpenCV做了近一步扩展支持所有主流的深度学习框架训练生成与导出模型数据加载。
按照官方介绍,DNN现在有下面几点特性:
无需任何依赖
新加入的DNN模块不需要任何依赖,除了protobuf……而protobuf被加入到OpenCV的thirdparty了。简直是贴心至极有没有?
支持以下框架
- Caffe 1
- TensorFlow
- Torch/PyTorch
虽然还没有支持caffe2,不过我现在就已经很满足了。
支持很多种类的层
- 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
- ……
还有很多,就不一一列举了, 估计绝大部分人也用不上。。。
以下网络经过了测试且可用
- AlexNet
- GoogLeNet v1 (also referred to as Inception-5h)
- ResNet-34/50/…
- SqueezeNet v1.1
- VGG-based FCN (semantical segmentation network)
- ENet (lightweight semantical segmentation network)
- VGG-based SSD (object detection network)
- MobileNet-based SSD (light-weight object detection network)
但是现在OpenCV貌似只能加载训练好的网络,caffe的,TF的,Torch的,只能训练好之后拿来用,但是不能自己训练网络。
现在看来加入DNN模块算是众望所归,虽然有点晚,虽然功能还不够完善,但是仍然值得期待。
以GoogleNet Caffe模型举例说明
OpenCV通过支持加载这些预先训练好的模型,实现图像分类、对象检测、语义分割、风格迁移等功能。支持Android/iOS等移动端平台开发。下面我们就以OpenCV3.3 使用Caffe的GoogleNet数据模型为例,实现对图像常见分类,OpenCV3.3的DNN模块使用的模型支持1000种常见图像分类、googlenet深度学习网络模型是2014图像分类比赛的冠军、首先是下载相关的数据模型文件
- bvlc_googlenet.caffemodel
- bvlc_googlenet.prototxt
其中:prototxt定义了网络结构,caffemodel是训练后的权重。
文本文件只有你下载了OpenCV3.3解压缩之后就会在对应的目录发现。模型文件需要从以下地址下载即可: http://dl.caffe.berkeleyvision.org/bvlc_googlenet.caffemodel