小编mar*_*man的帖子

OpenCV 3.x只包含​​一个lib - opencv_world.lib?

我正在尝试将我的OpenCV版本从2.4.9更新到最新版本3.10.我从这里下载了Windows二进制文件,从官方OpenCV站点导航到那里.然后我运行了安装程序,但该opencv\build\x64\vc12\lib目录只包含几个文件:

  • opencv_world310.lib
  • opencv_world310d.lib
  • OpenCVConfig.cmake
  • OpenCVModules.cmake
  • OpenCVModules-debug.cmake
  • OpenCVModules-release.cmake

在过去的版本中,此目录用于包含所需的库,如opencv_calib3d249d.lib,opencv_contrib249d.lib,opencv_core249d.lib等.

我想有一些我需要用CMake做的事情,但我似乎无法弄清楚 - 旧的二进制文件用于为你编译一切.我也在文档中找不到任何解释这个的东西.最近有没有其他人遇到这个并有解决方案?

c++ opencv cmake opencv3.0

20
推荐指数
1
解决办法
2万
查看次数

从CMakeLists.txt文件设置CMAKE_INSTALL_PREFIX

如何在我的根CMakeLists.txt文件中设置CMAKE_INSTALL_PREFIX?

我一直在做

cmake_minimum_required(VERSION 2.8)
project(MyProject)

# Set default install prefix
set(CMAKE_INSTALL_PREFIX ${CMAKE_SOURCE_DIR})
Run Code Online (Sandbox Code Playgroud)

期望安装将注定源树中的文件夹.那是,

install(TARGETS my_exe DESTINATION bin/)
Run Code Online (Sandbox Code Playgroud)

会安装到${CMAKE_SOURCE_DIR}/bin/.相反,它一直试图写入/usr/local/bin(Ubuntu 14.04的默认值).

我尝试了这个问题的答案,但是usr/local/当我检查CMakeCache.txt时,我仍然将标准作为我的CMAKE_INSTALL_PREFIX.

我唯一可行的解​​决方案就是做

install(TARGETS my_exe DESTINATION "${CMAKE_SOURCE_DIR}/bin/")
Run Code Online (Sandbox Code Playgroud)

但这会删除用户指定要安装的bin目录的位置的能力.

tl; dr我想默认make install自动安装${CMAKE_SOURCE_DIR},而不是/usr/local/.

cmake

12
推荐指数
1
解决办法
6830
查看次数

重新抛出异常的自定义错误消息不是由what()打印的

我正在编写一组扩展的自定义异常std::exception.在某些代码中,当捕获异常时,我只是重新throw启动链,直到驱动程序main函数调用catches并打印结果.但是,最终打印的所有内容都是"std :: exception".这似乎不是我之前处理的范围问题.

为什么我的异常消息不能打印?

我的异常代码:

// General exception class
struct MyException : public std::exception
{
    std::string _msg;

    MyException(const std::string &exception_name) : _msg(exception_name) {}

    void setMessage(const std::string &message)
    {
        _msg += ": " + message + "\n";
    }

    void setLocation(const char * func, const char * file, const int line)
    {
        _msg += "  In function " + std::string(func) + "(" + file + ":" + std::to_string(line) + ")";
    }

