Car196调参踩坑记录——数据增广的反思

Car196调参踩坑记录——数据增广的反思

# 1. ResNet50

第一组参数:

对于细粒度分割,由于要靠车神身细节判断,想来应该不能直接RandomResizedCrop(),所以直接Resize 然后 CenterCrop,用比较保守的增广参数。

由于有192类,所以希望一个batch里能能有足够多的类别,不然感觉梯度下降训不出来,所以尽可能提高batchsize,最后调到72.

lr = 0.002 结果训练不出来。。。两个epoch后train acc只有2%

调整至lr = 0.001,训了150个epochs左右,花了2d时间,train acc可以到99%,但是valid acc只有65%。。。

迷了,觉得应该是数据增广过于保守。(0V0)

数据增广如下

transforms.Compose(
                transforms.ColorJitter(brightness=0.1, contrast=0.1, saturation=0.1, hue=0.1),#0.5,0.5,0.5,0.5
                transforms.RandomAffine(degrees = 0,translate=(0.1,0.1)),#
                transforms.RandomRotation(40),
                transforms.RandomGrayscale(p=0.3),
                transforms.RandomVerticalFlip(p=0.5),
                transforms.RandomHorizontalFlip(p=0.5),
                transforms.Resize(size = (input_size,input_size)),
                transforms.CenterCrop(size = (input_size,input_size)),
                transforms.ToTensor(),
                transforms.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),
            ]

第二组参数:

lr = 0.001 ,decay 0.8 by 100 epoch,数据增广如下

transforms.Compose(
                transforms.ColorJitter(brightness=0.4, contrast=0.4, saturation=0.4, hue=0.4),#0.5,0.5,0.5,0.5
                transforms.RandomAffine(degrees = 10,translate=(0.1,0.1)),#
                transforms.RandomRotation(180),
                transforms.RandomGrayscale(p=0.3),
                transforms.RandomChoice([transforms.GaussianBlur(11),transforms.GaussianBlur(5),transforms.RandomGrayscale(p=0.3),transforms.RandomEqualize(p=0.3)]),
                transforms.RandomVerticalFlip(p=0.5),
                transforms.RandomHorizontalFlip(p=0.5),
                transforms.RandomResizedCrop(input_size),
                transforms.ToTensor(),
                transforms.RandomErasing(p = 0.5,value = 'random'),
                transforms.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),
            ]

结果:

epoch:400个 ,花时间4d+

Train: 80% 左右

Acc: 60% 左右

哭了,几天时间浪费掉。

第三组参数

查了Github上Car196的训练记录,

首先是这个:

看了论文,模型调整的地方不多,但是真的搞不懂为啥Acc这么高,数据增广感觉也没啥特别的:

ImageDataGenerator(rotation_range=20.,
                  width_shift_range=0.1,
                  height_shift_range=0.1,
                  zoom_range=0.2,
                  rescale=1. / 255,
                  horizontal_flip = True)

之后又找到了这个:

代码比较整洁,于是参考了这个代码进行训练。

结果一看,人家的batchsize = 128 哭了。。。我colab只有16G。。。(25G感觉是虚标)

但是人家的learning rate很大,特别大,lr = 0.2

我很震惊,意识到是不是之前都陷入了local minimum。

然后用batchsize = 36,lr= 0.02 进行训练,结果果然好了许多。

人家的数据增广策略也是如此简单,相比之下我精心设计的数据增广策略就是绣花针上战场——吃力不讨好。

transforms.Compose(
                transforms.RandomResizedCrop(input_size),
                transforms.RandomHorizontalFlip(p=0.5),
                transforms.ToTensor(),
                transforms.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)),
        )

2, ResNet 152

理论上ResNet152应该效果更好吧。

第一次训练

这时还没有找到那个github,lr = 0.001,batchsize = 36 开训。

100个epoch 1整天

train acc 93% ; val acc 62% 哭了。世界欺负我

还是用花里胡哨的数据增广策略:

transforms.Compose(
                transforms.ColorJitter(brightness=0.4, contrast=0.4, saturation=0.4, hue=0.4),#0.5,0.5,0.5,0.5
                # transforms.RandomChoice([transforms.MotionBlur(blur_limit=3),transforms.MedianBlur(blur_limit=3), transforms.GaussianBlur(blur_limit=3),], p=0.5,),
                transforms.RandomAffine(degrees = 0,translate=(0.1,0.1)),#
                transforms.RandomRotation(40),
                transforms.RandomGrayscale(p=0.3),
                # transforms.RandomChoice([transforms.GaussianBlur(11),transforms.GaussianBlur(5),transforms.RandomGrayscale(p=0.3),transforms.RandomEqualize(p=0.3)]),
                transforms.RandomVerticalFlip(p=0.5),
                transforms.RandomHorizontalFlip(p=0.5),
                # transforms.RandomResizedCrop(input_size),
                transforms.Resize(size = (input_size,input_size)),