实现旋转等变:从头开始实现组等变 CNN

我们编写了一个简单的组等变卷积神经网络 (GCNN),它与旋转等变。世界可能颠倒了,但网络会知道。

来源:RStudio AI博客

卷积神经网络 (CNN) 非常棒 - 无论图像中的哪个位置,它们都能检测到特征。嗯,也不完全是。它们对任何类型的运动都不是无动于衷的。上下左右移动都可以;但绕轴旋转则不行。这是因为卷积的工作原理:按行遍历,然后按列遍历(或反之亦然)。如果我们想要“更多”(例如,成功检测到倒置的物体),我们需要将卷积扩展为旋转等变的操作。与某种类型的动作等变的操作不仅会记录移动的特征本身,还会跟踪哪个具体动作使其出现在原处。

旋转等变 等变

这是介绍组等变 CNN (GCNN) 系列的第二篇文章。第一部分是对我们为什么需要它们以及它们如何工作的高级介绍。在那里,我们介绍了关键角色,即对称群,它指定了哪些类型的变换要等变处理。如果您还没有看过,请先查看那篇文章,因为在这里我将使用它介绍的术语和概念。

这是介绍组等变 CNN (GCNN) 的系列文章中的第二篇 第一

今天,我们从头开始编写一个简单的 GCNN。代码和演示严格遵循阿姆斯特丹大学 2022 年深度学习课程提供的笔记本。非常感谢他们提供如此优秀的学习材料。

笔记本 深度学习课程

接下来,我的目的是解释一般的思路,以及如何从较小的模块构建最终的架构,每个模块都有明确的用途。因此,我不会在这里重现所有代码;相反,我将使用 gcnn 包。它的方法有大量注释;因此,要查看一些细节,请毫不犹豫地查看代码。

gcnn gcnn gcnn \(C_4\)

步骤 1:对称群 \(C_4\)

\(C_4\) \(C_4\) gcnn # remotes::install_github("skeydan/gcnn") ( ) (