计算卷积的最快方法

2024-01-25

有人知道计算卷积最快的方法吗?不幸的是,我处理的矩阵非常大(500x500x200),如果我使用convn在 MATLAB 中,这需要很长时间(我必须在嵌套循环中迭代此计算)。所以,我使用了 FFT 卷积,现在速度更快了。但是,我仍在寻找更快的方法。任何想法?


如果您的内核是可分离的,则通过执行多个连续的一维卷积将实现最大的速度增益。

MathWorks 的 Steve Eddins 描述了当内核在 MATLAB 上下文中可分离时,如何利用卷积的结合性来加速卷积his blog http://blogs.mathworks.com/steve/2006/10/04/separable-convolution/. For a P-by-Q核,执行两个单独且连续的卷积与 2D 卷积相比的计算优势是PQ/(P+Q),这对应于 9x9 内核的 4.5x 和 15x15 内核的约 11x。EDIT:对这种差异的一个有趣的、无意的演示在本次问答 https://stackoverflow.com/questions/19283894/imfilter-speed-for-volumes.

要确定内核是否可分离(即两个向量的外积),博客继续描述 http://blogs.mathworks.com/steve/2006/11/28/separable-convolution-part-2/如何检查您的内核是否可与 SVD 分离以及如何获取一维内核。他们的示例是 2D 内核。对于 N 维可分离卷积的解决方案,请检查此 FEX 提交 http://www.mathworks.com/matlabcentral/fileexchange/27957-separable-n-dimensional-convolution.


另一个值得指出的资源是Intel 的 3D 卷积 SIMD (SSE3/SSE4) 实现 http://software.intel.com/en-us/articles/16bit-3d-convolution-sse4openmp-implementation-on-penryn-cpu,其中包括source http://software.intel.com/sites/default/files/96/15/conv3d.zip and a 推介会 http://software.intel.com/sites/default/files/72/18/convol3d16bit.ppt。该代码适用于 16 位整数。除非你转向 GPU(例如cuFFT https://developer.nvidia.com/cuFFT),可能很难比英特尔的实现更快,其中还包括英特尔MKL http://software.intel.com/en-us/articles/the-intel-math-kernel-library-and-its-fast-fourier-transform-routines。底部有一个3D卷积(单精度浮点数)的例子MKL 文档的此页 https://software.intel.com/en-us/node/471390(链接已修复,现在镜像在https://stackoverflow.com/a/27074295/2778484 https://stackoverflow.com/a/27074295/2778484).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算卷积的最快方法 的相关文章

