前言
PCA也是对网络特征可视化的一种方法,目的是对特征进行降维,然后通过图片的形式来对网络的特征提供一种解释。
所以,本博客提供一个将网络特征进行PCA的可视化的代码,其原理为将C通道的特征降维到3通道,即图片的RGB通道,然后直接进行可视化。
关于PCA和t-SNE的差异,可以参考我的博客:t-SNE可视化-Python实现文章来源:https://www.toymoban.com/news/detail-405399.html
源码
import os
import numpy as np
from sklearn.decomposition import PCA
def embedding_pca(embeddings, n_components=3, as_rgb=True):
'''
输入:
embeddings: 网络的特征,维度为[C, H, W]
n_components: 将网络的特征降维成多少个通道,默认为3,即图片的RGB三个通道
as_rgb: 是否转换为图片格式,默认为是
输出:
embed_flat: 一个通道数量为3的图片矩阵,维度为[H, W, 3]
函数返回的结果,可以通过cv2等工具直接保存为图片
例如: cv2.imwrite('pca.png', embed_flat)
'''
pca = PCA(n_components=n_components)
embed_dim = embeddings.shape[0]
shape = embeddings.shape[1:]
embed_flat = embeddings.reshape(embed_dim, -1).T
embed_flat = pca.fit_transform(embed_flat).T
embed_flat = embed_flat.reshape((n_components,) + shape)
if as_rgb:
embed_flat = 255 * (embed_flat - embed_flat.min()) / np.ptp(embed_flat)
embed_flat = np.transpose(embed_flat, (1,2,0))
embed_flat = embed_flat.astype('uint8')
return embed_flat
可视化结果示例
PCA可视化的结果是取的网络最后一层输出的特征(其它层的特征完全也可以),从PCA可视化中可以从特征层面可以解释网络完成了对相邻实例的区分。更多的细节可参考AAAI 2022文章:Learning to Model Pixel-Embedded Affinity for Homogeneous Instance Segmentation。文章来源地址https://www.toymoban.com/news/detail-405399.html
到了这里,关于网络特征之PCA可视化-Python实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!