将2张图像按照一定比例进行混合,常用于图像分类。
原图如下:
mixup后:
按照0.5的比例进行混合。
代码如下:
import cv2
image1 = cv2.imread('hongxiancai125.jpg')
image1 = cv2.resize(image1,(600,600))
image2 = cv2.imread('huluobo1.jpg')
image2 = cv2.resize(image2,(600,600))
new_image = image1*0.5 + image2*0.5
cv2.imwrite('mixup.jpg', new_image)
随机比例alpha:
import numpy as np
# alpha为混合的比例
lam = np.random.beta(alpha, alpha)
使用到分类中:
alpha = 1.0 # 默认设置为1
criterion = nn.CrossEntropyLoss()
for (inputs, labels) in train_loader:
lam = np.random.beta(alpha, alpha)
index = torch.randperm(inputs.size(0))
images_a, images_b = inputs, inputs[index]
labels_a, labels_b = labels, labels[index]
mixed_images = lam * images_a + (1 - lam) * images_b
outputs = model(mixed_images)
_, preds = torch.max(outputs, 1)
loss = lam * criterion(outputs, labels_a) + (1 - lam) * criterion(outputs, labels_b)