一些个人理解,不是专业术语~~
code:
https://github.com/ultralytics/yolov5
参数设置:
–rect:开启矩形训练
–noautoanchor:触发关闭auto anchor
def metric(k): # compute metric
r = wh[:, None] / k[None]
x = torch.min(r, 1 / r).min(2)[0] # ratio metric
best = x.max(1)[0] # best_x
aat = (x > 1 / thr).float().sum(1).mean() # anchors above threshold
bpr = (best > 1 / thr).float().mean() # best possible recall
return bpr, aat
wh:所有GT的宽高;
k:所有anchor的宽高;
r:w_GT/w_anchor与h_GT/h_anchor;
torch.min(r, 1 / r):将所有的w_GT/w_anchor、h_GT/h_anchor统一到小于1;
x = torch.min(r, 1 / r).min(2)[0]:看每一组对应的w_GT/w_anchor、h_GT/h_anchor两个数值,哪个更小保留下来,也就是保留和anchor最不像的那个边长特征,x的shape为(n,9);
best = x.max(1)[0]:每9个里面最不像anchor的特征已经保留下来了,现在就看保留下来的这些特征里面选一个比较接近anchor的(意思就是不需要每个anchor都像,有一个就行);
bpr:比较接近的那个特征和thr作比较,可以的就置为1,看多少GT和anchor比较像;
(后面代码)如果这个相似度大于0.98了,就不进行autoanchor了;如果小于0.98,就根据kmeans和遗传算法重新计算anchors。
–evolve:进化超参数,网上资料表明开启后会慢数倍,非研究目的建议使用默认值
–bucke:上传结果等到谷歌云盘
–image-weights:更改类权重
–linear-lr:是否使用线性学习率,默认使用cosine lr
–label-smoothing:防止过拟合,标签平滑,弱化单个标签的作用
–patience:早停机制