    const …
Run Code Online (Sandbox Code Playgroud)

c++ exception throw

12
推荐指数
1
解决办法
1032
查看次数

MATLAB中矩阵中斑块的圆周移位

如何在矩阵的每个补丁索引中循环元素而不显式迭代每个补丁?

例

我可以想到执行此循环的迭代方法是使用MATLAB的circshift函数.我可以遍历矩阵中的每个MxN补丁,并对该补丁的元素执行循环移位.

(注意:circshift采用一个数组并将第一个(或第k个)索引移动到后面,将所有内容向前移动以腾出空间.使用矩阵,您只需向量化它,移动它并重新形状,利用MATLAB的列 -主要线性索引)

如果我要迭代我更大的每个MxN窗口(j*M xk*N为整数j,k)矩阵,那将是很好的.但是,我希望能够避免for循环并利用MATLAB的矢量化代码一次性完成这项工作.

通过示例进行一次完整迭代(某些矩阵B中的2x2补丁)将是:

B =           -->   B =           -->   B =           -->   B =
[ 5 6 7 8 ]   -->   [ 5 6 7 8 ]   -->   [ 6 5 8 7 ]   -->   [ 6 5 8 7 ]
[ 5 6 7 8 ]   -->   [ 6 5 8 7 ]   -->   [ 6 5 8 7 ]   -->   [ 5 6 7 8 ]
[ 5 6 7 …
Run Code Online (Sandbox Code Playgroud)

matlab matrix

9
推荐指数
1
解决办法
736
查看次数

Caffe快照:.solverstate与.caffemodel

在训练网络时,每N次迭代拍摄的快照有两种形式.一个是.solverstate文件,我认为它正是它听起来的样子,存储损失函数和渐变的状态等.另一个是.caffemodel文件,我知道存储训练的参数.

如果您需要预先训练的模型,.caffemodel是您需要的文件,所以我想如果您要测试网络,它也是您想要的文件.

WWhat是.solverstate的好处?在本教程中,您似乎可以从中重新开始训练,但这与使用.caffemodel有何不同?.solverstate也包含与.caffemodel相同的信息吗?换句话说,.caffemodel只是.solverstate的一个子集?

deep-learning caffe

9
推荐指数
1
解决办法
3671
查看次数

培训CNN-LSTLM端到端?

已经有许多论文(特别是图像字幕)将CNN和LSTM架构联合用于预测和生成任务.然而,他们似乎都独立于LSTM训练CNN.我正在浏览Torch和TensorFlow(与Keras一起),并且无法找到为什么它不可能进行端到端培训(至少从架构设计的角度来看),但那里似乎不是这种模型的任何文档.

那么,可以做到吗?Torch或TensorFlow(甚至是Theanos或Caffe)是否支持联合训练端到端的CNN-LSTM神经网络?如果是这样,它是否只是简单地将CNN的输出链接到LSTM的输入并运行SGD?或者是否更复杂?

neural-network deep-learning torch tensorflow

7
推荐指数
1
解决办法
1249
查看次数

将视频帧从 ffmpeg 传输到 numpy 数组,而不将整个电影加载到内存中

我不确定我所要求的是否可行或有效,但我正在尝试以有序但“按需”的方式从视频加载帧。

基本上我现在所拥有的是通过管道将整个未压缩视频读入缓冲区stdout,例如:

H, W = 1080, 1920 # video dimensions
video = '/path/to/video.mp4' # path to video

# ffmpeg command
command = [ "ffmpeg",
            '-i', video,
            '-pix_fmt', 'rgb24',
            '-f', 'rawvideo',
            'pipe:1' ]

# run ffmpeg and load all frames into numpy array (num_frames, H, W, 3)
pipe = subprocess.run(command, stdout=subprocess.PIPE, bufsize=10**8)
video = np.frombuffer(pipe.stdout, dtype=np.uint8).reshape(-1, H, W, 3)

# or alternatively load individual frames in a loop
nb_img = H*W*3 # H * W * 3 channels * …
Run Code Online (Sandbox Code Playgroud)

python ffmpeg numpy

7
推荐指数
1
解决办法
6331
查看次数

C++随机抽取范围0:n-1(n> k)中的k个数字,无需替换

我正在努力将MATLAB仿真移植到C++中.为此,我试图复制MATLAB的randsample()函数.我还没有想出一个有效的方法来做到这一点.

所以我问你们所有人,如何在0 + n-1(n> k)范围内随机抽样k数而不用C++替换?

我考虑过以下伪代码(受到cppreference.com上的第三个例子的启发),但我觉得它有点像hacky:

initialize vect<int> v of size n
for i = 0 to n-1
    v[i] = i
shuffle v
return v[0 to k-1]
Run Code Online (Sandbox Code Playgroud)

这里的缺点也是首先要构建一个大规模阵列的要求.这似乎是缓慢/笨重的矫枉过正.

如果你能提供帮助,我会喜欢这里的方向.我对理论不太感兴趣(算法很有趣,但现在与我的需求无关),而不是在C++中实现它的最佳方法.

提前致谢!

c++ random

6
推荐指数
2
解决办法
1834
查看次数

Caffe SigmoidCrossEntropyLoss层丢失函数

我正在查看Caffe的SigmoidCrossEntropyLoss图层文档的代码,我有点困惑.文档将损失函数列为logit loss(我在这里复制它,但是没有Latex,公式将很难阅读.查看文档链接,它位于最顶层).

但是,代码本身(Forward_cpu(...))显示了不同的公式

Dtype loss = 0;
for (int i = 0; i < count; ++i) {
    loss -= input_data[i] * (target[i] - (input_data[i] >= 0)) -
        log(1 + exp(input_data[i] - 2 * input_data[i] * (input_data[i] >= 0)));
}
top[0]->mutable_cpu_data()[0] = loss / num;
Run Code Online (Sandbox Code Playgroud)

是因为这是因为已经应用于输入的sigmoid函数?

然而,即便如此,这些(input_data[i] >= 0)片段也让我感到困惑.那些似乎代替了文档中损失公式的p_hat,这应该是由sigmoid函数压缩的预测.那么为什么他们只是采取二进制阈值?由于这种损失会预测[0,1]输出,所以它(input_data[i] >= 0)会变得更加混乱,因此1除非100%确定它不是,否则它将是一个输出.

有人可以向我解释一下吗?

c++ neural-network deep-learning caffe

6
推荐指数
1
解决办法
844
查看次数

如何在PyTorch conv2d函数中使用groups参数

我试图在PyTorch中计算每个通道的渐变图像.为此,我想在图像的每个通道上使用Sobel滤波器执行标准2D卷积.我正在使用这个torch.nn.functional.conv2d功能

在我下面的最小工作示例代码中,我收到一个错误:

import torch
import torch.nn.functional as F

filters = torch.autograd.Variable(torch.randn(1,1,3,3))
inputs = torch.autograd.Variable(torch.randn(1,3,10,10))
out = F.conv2d(inputs, filters, padding=1)
Run Code Online (Sandbox Code Playgroud)

RuntimeError:给定组= 1,权重[1,1,3,3],所以预期输入[1,3,10,10]有1个通道,但得到3个通道

这表明groups需要为3.但是,当我制作时groups=3,我得到一个不同的错误:

import torch
import torch.nn.functional as F

filters = torch.autograd.Variable(torch.randn(1,1,3,3))
inputs = torch.autograd.Variable(torch.randn(1,3,10,10))
out = F.conv2d(inputs, filters, padding=1, groups=3)
Run Code Online (Sandbox Code Playgroud)

RuntimeError:无效参数4:超出范围/usr/local/src/pytorch/torch/lib/TH/generic/THTensor.c:440

当我检查THTensor类中的代码片段时,它引用了一堆维度检查,但我不知道我哪里出错了.

这个错误是什么意思?如何使用此conv2d功能执行我想要的卷积?我相信我误解了groups参数.

convolution pytorch

6
推荐指数
1
解决办法
4417
查看次数