模型训练时样本类别不均衡怎么办?
根据样本种类分布使用图像调用频率不同的方法解决。
1、将样本中的groundtruth读出来,存为一个列表;
2、统计训练样本列表中不同类别的矩形框个数,然后给每个类别按相应目标框数的倒数赋值,(数目越多的种类权重越小),形成按种类的分布直方图;
3、对于训练数据列表,每个epoch训练按照类别权重筛选出每类的图像作为训练数据,如使用random.choice(population, weights=None, *, cum_weights=None, k=1)更改训练图像索引,可达到样本均衡的效果。
Yolov5中此段代码解决了样本不均衡问题:
model.class_weights = labels_to_class_weights(dataset.labels, nc).to(device) * nc # attach class weights cw = model.class_weights.cpu().numpy() * (1 - maps) ** 2 / nc # class weights iw = labels_to_image_weights(dataset.labels, nc=nc, class_weights=cw) # image weights dataset.indices = random.choices(range(dataset.n), weights=iw, k=dataset.n) # rand weighted idx
posted on 2021-02-28 13:38 xiaoheizi 阅读(6558) 评论(2) 编辑 收藏 举报