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)),