Hi @ptrblck, reading a lot of iterature the OHNM is being suggested as a method to be used with background class (say for object detection). Does it really work? This is my implementation of ohnm where I sort losses from each image from a batch and create a boolean mask for values >top_k:
loss = F.cross_entropy(logits, batch_labels , weight=class_weights, reduction='none') batch_size = loss.shape for i in range(batch_size): i_loss = loss[i] k_per = 0.9 loss_sorted=torch.sort(i_loss.flatten()) loss_len=len(loss_sorted) top_k_index = int(k_per*loss_len) ohnm_thresh = loss_sorted[top_k_index] loss_ohnm = i_loss>ohnm_thresh loss[i] = loss[i]*loss_ohnm loss = loss.sum()/class_weights[batch_labels].sum()
My question is, how does OHNM help and should it only be applied on the background?