1.深度学习网络模型
(1)DNN(Deep Neural Network,深度神经网络)
(2)RNN(Recurrent Neural Network,循环神经网络)
(3)CNN(Convolution Neural Network,卷积神经网络)
主要应用于:语音识别,机器翻译,生成图像描述;
主要你应用于:图像分类,检索;目标检测;目标分割;人脸识别;
2.现在主流的深度学习框架
(1)Google的开源框架TensorFlow:使用C++语言开发的开源数学计算软件,使用数据流图的形式进行计算。并且现在TensorFlow还集成了Keras框架,搭建框架效率较高;
(2)Caffe框架:由贾扬清开发的,Convolutional Architecturefor Fast Feature Embedding,是一个清晰而高效的开源深度学习框架。
(3)Theano:Theano的核心是一个数学表达式的编译器,它知道如何获取你的结构,并使之成为一个使用numpy、高效本地库的高效代码,如BLAS和本地代码(C++)在CPU或GPU上尽可能快地运行.
(4)MXNet:MXNet的主要作者是李沐,如今成了亚马逊的官方框架,有着非常好的分布式支持,而且性能特别好,占用显存低,同时其开发的语言接口不仅仅有Python和C++,还有R,Matlab,Scala,JavaScript,等等.
(5)Torch:Torch是一个有大量机器学习算法支持的科学计算框架,Facebook开源了大量Torch的深度学习模块和扩展。Torch的特点在于特别灵活,但是另一个特殊之处是采用了编程语言Lua,在深度学习大部分以Python为编程语言的大环境之下.
(6)Pytorch:PyTorch的前身便是Torch,其底层和Torch框架一样,但是使用Python重新写了很多内容,不仅更加灵活,支持动态图,而且提供了Python接口。它是由Torch7团队开发,是一个以Python优先的深度学习框架,不仅能够实现强大的GPU加速,同时还支持动态神经网络.
3.训练模型保存的文件名格式
神经网络、深度学习和机器学习模型文件后缀名:
ONNX (.onnx, .pb, .pbtxt)
Keras (.h5, .keras)
CoreML (.mlmodel)
Caffe2 (predict_net.pb, predict_net.pbtxt)
MXNet (.model, -symbol.json)
TensorFlow Lite (.tflite)
深度学习框架文件后缀名:
Caffe (.caffemodel, .prototxt)
PyTorch (.pth)
Torch (.t7)
CNTK (.model, .cntk)
PaddlePaddle(__model__)
Darknet (.cfg)
https://blog.csdn.net/qq_53016081/article/details/119766560
4.Opencv支持的框架
Tensorflow,Pytorch/torch,Caffe,DarkNet
(1)DNN的使用步骤
(1)读取模型;
(2)读取图片或者视频;
(3)将图片转换为张量;
(4)进行分析,最终得到结果;
(2)导入模型的种类
Dnn1=readNetFromTensorflow(model,config);
Dnn2=readNetFromCaffe(config,model);
Dnn3=readNetDarknet,(config,model)YOLO;
Dnn4=readNet(model,[config,[framework]])
将图片转换为张量
blobFromImage(image,scalefactor=1.0,size=Size(),mean=Scale(),swapRB=False,crop=False,ddepth=CV_32F)
Image:输入的图片
;
Scalefactor:缩放图片大小;当我们将图片减去平均值之后,还可以对剩下的像素值进行一定的尺度缩放,它的默认值是1,如果希望减去平均像素之后的值,全部缩小一半,那么可以将scalefactor设为1/2
。
Size:指定图片的大小
;
Mean:需要将图片整体减去的平均值,如果我们需要对RGB图片的三个通道分别减去不同的值,那么可以使用3组平均值,如果只使用一组,那么就默认对三个通道减去一样的值。减去平均值(mean):为了消除同一场景下不同光照的图片,对我们最终的分类或者神经网络的影响,我们常常对图片的R、G、B通道的像素求一个平均值,然后将每个像素值减去我们的平均值,这样就可以得到像素之间的相对值,就可以排除光照的影响
。
swapRB:R和B是否进行交换,默认值为false
;
Crop:对图像是否进行裁剪,默认值为false
;
Ddepth:图像的位深
;
将图像送入网络执行并得到结果
Net.setInput(blob);
Net.forward();
转载:https://blog.csdn.net/Keep_Trying_Go/article/details/125459959