gpt4 book ai didi

c++ - Caffe C++ 在输入层设置数据

转载 作者:太空狗 更新时间:2023-10-29 22:57:13 24 4
gpt4 key购买 nike

在我的一个项目中,我对 Caffe 产生了兴趣,更普遍地对深度学习产生了兴趣。几个小时后,我设法在我的电脑上安装了 Caffe。我现在正在努力使我们成为现实。

所以我已经按如下方式加载了网络:

std::string model_file = "/home/CXX/Desktop/caffemodel/deploy.prototxt";
std::string trained_file = "/home/CXX/Desktop/caffemodel/modelWeights.caffemodel";

Caffe::set_mode(Caffe::CPU);
boost::shared_ptr<Net<float>> net_;
net_.reset(new Net<float>(model_file, TEST));
net_->CopyTrainedLayersFrom(trained_file);

加载的网络和权重不是我的。请在下面找到输入层和输出层的结构:

name: "simple_conv-dense"
input: "data"
input_dim: 1
input_dim: 1
input_dim: 250
input_dim: 250
layer {
name: "conv1"
bottom: "data"
type: "Convolution"
top: "conv1"
param {
lr_mult: 1
decay_mult: 1
}
param {
lr_mult: 2
decay_mult: 0
}

输入是单个 250*250 深度(在 0 和 1 之间归一化的值)“图像”。预处理已经处理好了,我的数据存储在一个Matrix中(个人库,指向std::vector元素的指针),这样你就可以像二维数组一样访问它(data[i][j])

网络的输出按以下顺序组织:[NbBlob][NbClass][outHeight][outWidth],在我的例子中为 [1][46][250][250]

我已经编写了检索输出的代码:

Blob<float>* output_layer = net_->output_blobs()[0];
const float* begin = output_layer->cpu_data();
for (int k = 0; k < 46; k++)
for (int h = 0; h < 250; h++)
for (int w = 0; w < 250; w++){
currentprob = *(begin + ((k * 250 + h) * 250 + w));

此代码已经过检查,通过对像素级 46 类预测求和,显然单个像素的结果为 1。

我的问题是我不知道如何在网络中提供我的数据。我首先通过这种方法检索输入层:

Blob<float>* input_layer = net_->input_blobs()[0];

从调试器中,我确实知道 input_layer 有一个名为 capacity_ 的属性,它具有预期值(62 500,即 250*250)。

所以这是我的问题:如何将他的数据输入到输入层?我已经花了很多时间自己看,但我不知道该去哪里看。

请注意,我没有使用 OpenCV,而且我几乎没有任何深度学习背景(本科生)。

感谢您花时间帮助我。非常欢迎任何类型的帮助(文档、伪代码、代码、解释)。

PS:使用命名空间caffe;

编辑:添加了更多输入层信息。错别字。

最佳答案

我会尝试直接将数据推送到网络:

Blob<float>* input_layer = net_->input_blobs()[0];
float* input_data = input_layer->mutable_cpu_data(); // get pointer to Blob's data storage
for ( int i=0; i < 250; i++ ) {
for ( int j=0; j < 250; j++ ) {
input_data[i*250 + j] = data[i][j]; // I hope I did not filp anything here...
}
}
net_->forward(); // do forward pass

根据您的data 的排列方式,您可以用更优雅的memcpy 替换嵌套循环...

关于c++ - Caffe C++ 在输入层设置数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45457351/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com