小编mar*_*man的帖子

OpenCV:合并重叠的矩形

在使用 OpenCV 进行检测任务时,我一直遇到合并重叠边界框的问题;也就是说,本质上是在两个重叠边界框的并集​​周围找到边界框。当出于某种原因感兴趣的对象被分解为多个边界框,而不是一个包罗万象的边界框时,这在对象检测中会出现很多。

StackOverflow 上有一些关于算法解决方案和有用的外部库(例如thisthisthis)的答案,还有groupRectanglesOpenCV 提供的函数(以及一连串相关问题/错误:thisthis等)。

我似乎发现上述解决方案对于我尝试执行的任务来说有点过于复杂。许多算法解决方案从数学的角度解决了这个问题(更像是一个思想实验),而rect1 | rect2当矩形的数量很高(处理所有事情的时间是 O(N^2))并且groupRectangles有一些使其仅部分有效的怪癖。所以我想出了一个有点骇人听闻的解决方案,它实际上非常有效。我想我会在下面分享给需要快速解决这个常见问题的其他人。

随意评论和批评它。

c++ opencv bounding-box object-detection

5
推荐指数
1
解决办法
7879
查看次数

如果不在/ etc/passwd中,如何更改Ubuntu中的默认shell?

我使用的是Ubuntu 14.04,我的默认shell是/bin/sh.我想改成它/bin/bash.

我读了几个解决方案(这里是一个),但到目前为止似乎没有任何工作.

我曾尝试sudo chsh -s /bin/bash [username]chsh之后/bin/bash,但我收到以下错误:

chsh: user [username] does not exist in /etc/passwd

我也试过手动编辑该文件.我有sudo权限,所以这不是缺乏访问权限.

有没有人有什么建议?或者任何人都可以解释我如何添加我的用户名/etc/passwd

我正在研究连接到部门服务器的大学机器,但这台本地机器仅供我使用(即我对本地的所有内容都有控制权/权限).

linux shell

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

MATLAB blockproc函数中的'BorderSize'和'TrimBorder'

Blockproc是一个非常有用的功能,用于在MATLAB中"网格化"图像.它有很好的文档记录,甚至还有一个教程页面.但是,当你想要在块之间进行某种重叠时,事情会变得棘手.Mathworks公司论坛上有一些解释,包括这一个这一个,并有在解释试图在这里(问题1),但没有人真正解释了为什么在任何地方某些标志需要与其他的设置.有人可以解释一下'BorderSize'参数的用途是什么吗?似乎当'Trim Borders'设置为时false,'BorderSize'参数完全符合文档所说的内容(以及您期望的内容):

'BorderSize':一个双元素矢量,[VH],指定要添加到每个块的边界像素数量.该函数在每个块的上方和下方添加V行,并在每个块的左侧和右侧添加H列.每个结果块的大小为:[M + 2*V,N + 2*H]

默认情况下,该功能会自动从乐趣结果中删除边框.有关详细信息,请参阅"TrimBorder"参数.功能垫块具有以零为单位延伸超出图像边缘的边框.

但是当你阅读'TrimBorder'细节时,它并不清楚:

'TrimBorder':逻辑标量.设置为true时,blockproc函数会修剪用户函数输出中的边框像素,很有趣.该函数从fun输出的顶部和底部删除V行,从左边缘和右边缘删除H列.'BorderSize'参数定义V和H.默认值为true,表示blockproc函数自动从乐趣输出中删除边框.

为什么我要包含'BorderSize'(即重叠切片)但不将其应用于输出?这只是一个解释不佳的旗帜:'TrimBorder'必须关闭才能使用'BorderSize',或者是否有更大的东西我不知道?我想我的困惑的主旨是:我什么时候想要'TrimBorder'设置false

例子:

