FangShancheng / ABINet

Read Like Humans: Autonomous, Bidirectional and Iterative Language Modeling for Scene Text Recognition
Other
436 stars 73 forks source link

关于demo和evaluation预处理问题 #69

Closed Topdu closed 2 years ago

Topdu commented 2 years ago

您好: demo.py中的数据预处理和evaluation时的预处理似乎不太一样,demo.py对数据进行了-mean/std的操作,而evaluation没有进行这样的操作,请问为什么demo和evaluation没有保持一致的预处理操作呢?

FangShancheng commented 2 years ago

您好,是一样的,训练阶段的直接使用fast ai的封装函数处理

Topdu commented 2 years ago

感谢解答!

Topdu commented 1 year ago

关于数据增强的问题: 在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就是固定的,并不会每次再随机选择,这就会造成训练的时候,只使用了其中一种增强方式,显然这样是不合理的,不知道这样安排数据增强有其他的用意吗?