最近的一个项目中需要用 PyTorch 实现一套可微分的 Non-local Means (NLM) 降噪算法。在 PyTorch 框架下,实现传统图像处理算法往往有着不止一种的写法。在模型进行正向推断(forward)时,不同的写法在显存开销上或许不存在太大的区别,但是当我们使用 Autograd 进行逐层的梯度反向传播(backward)时,不同的写法往往对应了截然不同的显存占用。
从 Non-local Means 看 PyTorch 显存优化的奇技淫巧
从
最近的一个项目中需要用 PyTorch 实现一套可微分的 Non-local Means (NLM) 降噪算法。在 PyTorch 框架下,实现传统图像处理算法往往有着不止一种的写法。在模型进行正向推断(forward)时,不同的写法在显存开销上或许不存在太大的区别,但是当我们使用 Autograd 进行逐层的梯度反向传播(backward)时,不同的写法往往对应了截然不同的显存占用。
这篇文章要说的当然不是如何用 PS、LightRoom 来处理 Raw 文件,而是一种更加彻底、数据化的办法 -- 利用 MATLAB 直接处理数码相机的 CFA(Color Filter Array) 数据。
这几天在看色域映射(Gammut Mapping)内容时碰到了求凸包交集(Intersection of Convex Hulls)的问题,有一个比较巧妙的算法可以轻松地解决这个问题,这里记录备用。实际上这个算法并不限制于凸多边形,对于存在内陷的多边形也能给出交集。将一些二维条件置换为三维参数,可以很容易地把这个算法扩展到三维空间中,即求多面体的交集(Intersection of Polyhedron)。