% Non-overlapping
A = ones(10);
B = blockproc(A, [2,2], @(x)sum(sum(x.data)));
% B = 
% [ 4 4 4 4 4 ]
% [ 4 4 4 4 4 ]
% [ 4 4 4 4 4 ]
% [ …
Run Code Online (Sandbox Code Playgroud)

matlab image-processing

5
推荐指数
1
解决办法
737
查看次数

"name = value"类型的Python函数参数的名称和原因

完全有可能这个问题是重复的,但我不知道这个概念是什么,所以我甚至不知道如何搜索它.

我是Python新手并试图从Caffe示例中理解这个函数:

def conv_relu(bottom, ks, nout, stride=1, pad=0, group=1):
    conv = L.Convolution(bottom, kernel_size=ks, stride=stride,
                                num_output=nout, pad=pad, group=group)
    return conv, L.ReLU(conv, in_place=True)
Run Code Online (Sandbox Code Playgroud)

我想通了参数stride=1,pad=1等在conv_relu函数定义为默认初始值,但随后做什么kernel_size=ks,stride=stride等在L.Convolution通话是什么意思?它有点像名字/价值对吗?

如果没有别的,有人可以告诉我这叫什么?

python function parameter-passing

5
推荐指数
2
解决办法
134
查看次数

PyCaffe中定义的层模块在哪里

我正在修改一个Caffe教程来实现一个神经网络,但我正在努力确定一些pycaffe模块的位置,以便查看某些函数定义.

例如,教程提到:

import caffe
from caffe import layers a L, params as P
....
L.Convolution(bottom, kernel_size=ks, stride=stride, num_output=nout, pad=pad, group=group)
L.InnerProduct(bottom, num_output=nout)
L.ReLU(fc, in_place=True)
...
Run Code Online (Sandbox Code Playgroud)

我在哪里可以找到这些函数定义,在哪里可以看到预定义了哪些其他类型的图层?我看到layers并且params这里定义,但没有提到类型(例如layers.Convolution,等).

我试图解决这个问题的原因是因为在生成prototxts时我希望能够从Python定义的pycaffe教程中还有其他原型文本参数.这些包括,blob_lrinclude{phase: TRAIN}.

python machine-learning neural-network deep-learning caffe

5
推荐指数
1
解决办法
2345
查看次数

Caffe sigmoid交叉熵损失

我正在使用sigmoid cross entropy loss函数来解决本教程中提出的多标记分类问题.但是,在他们对教程和结果的结果中,输出预测都在范围内(-Inf, Inf),而sigmoid的范围是[0, 1].sigmoid是否仅在backprop中处理?也就是说,不应该向前传球挤压输出?

machine-learning neural-network deep-learning caffe

5
推荐指数
1
解决办法
5778
查看次数

在Eigen中将动态矩阵投射到固定矩阵

为了灵活性,我Eigen::MatrixXf使用C++库Eigen 将数据加载到动态大小的矩阵中(例如).我写了一些函数,需要混合或固定大小的矩阵作为参数(例如Eigen::Matrix<float, 3, Eigen::Dynamic>Eigen::Matrix4f).假设我对行和列大小做了正确的断言,我如何将动态矩阵(在运行时设置的大小)转换为固定矩阵(在编译时设置的大小)?

我能想到的唯一解决方案是映射它,例如:

Eigen::MatrixXf dyn = Eigen::MatrixXf::Random(3, 100);
Eigen::Matrix<float, 3, Eigen::Dynamic> fixed = 
    Eigen::Map<float, 3, Eigen::Dynamic>(dyn.data(), 3, dyn.cols());
Run Code Online (Sandbox Code Playgroud)

但是我不清楚这是否会起作用,因为固定大小的地图构造函数不接受行和列作为文档中的参数.有更好的解决方案吗?简单地分配动态到固定大小的矩阵是行不通的.

c++ eigen

5
推荐指数
1
解决办法
1505
查看次数

将固定大小的特征矩阵作为参数传递给动态大小矩阵的函数调用

我正在 Eigen 之上为我的个人代码库编写一个小型线性代数实用程序库。为了使其尽可能灵活,我定义了不同的特征矩阵类型作为参数。然而,我一直遇到的一个问题是,当我使用它时,我无法将固定大小(即在编译时设置)矩阵作为参数传递给具有动态大小(在运行时设置)的函数) 矩阵 typedef 作为参数。我可以理解相反的情况——由于编译时检查,无法将动态大小的矩阵作为固定的矩阵传递,但这似乎应该可行。

\n\n

下面的函数是一个可测试的示例pdist2(它确实应该在 Eigen API 中具有本机实现)。

\n\n
#include <Eigen/Core>\n\nnamespace Eigen\n{\n    template <typename T>\n    using MatrixXT = Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic>;\n}\n\n// X is M x N\n// Y is M x K\n// Output is N x K\ntemplate <typename T>\ninline Eigen::MatrixXT<T> pdist2(const Eigen::MatrixXT<T> &X, const Eigen::MatrixXT<T> &Y)\n{\n    // ASSERT(X.rows() == Y.rows(), "Input observations must have same number of rows (" + \n    //  std::to_string(X.rows()) + "!=" + std::to_string(Y.rows()) + ")");\n\n    Eigen::MatrixXT<T> dists = X.colwise().squaredNorm().transpose() * Eigen::MatrixXT<T>::Ones(1, Y.cols()) …
Run Code Online (Sandbox Code Playgroud)

c++ templates typedef matrix eigen

5
推荐指数
1
解决办法
2734
查看次数

“docker container prune”与“docker rm $(docker container ls -aq)”有什么区别

我正在阅读 Docker 文档,但我不明白以下之间的区别:

docker container prune

docker rm $(docker container ls -aq)

请注意,在链接中,我列出的第二个命令是docker rm $(docker ps -a -q),但这与我所写的没有区别。container ls只是该命令的较新版本ps

似乎这两个命令都删除了所有停止的容器。还有比这更多的东西吗,或者这些只是同义词?

docker

5
推荐指数
1
解决办法
1029
查看次数

使用预训练VGG-16模型的Caffe形状不匹配误差

我正在使用PyCaffe来实现受VGG 16层网络启发的神经网络.我想使用GitHub页面提供的预训练模型.通常,这通过匹配图层名称来实现.

对于我的"fc6"图层,我在train.prototxt文件中有以下定义:

layer {
  name: "fc6"
  type: "InnerProduct"
  bottom: "pool5"
  top: "fc6"
  inner_product_param {
    num_output: 4096
  }
}
Run Code Online (Sandbox Code Playgroud)

以下是VGG-16部署体系结构的prototxt文件.请注意,"fc6"他们的原型文本与我的相同(除了学习率,但这是无关紧要的).值得注意的是,我的模型中的输入大小也相同:3通道224x224px图像.

我一直非常密切地关注本教程,并且给我一个问题的代码块如下:

solver = caffe.SGDSolver(osp.join(model_root, 'solver.prototxt'))
solver.net.copy_from(model_root + 'VGG_ILSVRC_16_layers.caffemodel')
solver.test_nets[0].share_with(solver.net)
solver.step(1)
Run Code Online (Sandbox Code Playgroud)

第一行加载我的求解器原型,然后第二行从预先训练的模型中复制权重(VGG_ILSVRC_16_layers.caffemodel).解算器运行时,我收到此错误:

Cannot copy param 0 weights from layer 'fc6'; shape mismatch.  Source param 
shape is 1 1 4096 25088 (102760448); target param shape is 4096 32768 (134217728). 
To learn this layer's parameters from scratch rather than copying from a …
Run Code Online (Sandbox Code Playgroud)

python deep-learning caffe pycaffe vgg-net

4
推荐指数
1
解决办法
4181
查看次数