小编Par*_*kar的帖子

如何在caffe中卷积两个blob

在caffe中,该convolution图层采用一个底部blob,并将其与学习过滤器(使用权重类型初始化 - "Xavier","MSRA"等)进行卷积.但是,我的问题是我们是否可以简单地卷入两个底部blob并产生一个顶部blob.这样做最优雅的方式是什么?这样做的目的是:其中一个底部blob将是data另一个将是一个动态过滤器(根据data前所未有的变化)(我正在尝试实现动态卷积).

我的尝试:

我想到的一种方法是修改filler.hpp并将底部blob指定为filler矩阵本身(而不是"Xavier","MSRA"等).然后我认为卷积层会从那里拾取.我们可以设置lr = 0为表示不应更改由我们的自定义填充程序初始化的权重.但是,在我查看源代码后,我仍然不知道该怎么做.另一方面,我不想打破caffe的工作流程.如果我想要它们,我仍然希望转换层正常运行.

显然,一个比较繁琐的方法是使用的组合Slice,tile和/或Scale层字面上实施卷积.我认为它会起作用,但结果会很混乱.还有其他想法吗?

编辑1:

我通过修改caffe的卷积层写了一个新图层.特别地src/caffe/layers/conv_layer.cpp,在第27行,它采用由其定义的权重filler并将其与底部blob卷积.因此filler,我修改了图层,使其现在需要两个底部,而不是从中填充该blob .其中一个底部直接分配给填充符.现在我不得不做一些其他改动,例如:

  1. weightblob对于所有样本具有相同的值.对于不同的样本,它将具有不同的值.所以我改变了第32行:
this->forward_cpu_gemm(
    bottom_data + n * this->bottom_dim_, 
    weight, 
    top_data + n * this->top_dim_);
Run Code Online (Sandbox Code Playgroud)

至:

this->forward_cpu_gemm(
    bottom_data + n * bottom[1]->count(1),
    bottom[0]->cpu_data() + n * bottom[0]->count(1), 
    top_data + n * this->top_dim_);
Run Code Online (Sandbox Code Playgroud)

