【阿里天池新人赛】之街景字符识别(5)
正式赛时间:2020.5.14-2020.6.24
比赛网址:https://tianchi.aliyun.com/competition/entrance/531795/introduction
上次介绍了如何预测模型和提交结果,这次介绍一些细节提升分数。
1.模型更换
模型有很多,都可以进行尝试,ResNet、VGG、Inception v3、EfficientNet等等,但是注意模型过拟合问题,需要恰当选取。
ResNet50
model_conv = models.resnet50(pretrained=True)
# print(model_conv)
model_conv.avgpool = nn.AdaptiveAvgPool2d(1)
num_ftrs = model_conv.fc.in_features
model_conv = nn.Sequential(*list(model_conv.children())[:-1])
print(model_conv)
EfficientNet
model_conv = EfficientNet.from_pretrained('efficientnet-b2', num_classes=11)
print(model_conv)
num_ftrs = model_conv._fc.in_features
model_conv = nn.Sequential(*list(model_conv.children())[:-3])
2.数据增广
尝试更多的数据增广策略,降低位置敏感性。
train_transform = transforms.Compose([transforms.Resize((64, 128)),
transforms.RandomCrop((60, 120)),
transforms.ColorJitter(0.3, 0.3, 0.2),
transforms.RandomRotation(5),
transforms.ToTensor(),
transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])
3.设置多学习率
设置不同学习率和学习率下降策略。
# conv 小学习率
flag = 0
# flag = 1
if flag:
fc_params_id = list(map(id, resnet18_ft.fc.parameters())) # 返回的是parameters的 内存地址
base_params = filter(lambda p: id(p) not in fc_params_id, resnet18_ft.parameters())
optimizer = optim.SGD([
{'params': base_params, 'lr': LR*0}, # 0
{'params': resnet18_ft.fc.parameters(), 'lr': LR}], momentum=0.9)
else:
optimizer = optim.SGD(resnet18_ft.parameters(), lr=LR, momentum=0.9) # 选择优化器
# optimizer = optim.Adam(resnet18_ft.parameters(), lr=1e-3)
scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=lr_decay_step, gamma=0.3) # 设置学习率下降策略
4.更换解决思路
要想获得高分,需要结合比赛提供的位置标注信息,可以采取先进行检测,再进行识别问题;或者采用通用的OCR识别思路,RNN+CTC等。