深度神经网络模块
从3.3开始,主仓库中添加了dnn模块,目前支持Caffe、Torch等深度学习框架。
,是针对网络通信过程中的数据存储和协议编解码而开发的一套工具库。 它是一种灵活高效的独立于语言平台的结构化数据表示方法,类似于json/xml。
模型
1. 模型文件
a. 二进制的protobuf格式描述文件:.pb
b. protobuf格式文本文件:.pbtxt
2. 加载训练好的模型:readNetFromTensorflow
dnn::Net net = cv::dnn::readNetFromTensorflow("xxx.pb");
3. 读取图像,并把图像转换
Mat img = imread("1.jpg", 1);
Mat inputBlob = dnn::blobFromImage(img, 0.00390625f, Size(256, 256), Scalar(), false,false);
4. 把图像作为模型输入
net.setInput(inputBlob, "data");
5. 前向传播(预测)
Mat pred = net.forward("fc2/prob");
6. 取出预测值最大
咖啡模型
1. 模型文件
a. 模型文件.caffemodel
b. 描述文件.prototxt
2. 加载模型:readNetFromCaffe
其余过程与
负载网络模型
Net w(const &model, const & = ());
模型:.pb 文件
:.pbtxt 文件
净(常量&,常量&=())
:。文档
:。文档
图像转换为模型输入(图像缩放/裁剪/改变通道等,结果是4维矩阵)
Mat ( image, =1.0, const Size& size = Size(), const &mean = (), bool =true, =true);
image:输入图像,可以是mat数据类型。
:如果训练归一化到0-1之间,那么这个参数应该为0.(1/256),否则为1.0
size:训练时应与输入图像大小一致
mean:这个主要用在caffe中,caffe中经常使用训练数据的均值
:是否交换图像第一通道和最后通道的顺序
crop:如果为true,则为裁剪图像,如果为false,则为按比例缩放图像
进入
void ( blob, const &name = "", = 1.0, const &mean = ())
blob:输入数据
name:输入层的名称
: 飞涨
mean:均值(像素值减去该均值)
输出
Mat(const &=());
:输出层的名称
其他加载模型的方法
Ptr cv::dnn::rter(const &model)
模型:.pb 文件
Ptr cv::dnn::(const &, const &=())
:。文档
:。文档
例子
Ptr<dnn::importer> importer;
try
{
importer = dnn::createCaffeimporter("xxx.prototxt", ".caffemodel");
}
catch (const cv::Exception &err) {
cerr << err.msg << endl;
}
// 初始化
dnn::Net net;
importer->populateNet(net);
importer.release();