问题
完整报错:
RuntimeError: CUDA error: device-side assert triggered
CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect.
For debugging consider passing CUDA_LAUNCH_BLOCKING=1.
Compile with TORCH_USE_CUDA_DSA to enable device-side assertions.
常见的错误原因及解决办法
1、输出层的分类数与模型本身输出的类别数不匹配:
比如在语义分割中,pascal voc 2012数据集有21个类别,但是我设置num_classes=3,就会出现此错误。这种情况下只需要正确调整num_classes值就可以,这种原因及解决办法是最简单也是最常见的。
2、数据集中标签的像素值超过类别数:
举个例子,在天普大学crack500数据集中,类别为裂缝及背景两个类别,但是我们在查看标签像素值时发现如下情况,该标签前景像素值为200+,已经远大于2,且背景像素值也有非0值(大于2),所以会出现此类报错。此时,我们只需要将像素值调整为0和1就好,即大于某个像素阈值都调整为1,小于某个阈值都调整为0。这个时候我们再观察标签图片会发现图片为全黑,这是正常的,因为肉眼分辨不出来0和1像素的区别,但是模型可以正常训练。
总结
出现此问题需要仔细检查代码中设置的类别数以及该标签图片的像素值,确保符合要求。
以上是此问题报错原因的解决方法,希望能帮助到大家!