val_split = 0.1 with open(annotation_path) as f: lines = f.readlines() np.random.seed(10101) np.random.shuffle(lines) np.random.seed(None) num_val = int(len(lines)*val_split) num_train = len(lines) - num_val if True: lr = 1e-4 Init_Epoch = 0 Freeze_Epoch = 25 optimizer = optim.Adam(model.parameters(),lr) lr_scheduler = optim.lr_scheduler.StepLR(optimizer,step_size=1,gamma=0.9) gen = Generator(lines[:num_train],(IMAGE_SHAPE[0],IMAGE_SHAPE[1])).generate() gen_val = Generator(lines[num_train:],(IMAGE_SHAPE[0],IMAGE_SHAPE[1])).generate() epoch_size = EPOCH_LENGTH epoch_size_val = int(EPOCH_LENGTH/10) # ------------------------------------# # 冻结一定部分训练 # ------------------------------------# for param in model.extractor.parameters(): param.requires_grad = False for epoch in range(Init_Epoch,Freeze_Epoch): fit_ont_epoch(model,epoch,epoch_size,epoch_size_val,gen,gen_val,Freeze_Epoch)
num_train = len(lines) - num_val ''' 一些建议的参数设置: VGG:SGD优化器,冻结时学习率1e-3,解冻时学习率1e-4 nets.rpn中ProposalCreator的n_train_post_nms=2000; utils.utils中ProposalTargetCreator的pos_ratio=0.25; RESNET50:Adam优化器,冻结时学习率1e-4,解冻时学习率1e-5 nets.rpn中ProposalCreator的n_train_post_nms=300; utils.utils中ProposalTargetCreator的pos_ratio=0.5; ''' if True: lr = 1e-4 Init_Epoch = 0 Freeze_Epoch = 25 optimizer = optim.Adam(model.parameters(), lr, weight_decay=5e-4) # optimizer = optim.SGD(model.parameters(),lr,weight_decay=5e-4,momentum=0.9) lr_scheduler = optim.lr_scheduler.StepLR(optimizer, step_size=1, gamma=0.95) if Use_Data_Loader: train_dataset = FRCNNDataset(lines[:num_train], (IMAGE_SHAPE[0], IMAGE_SHAPE[1])) val_dataset = FRCNNDataset(lines[num_train:], (IMAGE_SHAPE[0], IMAGE_SHAPE[1])) gen = DataLoader(train_dataset, batch_size=1, num_workers=4, pin_memory=True, drop_last=True,