diff --git a/train.py b/train.py index 86c7e48d5a..0d41846f17 100644 --- a/train.py +++ b/train.py @@ -121,60 +121,60 @@ def train(hyp, opt, device, tb_writer=None): elif hasattr(v, 'weight') and isinstance(v.weight, nn.Parameter): pg1.append(v.weight) # apply decay if hasattr(v, 'im'): - if hasattr(v.im, 'implicit'): + if hasattr(v.im, 'implicit'): pg0.append(v.im.implicit) else: for iv in v.im: pg0.append(iv.implicit) if hasattr(v, 'imc'): - if hasattr(v.imc, 'implicit'): + if hasattr(v.imc, 'implicit'): pg0.append(v.imc.implicit) else: for iv in v.imc: pg0.append(iv.implicit) if hasattr(v, 'imb'): - if hasattr(v.imb, 'implicit'): + if hasattr(v.imb, 'implicit'): pg0.append(v.imb.implicit) else: for iv in v.imb: pg0.append(iv.implicit) if hasattr(v, 'imo'): - if hasattr(v.imo, 'implicit'): + if hasattr(v.imo, 'implicit'): pg0.append(v.imo.implicit) else: for iv in v.imo: pg0.append(iv.implicit) if hasattr(v, 'ia'): - if hasattr(v.ia, 'implicit'): + if hasattr(v.ia, 'implicit'): pg0.append(v.ia.implicit) else: for iv in v.ia: pg0.append(iv.implicit) if hasattr(v, 'attn'): - if hasattr(v.attn, 'logit_scale'): + if hasattr(v.attn, 'logit_scale'): pg0.append(v.attn.logit_scale) - if hasattr(v.attn, 'q_bias'): + if hasattr(v.attn, 'q_bias'): pg0.append(v.attn.q_bias) - if hasattr(v.attn, 'v_bias'): + if hasattr(v.attn, 'v_bias'): pg0.append(v.attn.v_bias) - if hasattr(v.attn, 'relative_position_bias_table'): + if hasattr(v.attn, 'relative_position_bias_table'): pg0.append(v.attn.relative_position_bias_table) if hasattr(v, 'rbr_dense'): - if hasattr(v.rbr_dense, 'weight_rbr_origin'): + if hasattr(v.rbr_dense, 'weight_rbr_origin'): pg0.append(v.rbr_dense.weight_rbr_origin) - if hasattr(v.rbr_dense, 'weight_rbr_avg_conv'): + if hasattr(v.rbr_dense, 'weight_rbr_avg_conv'): pg0.append(v.rbr_dense.weight_rbr_avg_conv) - if hasattr(v.rbr_dense, 'weight_rbr_pfir_conv'): + if hasattr(v.rbr_dense, 'weight_rbr_pfir_conv'): pg0.append(v.rbr_dense.weight_rbr_pfir_conv) - if hasattr(v.rbr_dense, 'weight_rbr_1x1_kxk_idconv1'): + if hasattr(v.rbr_dense, 'weight_rbr_1x1_kxk_idconv1'): pg0.append(v.rbr_dense.weight_rbr_1x1_kxk_idconv1) - if hasattr(v.rbr_dense, 'weight_rbr_1x1_kxk_conv2'): + if hasattr(v.rbr_dense, 'weight_rbr_1x1_kxk_conv2'): pg0.append(v.rbr_dense.weight_rbr_1x1_kxk_conv2) - if hasattr(v.rbr_dense, 'weight_rbr_gconv_dw'): + if hasattr(v.rbr_dense, 'weight_rbr_gconv_dw'): pg0.append(v.rbr_dense.weight_rbr_gconv_dw) - if hasattr(v.rbr_dense, 'weight_rbr_gconv_pw'): + if hasattr(v.rbr_dense, 'weight_rbr_gconv_pw'): pg0.append(v.rbr_dense.weight_rbr_gconv_pw) - if hasattr(v.rbr_dense, 'vector'): + if hasattr(v.rbr_dense, 'vector'): pg0.append(v.rbr_dense.vector) if opt.adam: @@ -647,13 +647,14 @@ def train(hyp, opt, device, tb_writer=None): 'mosaic': (1, 0.0, 1.0), # image mixup (probability) 'mixup': (1, 0.0, 1.0), # image mixup (probability) 'copy_paste': (1, 0.0, 1.0), # segment copy-paste (probability) - 'paste_in': (1, 0.0, 1.0)} # segment copy-paste (probability) - + 'paste_in': (1, 0.0, 1.0), # segment paste_in (probability) + 'loss_ota': (1, 0, 1)} # adding loss_ota in the mutation compute, evolve will fail without this + with open(opt.hyp, errors='ignore') as f: hyp = yaml.safe_load(f) # load hyps dict if 'anchors' not in hyp: # anchors commented in hyp.yaml hyp['anchors'] = 3 - + assert opt.local_rank == -1, 'DDP mode not implemented for --evolve' opt.notest, opt.nosave = True, True # only test/save final epoch # ei = [isinstance(x, (int, float)) for x in hyp.values()] # evolvable indices @@ -668,7 +669,10 @@ def train(hyp, opt, device, tb_writer=None): x = np.loadtxt('evolve.txt', ndmin=2) n = min(5, len(x)) # number of previous results to consider x = x[np.argsort(-fitness(x))][:n] # top n mutations - w = fitness(x) - fitness(x).min() # weights + #w = fitness(x) - fitness(x).min() # weights + # fix for non-zero hyperparameter evaluation weights + # https://github.com/ultralytics/yolov5/commit/e095b743f0ecaf8b3aa3cb6c7c6fa684c4eb7489 + w = fitness(x) - fitness(x).min() + 1E-6 # weights (sum > 0) if parent == 'single' or len(x) == 1: # x = x[random.randint(0, n - 1)] # random selection x = x[random.choices(range(n), weights=w)[0]] # weighted selection