群等变网络的pytorch实现

时间:2022-11-02 07:53:14

CNN对于旋转不具有等变性,对于平移有等变性,data augmentation的提出就是为了解决这个问题,但是data augmentation需要很大的模型容量,更多的迭代次数才能够在训练数据集合上对旋转等变,对于测试集合,也不一定能够保证等变

可能大家会问,旋转等变网络有什么优点?data augmentation有什么优点,旋转等变网络就有什么优点,比如,不同方向的狗,转了一个方向之后还是一个狗,cnn希望经过多层卷积之后的feature也只是转了一个方向。16年的一篇ICML论文应运而生。

给出链接

Group Equivariant Convolutional Networks ,视频,https://archive.org/details/Redwood_Center_2016_06_27_Taco_Cohen, 代码:https://github.com/tscohen/GrouPy

这里给出github上的一个pytorch实现的版本

代码链接:https://github.com/adambielski/pytorch-gconv-experiments,很强

实际上18年有一篇论文讲述了如何用群等边网络来进行病理图片的分割,题目为Rotation Equivariant CNNs for Digital Pathology

里面有一张图讲述群等变网络讲的很清楚,拷贝过来给大家讲一下,英文好的还可以看有两个视频https://www.youtube.com/watch?time_continue=1586&v=TlzRyHbWeP0

tohen亲自讲的也有一个:https://archive.org/details/Redwood_Center_2016_06_27_Taco_Cohen

图片如下

群等变网络的pytorch实现

上面这个图表示的是经过旋转之后的图片,输出的feature map具有等变性。

通过debug pytorch的代码,能够了解具体操作的过程是,Z2-P4卷积是将kernel旋转四次,分别与输入的图片做卷积,而P4-P4卷积是对于输出的4个feature map,分别将四个kernel绕着顺时针方向转动90°,同时kernel自身也转动90°,这样的四种状态分别与输出的不动的feature map分别做卷积,每一种状态做卷积之后的输出结果四个相加,这样为一个featuremap,四个状态对应4个feature map,即为最终的输出,那这样又为什么会学习到一个旋转不变的性质呢?因为同一个kernel的四种状态对于不同的feature map应该是能够得到一个p4的约束,所以能够学习到一个旋转等变的性质