这是一个远景,如果您认为问题过于本地化,请进行投票以结束。我搜索了 caffe2 github 存储库,打开 一个问题 问同样的问题,在 caffe2_ccp_tutorials 存储库是因为其作者似乎最好地理解它,请阅读有关Doxygen文档 caffe2 ::张量 和 caffe2 :: cudacontext,甚至穿过caffe2 源代码,以及特定的 tensor.h, context_gpu.h 和 context_gpu.cc.
我知道目前 caffe2不允许将设备内存复制到张量。我愿意扩展图书馆并执行拉动请求以实现这一目标。我背后的原因是我使用 cv::cuda::* 在设备内存上运行的方法,因此我认为在GPU上进行预处理,只是将结果重新下载到主机上,然后将其重新上传到从主机到设备的网络上,这显然是一个问题。
看着的构造函数 Tensor<Context> 我可以看到也许只有
template<class SrcContext , class ContextForCopy >
Tensor (const Tensor< SrcContext > &src, ContextForCopy *context)
可能会实现我想要的,但我不知道如何设置 <ContextForCopy> 然后将其用于施工。
此外,我看到我可以用正确的尺寸构造张量,然后 也许 使用
template <typename T>
T* mutable_data()
我可以分配/复制数据。数据本身存储在 std::vector<cv::cuda::GpuMat,所以我必须迭代它,然后使用任何一个 cuda::PtrStepSz 或者 cuda::PtrStep 访问基础设备分配的数据。这与我需要复制/分配到的数据相同 caffe2::Tensor<CUDAContext>.
我一直在试图找出内部 Tensor<CPUContext> 被复制到 Tensor<CUDAContext> 由于我已经看到了它的示例,但是我无法弄清楚,尽管我认为使用的方法是 CopyFrom。如已经提到的通常示例,从CPU复制到GPU:
TensorCPU tensor_cpu(...);
TensorCUDA tensor_cuda = workspace.CreateBlob("input")->GetMutable<TensorCUDA>();
tensor_cuda->ResizeLike(tensor_cpu);
tensor_cuda->ShareData(tensor_cpu);
我非常惊讶,没有人遇到过这项任务,简短的搜索只能产生一个 公开问题 作者(@peterneher)或多或少地问同一件事。
我设法弄清楚了。最简单的方法是告诉OpenCV 哪个 内存位置要使用。这可以通过使用 第七和第8个超负荷 cv::cuda::GpuMat 构造函数 如下所示:
cv::cuda::GpuMat::GpuMat(int rows,
int cols,
int type,
void * data,
size_t step = Mat::AUTO_STEP
)
cv::cuda::GpuMat::GpuMat(Size size,
int type,
void * data,
size_t step = Mat::AUTO_STEP
)
这样做意味着 caffe2::TensorCUDA 已被宣布 分配 预先:
std::vector<caffe2::TIndex> dims({1, 3, 224, 224});
caffe2::TensorCUDA tensor;
auto ptr = tensor.mutable_data<float>();
cv::cuda::GpuMat matrix(224, 224, CV_32F, ptr);
例如,使用3通道BGR Float矩阵使用 cv::cuda::split:
cv::cuda::GpuMat mfloat;
// TODO: put your BGR float data in `mfloat`
auto ptr = tensor.mutable_data<float>();
size_t width = mfloat.cols * mfloat.rows;
std::vector<cv::cuda::GpuMat> input_channels {
cv::cuda::GpuMat(mfloat.rows, mfloat.cols, CV_32F, &ptr[0]),
cv::cuda::GpuMat(mfloat.rows, mfloat.cols, CV_32F, &ptr[width]),
cv::cuda::GpuMat(mfloat.rows, mfloat.cols, CV_32F, &ptr[width * 2])
};
cv::cuda::split(mfloat, input_channels);
希望这将帮助任何人居住在Caffe2的C ++方面。
笔记 那 caffe2::Predictor 不使用 caffe2::TensorCUDA,您将需要手动传播张量。有关此的更多信息, caffe2_cpp_tutorial mnist.cc.
本片文章是我的【caffe2从头学】系列中的一篇,如果想看其他文章,请看目录: 0.目录 1.快速开始 1.1.什么是caffe2 ? 1.2.安装caffe2 2.学习caffe2 3.caffe2官方教程的安装与使用 3.1.Blobs and Workspace, Tensors,Net 概念 3.2.Caffe2 的一些基本概念 - Workspaces&Operators &am...
最近花费两个月时间接触caffe2框架和卷积计算; 1.卷积计算原理 借用yangqing大神的原图 (1)矩阵变换 图片维度:通道(C)*高度(H)*宽度(W)),可以看到按照通道方向,即C方向进行矩阵变换 (2)按行获取图像中每个点的值,依次进行矩阵变换 依次按照通道方向,即C方向取值 (3)获取最终图像矩阵 虽然按照通道方向取值每个点,实际过程中是将每个通道划分为小段进行取值。将图像转换后的...
现在时间是2018.03.14,在Ubuntu16.04 平台 源码方式编译安装Caffe2(CPU版),遇到了一些问题,以及最后的解决方案整理如下。 Step1:安装 安装过程 参考的是官方主页上给出的安装教程,链接 https://caffe2.ai/docs/getting-started.html?platform=ubuntu&configuration=compile 在执行最...
参考文章:https://www.cnblogs.com/zhencv/p/8384419.html 1, 首先安装好cuda和cudnn,我目前是使用cuda8.0,cudnn6.1(安装教程参考本博客其他文章,基本所有的框架都是需要这个步骤) 2, 按照官网教程按照caffe2: &nb...
Caffe2(3)----下载现成的模型并使用 Caffe2训练好的模型可在Model Zoo下载,下载的命令很简单,接下来以下载和使用squeezenet为例,进行简单说明。 1.浏览可下载的模型 已有模型都放在github上,地址:https://github.com/caffe2/caffe2/wiki/Model-Zoo,当前有caffe和caffe2两种版本的选择。 &nb...
文章讲的是Caffe2:移动计算的深度学习框架,Caffe2是Facebook新的开源深度学习框架。与之前的PyTorch不同,Caffe2专门用于将深度学习移植到移动应用程序中,这将会让智能手机更“深入”、更智能! 如果你认为深度学习还只是一个概念,你就错了。世界各地的研究实验室都试图开发高效快速的软件框架,使研究人员或程序员能够实施和测试深度学习模型。现在,每个新的...
今天在装caffe2中的时候,提示我需要make,搞不懂什么是make,甚至都忘了什么是编译和链接了。 巩固了下知识: 首先对上图进行解释: CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。CMake主要是编写CMakeLists.txt文件,然后用cmake命令将CMakeLists.txt文件转化为make所需要的makefile文件,最后用make命令编译源码生成可执...
学习逻辑回归需要清楚的几件事:假设函数怎么用(怎么预测),决策边界怎么用(一般取0.5),损失函数如果计算(因为要取最小),优化方法(重新计算各个权重) 建议:我阅读的英文参考资料的相关内容除了公式我并没有往上发布。但是我会放到我的下载资料中,建议,想彻底理解这几个内容的,如果不想直接从公式推导入手,可以考虑看下具体的例子,就会明白其中的含义。 前言 本文主要介绍逻辑回归的基础知识...
编者按 本篇文章来自于17th Extended Semantic Web Conference (ESWC2020) 会议。该文章提出了基于语义标注网络的结构化数据集,包含工业4.0标准、范式和框架,并给出了知识图谱在工业4.0应用的现有案例。 本文作者北京大学周雨奇,将对原文进行概要阐述。 文末提供获...
原理:crossfire 1.9.0 版本接受入站 socket 连接时存在缓冲区溢出漏洞。 工具: 调试工具:edb; ###python在漏洞溢出方面的渗透测试和漏洞攻击中,具有很大的优势 实验对象:crossfire【多人在线RPG游戏】 运行平台:Kali i386 虚拟机【32位,计算机CPU位数是指地址总线位数,64位系统的寻址空间为2^64,寻址过大,难以处理,为了简化操作,所以选用...
I have API, where I get datas. I use mongoose to save it into my local MongoDB. Each time when I save, I create dynamically new model and use insertMany on it: But... later, when all almost complete, ...
I have been trying to figure this out for a few hours and haven't been able to understand why this isn't working. I have a TPL Dataflow batch block that accepts a batch of files that I want to upload....
I'm trying to save a data frame to a mysql database. But it seems that it doesn't work because of the timestamp (format?). When I run this script, the following Error occurs ..... Can't figure it out ...
I am a modder with very little scripting experience. I need a way to renumber the following Sections of a file: etc. The file looks like this: and has to be continued like this: and so on. So simply s...
I have a test-assembly (MyTestProject) where I want to write some logging using log4net. Thus I created a config-file with the same name as the assembly where I set up the logging as suggested here: W...