模型训练时样本类别不均衡怎么办?

根据样本种类分布使用图像调用频率不同的方法解决。

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编辑  收藏  举报