updates
This commit is contained in:
parent
a95e47533a
commit
5f04b93b42
48
train.py
48
train.py
|
@ -10,6 +10,19 @@ from models import *
|
||||||
from utils.datasets import *
|
from utils.datasets import *
|
||||||
from utils.utils import *
|
from utils.utils import *
|
||||||
|
|
||||||
|
# Initialize hyperparameters
|
||||||
|
hyp = {'k': 8.4875, # loss multiple
|
||||||
|
'xy': 0.079756, # xy loss fraction
|
||||||
|
'wh': 0.010461, # wh loss fraction
|
||||||
|
'cls': 0.02105, # cls loss fraction
|
||||||
|
'conf': 0.88873, # conf loss fraction
|
||||||
|
'iou_t': 0.1, # iou target-anchor training threshold
|
||||||
|
'lr0': 0.001, # initial learning rate
|
||||||
|
'lrf': -2., # final learning rate = lr0 * (10 ** lrf)
|
||||||
|
'momentum': 0.9, # SGD momentum
|
||||||
|
'weight_decay': 0.0005, # optimizer weight decay
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
def train(
|
def train(
|
||||||
cfg,
|
cfg,
|
||||||
|
@ -42,19 +55,6 @@ def train(
|
||||||
# Initialize model
|
# Initialize model
|
||||||
model = Darknet(cfg, img_size).to(device)
|
model = Darknet(cfg, img_size).to(device)
|
||||||
|
|
||||||
# Initialize hyperparameters
|
|
||||||
hyp = {'k': 8.4875, # loss multiple
|
|
||||||
'xy': 0.079756, # xy loss fraction
|
|
||||||
'wh': 0.010461, # wh loss fraction
|
|
||||||
'cls': 0.02105, # cls loss fraction
|
|
||||||
'conf': 0.88873, # conf loss fraction
|
|
||||||
'iou_t': 0.1, # iou target-anchor training threshold
|
|
||||||
'lr0': 0.001, # initial learning rate
|
|
||||||
'lrf': -2., # final learning rate = lr0 * (10 ** lrf)
|
|
||||||
'momentum': 0.9, # SGD momentum
|
|
||||||
'weight_decay': 0.0005, # optimizer weight decay
|
|
||||||
}
|
|
||||||
|
|
||||||
# Optimizer
|
# Optimizer
|
||||||
optimizer = optim.SGD(model.parameters(), lr=hyp['lr0'], momentum=hyp['momentum'], weight_decay=hyp['weight_decay'])
|
optimizer = optim.SGD(model.parameters(), lr=hyp['lr0'], momentum=hyp['momentum'], weight_decay=hyp['weight_decay'])
|
||||||
|
|
||||||
|
@ -93,6 +93,12 @@ def train(
|
||||||
# scheduler = optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lf, last_epoch=start_epoch - 1)
|
# scheduler = optim.lr_scheduler.LambdaLR(optimizer, lr_lambda=lf, last_epoch=start_epoch - 1)
|
||||||
scheduler = optim.lr_scheduler.MultiStepLR(optimizer, milestones=[218, 245], gamma=0.1, last_epoch=start_epoch - 1)
|
scheduler = optim.lr_scheduler.MultiStepLR(optimizer, milestones=[218, 245], gamma=0.1, last_epoch=start_epoch - 1)
|
||||||
|
|
||||||
|
# y = []
|
||||||
|
# for epoch in range(epochs):
|
||||||
|
# scheduler.step()
|
||||||
|
# y.append(optimizer.param_groups[0]['lr'])
|
||||||
|
# plt.plot(y)
|
||||||
|
|
||||||
# Dataset
|
# Dataset
|
||||||
dataset = LoadImagesAndLabels(train_path, img_size=img_size, augment=True)
|
dataset = LoadImagesAndLabels(train_path, img_size=img_size, augment=True)
|
||||||
|
|
||||||
|
@ -124,6 +130,7 @@ def train(
|
||||||
model.hyp = hyp # attach hyperparameters to model
|
model.hyp = hyp # attach hyperparameters to model
|
||||||
model_info(model)
|
model_info(model)
|
||||||
nb = len(dataloader)
|
nb = len(dataloader)
|
||||||
|
results = (0, 0, 0, 0, 0) # P, R, mAP, F1, test_loss
|
||||||
n_burnin = min(round(nb / 5 + 1), 1000) # burn-in batches
|
n_burnin = min(round(nb / 5 + 1), 1000) # burn-in batches
|
||||||
os.remove('train_batch0.jpg') if os.path.exists('train_batch0.jpg') else None
|
os.remove('train_batch0.jpg') if os.path.exists('train_batch0.jpg') else None
|
||||||
os.remove('test_batch0.jpg') if os.path.exists('test_batch0.jpg') else None
|
os.remove('test_batch0.jpg') if os.path.exists('test_batch0.jpg') else None
|
||||||
|
@ -192,12 +199,8 @@ def train(
|
||||||
print('multi_scale img_size = %g' % dataset.img_size)
|
print('multi_scale img_size = %g' % dataset.img_size)
|
||||||
|
|
||||||
# Calculate mAP
|
# Calculate mAP
|
||||||
if opt.nosave and epoch < 10:
|
if not opt.nosave or epoch > 10: # skip testing first 10 epochs if opt.nosave
|
||||||
results = (0, 0, 0, 0, 0)
|
results = test.test(cfg, data_cfg, batch_size=batch_size, img_size=img_size, model=model, conf_thres=0.1)
|
||||||
else:
|
|
||||||
with torch.no_grad():
|
|
||||||
results = test.test(cfg, data_cfg, batch_size=batch_size, img_size=img_size, model=model,
|
|
||||||
conf_thres=0.1)
|
|
||||||
|
|
||||||
# Write epoch results
|
# Write epoch results
|
||||||
with open('results.txt', 'a') as file:
|
with open('results.txt', 'a') as file:
|
||||||
|
@ -232,6 +235,8 @@ def train(
|
||||||
# Delete checkpoint
|
# Delete checkpoint
|
||||||
del chkpt
|
del chkpt
|
||||||
|
|
||||||
|
return results
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
|
@ -239,7 +244,7 @@ if __name__ == '__main__':
|
||||||
parser.add_argument('--batch-size', type=int, default=16, help='size of each image batch')
|
parser.add_argument('--batch-size', type=int, default=16, help='size of each image batch')
|
||||||
parser.add_argument('--accumulate', type=int, default=1, help='accumulate gradient x batches before optimizing')
|
parser.add_argument('--accumulate', type=int, default=1, help='accumulate gradient x batches before optimizing')
|
||||||
parser.add_argument('--cfg', type=str, default='cfg/yolov3-spp.cfg', help='cfg file path')
|
parser.add_argument('--cfg', type=str, default='cfg/yolov3-spp.cfg', help='cfg file path')
|
||||||
parser.add_argument('--data-cfg', type=str, default='data/coco.data', help='coco.data file path')
|
parser.add_argument('--data-cfg', type=str, default='data/coco_1img.data', help='coco.data file path')
|
||||||
parser.add_argument('--multi-scale', action='store_true', help='random image sizes per batch 320 - 608')
|
parser.add_argument('--multi-scale', action='store_true', help='random image sizes per batch 320 - 608')
|
||||||
parser.add_argument('--img-size', type=int, default=416, help='pixels')
|
parser.add_argument('--img-size', type=int, default=416, help='pixels')
|
||||||
parser.add_argument('--resume', action='store_true', help='resume training flag')
|
parser.add_argument('--resume', action='store_true', help='resume training flag')
|
||||||
|
@ -255,8 +260,7 @@ if __name__ == '__main__':
|
||||||
print(opt, end='\n\n')
|
print(opt, end='\n\n')
|
||||||
|
|
||||||
init_seeds()
|
init_seeds()
|
||||||
|
results = train(
|
||||||
train(
|
|
||||||
opt.cfg,
|
opt.cfg,
|
||||||
opt.data_cfg,
|
opt.data_cfg,
|
||||||
img_size=opt.img_size,
|
img_size=opt.img_size,
|
||||||
|
|
Loading…
Reference in New Issue