随机推荐

  • 无法使用装饰器覆盖类对象的 str 结果

    请参阅下面我的回答 发布问题后我意识到发生了什么事 我尝试使用装饰器覆盖类的字符串表示形式不起作用 我一定错过了一些东西 但不知道它是什么 from functools import wraps def str dec obj wraps
  • 水晶报告 .net 4 的问题

    我之前在 net 3 5 中使用过 Crystal Reports 但自从升级到 Net 4 0 后 我遇到了以下错误 错误 5 找不到类型或命名空间名称 CrystalDecisions 是否缺少 using 指令或程序集引用 C Use
  • Robocopy 命令行 - 带空格的文件

    我正在尝试运行以下命令 robocopy exe eisdevl nas gatech edu coldfusion devl cfapps cfeis mybeap eisdevl nas gatech edu coldfusion te
  • 在Java中,如何将十六进制字符串转换为byte[]? [复制]

    这个问题在这里已经有答案了 我在 Java 中使用以下函数将加密字符串转换为十六进制格式 public static String toHex byte buf StringBuffer strbuf new StringBuffer bu
  • 在 ggplot 和 stat_function() 中叠加对数正态密度

    我尝试通过叠加一个函数stat function in ggplot但无法弄清楚我的错误 这个例子产生了一个漂亮的图 data lt data frame x rt 10000 df 7 ggplot data data aes x x g
  • 当窗口移动到屏幕左上角时如何禁用窗口最大化?

    我有一个设置了ResizeMode CanResizeWithGrip 和AllowTransparency true 的窗口 它工作正常 直到它移动到屏幕顶部 然后自动最大化 如何阻止它最大化 以便我可以将屏幕显示为位于屏幕顶部的窗口 T
  • 如何在测试中手动模拟 Svg?

    我在我的应用程序中使用存根文件来模拟图像 这对我来说 99 的时间都有效 但是 我有一个组件可以根据输入渲染不同的图像 因此我希望能够在单元测试中检查输入是否创建了正确的输出 基本上我想做的是 如果用户输入 狮子 我的组件将显示狮子的图片
  • 使用外部 jar“不是托管类型”的 Spring 启动

    我有一个正在拉入公共罐子的弹簧应用程序 该 jar 包含带注释的 DTO 类 运行 mvn clean build 命令成功运行并构建 jar 一旦我运行 java jar target MyApp 1 0 0 BUILD SNAPSHOT
  • 将 mime 多部分主体部分写入输出流时出错

    我有执行异步文件上传的代码 该代码在我的开发虚拟机上运行良好 但在将其部署到客户端系统后 我不断收到此错误 将 mime 多部分主体部分写入输出流时出错 我知道这是抛出错误的行 但我似乎无法弄清楚为什么 Read the form data
  • 可用的viewcell按钮

    我有 tableview 我在其中对 tableviewcell 进行了子类化 单元格中有一个水平滚动视图 我向滚动视图添加动态按钮 我的要求 1 当我第一次点击 row0 上的按钮时 我需要为点击的按钮设置不同的 BG 颜色 并在数组中添
  • 运行“app”时出错:Android studio 3.1 中出现未知错误

    我已经将我的 android studio 更新到了新的稳定版3 1版 构建项目后无法运行 如果有人遇到同样的问题或找到任何解决方案 请告诉我 只需前往 运行 编辑配置 并向下滚动到窗口底部 在这里您会看到一个选项 发射前 首先 删除小窗口
  • 如何使用 GNU Parallel 编写多核排序

    GNU 并行 http www gnu org software parallel GNU并行是一个shell工具 用于使用一台或多台计算机并行执行作业 例如 如果我想编写一个多核版本wc我可以做 cat XXX parallel bloc
  • 如何使用 awk 每 n 行插入一个空行?

    我有一个像这样的输入文件 line 1 line 2 line 3 line 4 line 5 line 6 我想使用 awk 每隔几行插入一个空行 例如 每两个 line 1 line 2 line 3 line 4 line 5 lin
  • Mac 上的 Mercurial“未提供用户名”错误

    我刚刚在 OSX Mountain Lion Max 10 8 上安装了 Mercurial 在第一次提交时出现错误 abort no username supplied see hg help config 我看到了很多答案 这些答案表明
  • make找不到tools.jar

    运行Ubuntu 12 04 我已经添加到路径 home jeffrey jdk1 6 0 43 lib 我正在尝试使用 Make 从源代码构建 make j16 但遇到错误 build core config mk 268 Error c
  • 来自 pandas Dataframe 的具有不确定性的 LaTeX 表

    我目前正在编写一份报告 其中包含用 python 计算并存储在 pandas DataFrame 中的许多值和不确定性 这些值必须放入报告中 包括错误 目前我唯一的方法是手动将值与错误合并 其中一个示例如下所示 begin tabular
  • 如何MVC 5下拉(多选)框

    我在使用这个下拉框时遇到了问题 似乎无法正确处理 代码如下 查看 Index cshtml using EvaSimulator Models Model EvaSimulator Models ModelVariables ViewBag
  • 当有更多可用机器时,Spark 仅使用一台工作机器

    我正在尝试通过 Spark 并行化机器学习预测任务 我之前已经在其他任务中成功使用过 Spark 多次 并且之前没有遇到过并行化问题 在这个特定任务中 我的集群有 4 个工作线程 我在具有 4 个分区的 RDD 上调用 mapPartiti
  • 使用 silverlight 的 Wcf 服务的最佳实践?

    您将如何构建在 silverlight 应用程序中调用 wcf 服务的代码 仅使用一次实例化的 wcf 服务代理 又名单例 并在整个 SL 应用程序中使用它 如果是这样 您如何解决 ws call completed 事件取消订阅控件的问题
  • 计算卷积的最快方法

    有人知道计算卷积最快的方法吗 不幸的是 我处理的矩阵非常大 500x500x200 如果我使用convn在 MATLAB 中 这需要很长时间 我必须在嵌套循环中迭代此计算 所以 我使用了 FFT 卷积 现在速度更快了 但是 我仍在寻找更快的