如何使用 K 均值聚类来可视化 CNN 模型的学习特征?

How to use K means clustering to visualise learnt features of a CNN model?

最近我正在阅读论文:“对比损失的有趣特性”(https://arxiv.org/abs/2011.02803)。在论文(第 3.2 节)中,作者试图确定 SimCLR 框架在多大程度上允许 ResNet50 模型学习具有层次属性的良好 quality/generalised 特征。为实现这一目标,他们在 ResNet50 模型的中间特征上使用了 K 均值(块 2、3、4 的中间均值 o/p..)并引用原因 -> “如果模型学习了良好的表示,那么相似对象的区域应归为一组。

最终结果: KMeans feature visualisation

我正在尝试复制相同的过程,但使用不同的模型(如 VggNet、Xception),是否有任何资源解释如何执行此类可视化?

流程如下:

假设您想要可视化 VGG 的第 8 层。该层的输出可能具有 (64, 64, 256) 的形状(我只是取了一些随机数,这与实际的 VGG 不符)。这意味着您有 4096 个 256 维向量(对于一个特定图像)。现在您可以将 K-Means 应用于这些向量(例如具有 5 个聚类),然后根据聚类结果为您的图像着色。着色很容易,因为 64x64 特征图代表图像的缩小版本,因此您只需为每个向量的相应图像区域着色。

我不知道对多幅图像的组合输出进行 K-Means 聚类是否是个好主意,理论上在多幅图像和一张图像上进行聚类应该都能得到很好的结果(即使尽管对于许多图像,您可能会增加聚类的数量以解决特征向量中更高的变化)。