这个问题是跑b站作者bubbliiiing写的YOLOv4(pytorch版本)代码中出现的问题,具体是计算CIoU的过程中需要将mask的值转化为bool型,作者直接采用的mask.bool,
ciou = ( 1 - box_ciou( pred_boxes_for_ciou[mask.bool], t_box[mask.bool] ) ) * box_loss_scale[mask.bool]
这个也是版本的问题,将pytorch版本换到1.2.0以上应该就可以解决,不过我的9.0版本的显卡最高也就只能装1.0.1版本,所以心态有点崩,不过最终还是解决了,既然作者用的是新版本的转化方式,那旧版本也应该有旧版本的转化方式,结果查询旧版本的更改方式,然后改为mask.type(torch.bool)就可以了。
ciou = ( 1 - box_ciou( pred_boxes_for_ciou[mask.type(torch.bool)], t_box[mask.type(torch.bool)] ) ) * box_loss_scale[mask.type(torch.bool)]
方法二:
pool_sum = pool_sum.masked_fill_((1 - att).bool(), -5e4)
也是报错# 报错AttributeError: 'Tensor' object has no attribute 'bool',这里可以将bool()改为byte()
即
pool_sum = pool_sum.masked_fill_((1 - att).byte(), -5e4)