updates
This commit is contained in:
parent
e4cc830690
commit
1d76751e1f
20
train.py
20
train.py
|
@ -11,19 +11,33 @@ from models import *
|
||||||
from utils.datasets import *
|
from utils.datasets import *
|
||||||
from utils.utils import *
|
from utils.utils import *
|
||||||
|
|
||||||
# Hyperparameters: train.py --evolve --epochs 2 --img-size 320, Metrics: 0.204 0.302 0.175 0.234 (square smart)
|
# Hyperparameters: train.py --data data/coco.data --img-size 320 --single-scale --batch-size 64 --accumulate 1 --epochs 1 --evolve 0.087 0.281 0.109 0.121
|
||||||
hyp = {'giou': .035, # giou loss gain
|
hyp = {'giou': .035, # giou loss gain
|
||||||
'xy': 0.20, # xy loss gain
|
'xy': 0.20, # xy loss gain
|
||||||
'wh': 0.10, # wh loss gain
|
'wh': 0.10, # wh loss gain
|
||||||
'cls': 0.035, # cls loss gain
|
'cls': 0.035, # cls loss gain
|
||||||
|
'cls_pw': 79.0, # cls BCELoss positive_weight
|
||||||
'conf': 1.61, # conf loss gain
|
'conf': 1.61, # conf loss gain
|
||||||
'conf_bpw': 3.53, # conf BCELoss positive_weight
|
'conf_pw': 3.53, # conf BCELoss positive_weight
|
||||||
'iou_t': 0.29, # iou target-anchor training threshold
|
'iou_t': 0.29, # iou target-anchor training threshold
|
||||||
'lr0': 0.001, # initial learning rate
|
'lr0': 0.001, # initial learning rate
|
||||||
'lrf': -4., # final learning rate = lr0 * (10 ** lrf)
|
'lrf': -4., # final learning rate = lr0 * (10 ** lrf)
|
||||||
'momentum': 0.90, # SGD momentum
|
'momentum': 0.90, # SGD momentum
|
||||||
'weight_decay': 0.0005} # optimizer weight decay
|
'weight_decay': 0.0005} # optimizer weight decay
|
||||||
|
|
||||||
|
# hyp = {'giou': 1.0, # giou loss gain
|
||||||
|
# 'xy': 1.0, # xy loss gain
|
||||||
|
# 'wh': 1.0, # wh loss gain
|
||||||
|
# 'cls': 1.0, # cls loss gain
|
||||||
|
# 'cls_pw': 79.0, # cls BCELoss positive_weight
|
||||||
|
# 'conf': 1.0, # conf loss gain
|
||||||
|
# 'conf_pw': 6.0, # conf BCELoss positive_weight
|
||||||
|
# 'iou_t': 0.29, # iou target-anchor training threshold
|
||||||
|
# 'lr0': 0.001, # initial learning rate
|
||||||
|
# 'lrf': -4., # final learning rate = lr0 * (10 ** lrf)
|
||||||
|
# 'momentum': 0.90, # SGD momentum
|
||||||
|
# 'weight_decay': 0.0005} # optimizer weight decay
|
||||||
|
|
||||||
|
|
||||||
def train(
|
def train(
|
||||||
cfg,
|
cfg,
|
||||||
|
@ -329,7 +343,7 @@ if __name__ == '__main__':
|
||||||
# Mutate hyperparameters
|
# Mutate hyperparameters
|
||||||
old_hyp = hyp.copy()
|
old_hyp = hyp.copy()
|
||||||
init_seeds(seed=int(time.time()))
|
init_seeds(seed=int(time.time()))
|
||||||
s = [.4, .4, .4, .4, .4, .4, .4, .4 * 0, .4 * 0, .04 * 0, .4 * 0] # fractional sigmas
|
s = [.4, .4, .4, .4, .4, .4, .4, .4, .4 * 0, .4 * 0, .04 * 0, .4 * 0] # fractional sigmas
|
||||||
for i, k in enumerate(hyp.keys()):
|
for i, k in enumerate(hyp.keys()):
|
||||||
x = (np.random.randn(1) * s[i] + 1) ** 1.1 # plt.hist(x.ravel(), 100)
|
x = (np.random.randn(1) * s[i] + 1) ** 1.1 # plt.hist(x.ravel(), 100)
|
||||||
hyp[k] = hyp[k] * float(x) # vary by about 30% 1sigma
|
hyp[k] = hyp[k] * float(x) # vary by about 30% 1sigma
|
||||||
|
|
|
@ -279,7 +279,8 @@ def compute_loss(p, targets, model, giou_loss=False): # predictions, targets, m
|
||||||
# Define criteria
|
# Define criteria
|
||||||
MSE = nn.MSELoss()
|
MSE = nn.MSELoss()
|
||||||
CE = nn.CrossEntropyLoss() # (weight=model.class_weights)
|
CE = nn.CrossEntropyLoss() # (weight=model.class_weights)
|
||||||
BCE = nn.BCEWithLogitsLoss(pos_weight=ft([h['conf_bpw']]))
|
BCEcls = nn.BCEWithLogitsLoss(pos_weight=ft([h['cls_pw']]))
|
||||||
|
BCEconf = nn.BCEWithLogitsLoss(pos_weight=ft([h['conf_pw']]))
|
||||||
|
|
||||||
# Compute losses
|
# Compute losses
|
||||||
bs = p[0].shape[0] # batch size
|
bs = p[0].shape[0] # batch size
|
||||||
|
@ -301,13 +302,17 @@ def compute_loss(p, targets, model, giou_loss=False): # predictions, targets, m
|
||||||
else:
|
else:
|
||||||
lxy += (k * h['xy']) * MSE(torch.sigmoid(pi[..., 0:2]), txy[i]) # xy loss
|
lxy += (k * h['xy']) * MSE(torch.sigmoid(pi[..., 0:2]), txy[i]) # xy loss
|
||||||
lwh += (k * h['wh']) * MSE(pi[..., 2:4], twh[i]) # wh yolo loss
|
lwh += (k * h['wh']) * MSE(pi[..., 2:4], twh[i]) # wh yolo loss
|
||||||
|
|
||||||
|
# tclsm = torch.zeros_like(pi[..., 5:])
|
||||||
|
# tclsm[range(len(b)), tcls[i]] = 1.0
|
||||||
|
# lcls += (k * h['cls']) * BCEcls(pi[..., 5:], tclsm) # class_conf loss
|
||||||
lcls += (k * h['cls']) * CE(pi[..., 5:], tcls[i]) # class_conf loss
|
lcls += (k * h['cls']) * CE(pi[..., 5:], tcls[i]) # class_conf loss
|
||||||
|
|
||||||
# # Append to text file
|
# # Append to text file
|
||||||
# with open('targets.txt', 'a') as file:
|
# with open('targets.txt', 'a') as file:
|
||||||
# [file.write('%11.5g ' * 4 % tuple(x) + '\n') for x in torch.cat((txy[i], twh[i]), 1)]
|
# [file.write('%11.5g ' * 4 % tuple(x) + '\n') for x in torch.cat((txy[i], twh[i]), 1)]
|
||||||
|
|
||||||
lconf += (k * h['conf']) * BCE(pi0[..., 4], tconf) # obj_conf loss
|
lconf += (k * h['conf']) * BCEconf(pi0[..., 4], tconf) # obj_conf loss
|
||||||
loss = lxy + lwh + lconf + lcls
|
loss = lxy + lwh + lconf + lcls
|
||||||
|
|
||||||
return loss, torch.cat((lxy, lwh, lconf, lcls, loss)).detach()
|
return loss, torch.cat((lxy, lwh, lconf, lcls, loss)).detach()
|
||||||
|
|
Loading…
Reference in New Issue