计算卷积的最快方法

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(使用前将#替换为@)

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

  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 从Web API同步调用外部api

    我需要从我的 Web API 2 控制器调用外部 api 类似于此处的要求 使用 HttpClient 从 Web API 操作调用外部 HTTP 服务 https stackoverflow com questions 13222998
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • 如何将服务器服务连接到 Dynamics Online

    我正在修改内部管理应用程序以连接到我们的在线托管 Dynamics 2016 实例 根据一些在线教程 我一直在使用OrganizationServiceProxy out of Microsoft Xrm Sdk Client来自 SDK
  • 如何在文本框中插入图像

    有没有办法在文本框中插入图像 我正在开发一个聊天应用程序 我想用图标图像更改值 等 但我找不到如何在文本框中插入图像 Thanks 如果您使用 RichTextBox 进行聊天 请查看Paste http msdn microsoft co

随机推荐

  • 无法使用装饰器覆盖类对象的 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 卷积 现在速度更快了 但是 我仍在寻找更快的