如何实现 PCA 颜色增强,如 AlexNet 中所述

数据挖掘 主成分分析 卷积神经网络 数据增强
2021-09-16 17:08:19

我再次通读了“ImageNet Classification with Deep Convolutional Neural Networks”,专门了解如何实现 PCA 颜色增强的详细信息。我不确定我是否正确。这是我在 numpy 中的操作方式:

# original image is 224x224x3 of dtype uint8 

renorm_image = np.reshape(original_image,(original_image.shape[0]*original_image.shape[1],3))

renorm_image = renorm_image.astype('float32')
renorm_image -= np.mean(renorm_image, axis=0)
renorm_image /= np.std(renorm_image, axis=0)

cov = np.cov(renorm_image, rowvar=False)

lambdas, p = np.linalg.eig(cov)
alphas = np.random.normal(0, 0.1, 3)

delta = np.dot(p, alphas*lambdas)

delta = (delta*255.).astype('int8')

pca_color_image = np.maximum(np.minimum(original_image + delta, 255), 0).astype('uint8')

一个严重的疑问是“delta = (delta*255.)”这一行。我必须这样做才能重新调整数字,使数字有意义。如果这是正确的,我希望有人可以给我反馈。

1个回答

你不应该申请*255

delta应该添加到renorm_image,因为您delta使用计算了这个cov,它基于renorm_image.

那么你将如何恢复renorm_image到原始图像?*std + mean还是*255

显然你应该申请*std + mean

所以,

delta = (delta*255.).astype('int8')
pca_color_image = np.maximum(np.minimum(original_image + delta, 255), 0).astype('uint8')

应改为:

mean = np.mean(renorm_image, axis=0)
std = np.std(renorm_image, axis=0)
pca_augmentation_version_renorm_image = renorm_image + delta
pca_color_image = pca_augmentation_version_renorm_image * std + mean
pca_color_image = np.maximum(np.minimum(pca_color_image, 255), 0).astype('uint8')