1. 程式人生 > >OpenCV3.3 DNN簡介

OpenCV3.3 DNN簡介

如今,在機器視覺領域,深度學習已經是最流行且增長最快的一個方向了。OpenCV自3.1版本其就在contrib中加入了DNN模組。到3.3版本時,將DNN模組由contrib提升到了正式程式碼塊中。在住倉庫中的位置為:https://github.com/opencv/opencv/tree/master/modules/dnn。同時相較於3.1版本,3.3版本對DNN做了很大改進!

該DNN模組除了libprotobuf,不依賴任何第三方庫;並且libprotobuf已經包含在了OpenCV的ThirdParty,安裝OpenCV時會一併安裝,很方便。

目前,該DNN模組支援載入訓練好的模型(即:這些模型需要實現在Caffe、TensorFlow、Torch/PyTorch等深度學習框架中提取訓練好),並執行前向傳播過程(即預測)。

支援的深度學習庫:

Caffe 1
TensorFlow
Torch/PyTorch
主要的層及函式:

AbsVal(caffe/layers/absval_layer.hpp這一層比較簡單:主要就是求絕對值)
AveragePooling(平均值池化)
BatchNormalization(就像啟用函式層、卷積層、全連線層、池化層一樣,BN也屬於網路的一層;在網路中間層資料做一個歸一化處理)
Concatenation(Caffe中通過Concatenation層,可以把多個的blobs連結成一個blob)
Convolution (including dilated convolution)
Crop
Deconvolution, a.k.a. transposed convolution or full convolution
DetectionOutput (SSD-specific layer)
Dropout
Eltwise (+, *, max)(caffe提供的按元素操作層。它支援3種基本操作:PROD按元素乘積;SUM按元素求和;MAX儲存最大元素 )
Flatten(Caffe中Flattening層是把一個輸入的大小為n * c * h * w變成一個簡單的向量,其大小為 n * (c*h*w) * 1 * 1)
FullyConnected
LRN(Local Response Normalization,caffe中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(Caffe中Slice layer 的作用是將bottom按照需要分解成多個tops)
Softmax(啟用函式)
Split(Caffe中Splitting層可以把一個輸入blob分離成多個輸出blobs)
TanH(啟用函式)
一些已經經過測試的網路:
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
例程:
https://github.com/opencv/opencv/tree/master/samples/dnn
--------------------- 
作者:guoyunfei20 
來源:CSDN 
原文:https://blog.csdn.net/guoyunfei20/article/details/78357242 
版權宣告:本文為博主原創文章,轉載請附上博文連結!