为了方便起见,我假设没有涉及偏见项,步幅总是1,填充总是0,组总是1等等.但是,当我测试前向传球时,它给了我一些奇怪的答案(带一个简单的卷积内核= np.ones((1,1,3,3)).这个内核的学习率设置为零,这样它就不会改变.但是,我无法得到正确答案.任何建议都将受到赞赏.

请不要使用现有的层来提出解决方案Slice, Eltwise, Crop.我已经实现了 - 它的工作原理 - 但它复杂且内存效率低得令人难以置信.

convolution deep-learning caffe

13
推荐指数
1
解决办法
1227
查看次数

比较两个边界框相互之间的Matlab

我有两个两个边界框的坐标,其中一个是基础,另一个是我工作的结果.我想评估一下我的准确性.所以我问是否有人有任何建议

边界框详细信息以此格式保存 [x,y,width,height]

matlab image-processing computer-vision video-tracking

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

在eclipse中将openCV添加到java buildpath

我在将openCV添加到我的eclipse项目的buildpath时遇到了问题.我已按照本网站教程中的说明操作:http://docs.opencv.org/2.4.4-beta/doc/tutorials/introduction/desktop_java/java_dev_intro.html#create-a-simple-java-project-在月食

但是执行代码片段会给出这个控制台输出:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv-java2.4.4 in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at camStatisticsTests.RawTests.main(RawTests.java:20)
Run Code Online (Sandbox Code Playgroud)

为了让openCV与java和eclipse一起工作,我该怎么办?我想将它用作普通的java库.

java eclipse windows opencv

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

加速迭代 - MATLAB

考虑2个矢量A = [20000000 x 1]B = [20000000 x 1 ]

我需要找到对应于B的每个独特元素的所有A的总和.

虽然这看起来很简单,但这在MATLAB中将永远存在.

目前,我正在使用

u = unique(B);
length_u = length(u);
C = zeros(length_u,1);

for i = 1:length_u
   C(i,1) = sum(A(B==u(i)));
end
Run Code Online (Sandbox Code Playgroud)

反正有没有让它跑得更快?我尝试parfor使用并行计算工具箱拆分循环并运行2个循环(因为我只有2个核心).还需要几个小时.

PS:是的,我应该买一台更好的电脑.

performance matlab vectorization

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

连接大型海量数据框架

我的问题如下:

  • 我有一个大数据details框,称为包含900K行,另一个包含80M行,称为attributes

  • 两者都有一列A,我想在该列上进行左外连接,左数据框为deatils

  • A数据框中的列中只有75,000个唯一条目details。列中的数据框attributes80M唯一条目A

什么是实现join手术的最佳方法?

我尝试了什么?

  • 简单的连接即details.join(attributes, "A", how="left_outer")超时(或释放内存)。

  • 由于in列A中只有75,000个唯一条目details,因此我们不在乎in数据框中的其余条目attributes。因此,首先我使用以下方法进行过滤:

    uniqueA = details.select('A').distinct().collect()
    uniqueA = map(lambda x: x.A, uniqueA)
    attributes_filtered = attributes.filter(attributes.A.isin(*uniqueA))
    
    Run Code Online (Sandbox Code Playgroud)

    我认为这可以解决,因为该attributes表从8000万行减少到仅仅75000行。但是,仍然需要永远完成join(并且永远不会完成)。

  • 接下来,我认为分区太多,要连接的数据不在同一分区上。虽然,我不知道如何将所有数据带到同一分区,但我认为重新分区可能会有所帮助。所以就到这里。

    details_repartitioned = details.repartition("A")
    attributes_repartitioned = attributes.repartition("A")
    
    Run Code Online (Sandbox Code Playgroud)
  • 上述操作将分区的数量attributes从70K减少到200。分区的details数量约为1100。

    details_attributes = details_repartitioned.join(broadcast(
    attributes_repartitioned), "A", how='left_outer')  # tried without broadcast too
    
    Run Code Online (Sandbox Code Playgroud)

毕竟,join仍然无法使用。我仍在学习PySpark,因此我可能误解了重新分区背后的基础知识。如果有人可以阐明这一点,那就太好了。

PS我已经看过这个 …

python bigdata dataframe apache-spark pyspark

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

MATLAB:避免质量差的 matlab 视频

我创建了我的情节系列的视频,如下所示:

clc;
clear;
close all;
r0=1;
theta=0:0.01:2*pi;
a=0.2;
psi=0;
writerObj = VideoWriter('shapes.mp4'); % Name it.
writerObj.FrameRate = 1; % How many frames per second.
open(writerObj); 
for k=1:3
    pause(1);

    r=r0+a*sin(k*theta+psi)+a*sin((k+1)*theta+psi)+a*sin((k+2)*theta+psi)+a*sin((k+3)*theta+0.8*pi);
    figure();
    x=r.*cos(theta);
    y=r.*sin(theta);
    plot(x,y);
    axis([-2 2 -2 2]);
%     axis equal
    grid on

    %%%%%%%%% Finding Area %%%%%%%%%%%%%
    A = polyarea(x,y);
    title({'line1',['Area = ' num2str(A)]})
%     title(['Area = ' num2str(A)]);

    set(gcf,'renderer','zbuffer');
    view(2)
    frame = getframe(gcf);
    writeVideo(writerObj, frame);


    close all
end
close(writerObj); % Saves the movie.
Run Code Online (Sandbox Code Playgroud)

但是当你观看视频时,它的质量很差(我的意思是质量差,例如以 jpeg 格式导出 matlab 图时的质量)。

对于 matlab …

video matlab plot animation

5
推荐指数
0
解决办法
3070
查看次数

在CNN模型中计算Conv层的输出大小

在卷积神经网络中,如何知道特定转换层的输出?(我正在使用keras构建CNN模型)

例如,如果我使用一维转换层,其中number_of_filters = 20,kernel_size = 10和input_shape(500,1)

 cnn.add(Conv1D(20,kernel_size=10,strides=1, padding="same",activation="sigmoid",input_shape=(Dimension_of_input,1)))
Run Code Online (Sandbox Code Playgroud)

如果我使用的是二维转换层,其中number_of_filters = 64,kernal_size =(5,100),input_shape =(5,720,1)(高度,宽度,通道)

 Conv2D(64, (5, 100),
       padding="same",
       activation="sigmoid",
       data_format="channels_last",
       input_shape=(5,720,1)
Run Code Online (Sandbox Code Playgroud)

以上两个转换层的输出数量是多少?在卷积神经网络中,是否有任何方程可用来了解卷积层的输出数量?

neural-network conv-neural-network keras keras-layer

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

如何实现超像素池化层?

我想实现以下论文“使用超像素池网络的弱监督语义分割”中定义的超像素池层,最初是在 Torch 中实现的(无法实现)。我希望在 Keras 中使用 Theano 后端来完成(最好)。

我将举一个小例子来展示该层的作用。它需要以下输入:

feature_map:形状=(batch_size, height, width, feature_dim)

superpixel_map:形状=(batch_size, height, width)

让我们假设两个小矩阵batch_size = 1, height = width = 2, feature_dim = 1

feature_map = np.array([[[[ 0.1], [ 0.2 ]], [[ 0.3], [ 0.4]]]])  
superpixel_map = np.array([[[ 0,  0], [ 1,  2]]])
Run Code Online (Sandbox Code Playgroud)

现在,输出的形状为 = (batch_size, n_superpixels, feature_dim)。这里n_superpixels基本上就是 = np.amax(superpixel_map) + 1

输出计算如下。

找到位置其中superpixel_map == i,其中从到i变化。让我们考虑一下。的位置是和0n_superpixels - 1i = 0i = …

neural-network theano deep-learning keras tensorflow

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

在 protobuf-c 中使用“byte”数据类型的示例

我正在尝试在 c 项目中使用 protobuf-c 来传输一些数据。此处缺少“字符串”和“字节”数据类型的示例

任何人都可以为那些提供一个小例子吗?我的问题是我不知道如何为具有这些数据类型的消息分配内存,因为它们的大小在编译时是未知的。

c malloc protocol-buffers

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

使用调度队列快速下载

如何使用调度队列提高应用程序的下载速度?

我正在使用调度队列在我的应用程序中下载图像,但是第一次下载时需要时间,因为之后我将它们存储到缓存中.但我想第一次更快地下载它们.

任何人都可以建议我使用调度队列吗?

iphone grand-central-dispatch ios

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