device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model_dict = model.state_dict() pretrained_dict = torch.load(model_path, map_location=device) pretrained_dict = {k: v for k, v in pretrained_dict.items() if np.shape(model_dict[k]) == np.shape(v)} model_dict.update(pretrained_dict) model.load_state_dict(model_dict) print('Finished!') net = model.train() if Cuda: net = torch.nn.DataParallel(model) cudnn.benchmark = True net = net.cuda() yolo_loss = YOLOLoss(np.reshape(anchors,[-1,2]), num_classes, (input_shape[1], input_shape[0]), smoooth_label, Cuda, normalize) loss_history = LossHistory("logs/") #----------------------------------------------------# # 获得图片路径和标签 #----------------------------------------------------# annotation_path = '2007_train.txt' #----------------------------------------------------------------------# # 验证集的划分在train.py代码里面进行 # 2007_test.txt和2007_val.txt里面没有内容是正常的。训练不会使用到。 # 当前划分方式下,验证集和训练集的比例为1:9 #----------------------------------------------------------------------# val_split = 0.1 with open(annotation_path) as f: lines = f.readlines() np.random.seed(10101)
model_dict.update(pretrained_dict) model.load_state_dict(model_dict) print('Finished!') net = model.train() if Cuda: net = torch.nn.DataParallel(model) cudnn.benchmark = True # net = net.cuda() net = net.cpu() # 建立loss函数 yolo_losses = [] for i in range(3): yolo_losses.append(YOLOLoss(np.reshape(Config["yolo"]["anchors"],[-1,2]), Config["yolo"]["classes"], (Config["img_w"], Config["img_h"]), Cuda, normalize)) #----------------------------------------------------# # 获得图片路径和标签 #----------------------------------------------------# annotation_path = '2007_train.txt' #----------------------------------------------------------------------# # 验证集的划分在train.py代码里面进行 # 2007_test.txt和2007_val.txt里面没有内容是正常的。训练不会使用到。 # 当前划分方式下,验证集和训练集的比例为1:9 #----------------------------------------------------------------------# val_split = 0.1 with open(annotation_path) as f: lines = f.readlines() np.random.seed(10101) np.random.shuffle(lines)
model.load_state_dict(model_dict) print('Finished!') net = model.train() if Cuda: net = torch.nn.DataParallel(model) cudnn.benchmark = True net = net.cuda() # 建立loss函数 yolo_losses = [] for i in range(3): yolo_losses.append( YOLOLoss(np.reshape(Config["yolo"]["anchors"], [-1, 2]), Config["yolo"]["classes"], (Config["img_w"], Config["img_h"]), Cuda)) # 0.1用于验证,0.9用于训练 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: # 最开始使用1e-3的学习率可以收敛的更快 lr = 1e-3
} model_dict.update(pretrained_dict) model.load_state_dict(model_dict) print('Finished!') net = model.train() if Cuda: net = torch.nn.DataParallel(model) cudnn.benchmark = True net = net.cuda() # 建立loss函数 yolo_losses = [] for i in range(3): yolo_losses.append(YOLOLoss(np.reshape(anchors,[-1,2]),num_classes, \ (input_shape[1], input_shape[0]), smoooth_label, Cuda)) # 0.1用于验证,0.9用于训练 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-3 Batch_size = 2 Init_Epoch = 0
net = torch.nn.DataParallel(model) # 在开始训练时花费一点额外时间,为整个网络的每个卷积层搜索最适合它的卷积实现算法 cudnn.benchmark = True net = net.cuda() #-----------------------------------# # 建立loss函数 #-----------------------------------# yolo_losses = [] # 3因为有13、26、52三种尺寸的输出 for i in range(3): yolo_losses.append( YOLOLoss( # 把anchors调整为[w, h]的格式,倒序是因为13、26、52的feature map分别对应大、中、小的anchor np.reshape(anchors, [-1, 2])[::-1, :], num_classes, input_shape, smoooth_label, Cuda)) #-----------------------------------# # 第一阶段训练 #-----------------------------------# # 初始学习率 lr = 1e-3 Batch_size = 4 Init_Epoch = 0 End_Epoch = 50 # 设置优化器 optimizer = optim.Adam(net.parameters(), lr, weight_decay=5e-4)
pretrained_dict = torch.load(model_path, map_location=device) pretrained_dict = { k: v for k, v in pretrained_dict.items() if np.shape(model_dict[k]) == np.shape(v) } model_dict.update(pretrained_dict) model.load_state_dict(model_dict) model_train = model.train() if Cuda: model_train = torch.nn.DataParallel(model) cudnn.benchmark = True model_train = model_train.cuda() yolo_loss = YOLOLoss(anchors, num_classes, input_shape, Cuda, anchors_mask, label_smoothing) loss_history = LossHistory("logs/") #---------------------------# # 读取数据集对应的txt #---------------------------# with open(train_annotation_path) as f: train_lines = f.readlines() with open(val_annotation_path) as f: val_lines = f.readlines() num_train = len(train_lines) num_val = len(val_lines) #------------------------------------------------------# # 主干特征提取网络特征通用,冻结训练可以加快训练速度 # 也可以在训练初期防止权值被破坏。
#------------------------------------------------------# print('Load weights {}.'.format(model_path)) device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model_dict = model.state_dict() pretrained_dict = torch.load(model_path, map_location = device) pretrained_dict = {k: v for k, v in pretrained_dict.items() if np.shape(model_dict[k]) == np.shape(v)} model_dict.update(pretrained_dict) model.load_state_dict(model_dict) model_train = model.train() if Cuda: model_train = torch.nn.DataParallel(model) cudnn.benchmark = True model_train = model_train.cuda() yolo_loss = YOLOLoss(anchors, num_classes, input_shape, Cuda, anchors_mask) loss_history = LossHistory("logs/") #---------------------------# # 读取数据集对应的txt #---------------------------# with open(train_annotation_path) as f: train_lines = f.readlines() with open(val_annotation_path) as f: val_lines = f.readlines() num_train = len(train_lines) num_val = len(val_lines) #------------------------------------------------------# # 主干特征提取网络特征通用,冻结训练可以加快训练速度 # 也可以在训练初期防止权值被破坏。
model_dict.update(pretrained_dict) model.load_state_dict(model_dict) print('Finished!') net = model.train() if Cuda: net = torch.nn.DataParallel(model) cudnn.benchmark = True net = net.cuda() # 建立loss函数 yolo_losses = [] for i in range(3): yolo_losses.append( YOLOLoss(np.reshape(anchors, [-1, 2]), num_classes, (input_shape[1], input_shape[0]), smoooth_label, Cuda)) # 0.2用于验证,0.9用于训练 val_split = 0.2 with open(annotation_path) as f: lines = f.readlines() n = len(lines) list = range(n) 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 num_val = int(n * val_split) valid = random.sample(list, num_val) # 将验证数据写入txt文件