Closed Topdu closed 2 years ago
您好,是一样的,训练阶段的直接使用fast ai的封装函数处理
感谢解答!
关于数据增强的问题: 在dataset中,初始化了数据增强的op:
if self.is_training and self.data_aug:
self.augment_tfs = transforms.Compose([
CVGeometry(degrees=45, translate=(0.0, 0.0), scale=(0.5, 2.), shear=(45, 15), distortion=0.5, p=0.5),
CVDeterioration(var=20, degrees=6, factor=4, p=0.25),
CVColorJitter(brightness=0.5, contrast=0.5, saturation=0.5, hue=0.1, p=0.25)
])
其中CVGeometry类在初始化数据增强方法时,采用随机的方法:
class CVGeometry(object):
def __init__(self, degrees=15, translate=(0.3, 0.3), scale=(0.5, 2.),
shear=(45, 15), distortion=0.5, p=0.5):
self.p = p
type_p = random.random()
if type_p < 0.33:
self.transforms = CVRandomRotation(degrees=degrees)
elif type_p < 0.66:
self.transforms = CVRandomAffine(degrees=degrees, translate=translate, scale=scale, shear=shear)
else:
self.transforms = CVRandomPerspective(distortion=distortion)
def __call__(self, img):
if random.random() < self.p:
img = np.array(img)
return Image.fromarray(self.transforms(img))
else: return img
虽然在初始化时随机选择了增强方式,但是一旦实例化对象后,这个self.transforms就是固定的,并不会每次再随机选择,这就会造成训练的时候,只使用了其中一种增强方式,显然这样是不合理的,不知道这样安排数据增强有其他的用意吗?
您好: demo.py中的数据预处理和evaluation时的预处理似乎不太一样,demo.py对数据进行了-mean/std的操作,而evaluation没有进行这样的操作,请问为什么demo和evaluation没有保持一致的预处理操作呢?