zgm3345639917 2024-04-06 21:08 采纳率: 100%
浏览 35
已结题

深度学习语义分割!CEloss ignore_index设置成255,训练就报cuda错误,请大家帮我分析下问题。

我用Cityscapes默认的19类生成数据集,在Deeplabv3+上进行训练,真实标签里像素值从road为0开始,到18结束,其他不想训练的区域与类别像素值均为255,即标签里白色部分,加上背景一共是20类,num_classes设置为20,损失函数为CEloss,把ignore_index设置成255,训练就报cuda错误,改成ignore_index=num_classes就可以进行训练,但是预测结果中road被当成背景了,实际那些255的区域并没有区分成背景,能帮我分析下原因吗,cuda错误如下: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.
miou如下图:

img

  • 写回答

2条回答 默认 最新

  • GISer Liu 2024-04-06 22:31
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    根据您的描述,问题可能出在ignore_index的设置上。在PyTorch的交叉熵损失函数nn.CrossEntropyLoss中,ignore_index参数用于指定忽略某个类别的计算,但它并不用于指定背景类别。因此,将``` ignore_index

    为了解决这个问题,您可以考虑以下方案:
    1.  **修改标签数据:** 将标签中背景和不想训练的区域像素值设置为一个不参与分类的类别值,比如19,而非255。这样可以保证背景和其他不想训练的区域都被当作一个类别处理,不会引发CUDA错误。
    2.  **自定义损失函数:** 如果您需要忽略多个类别,可以考虑自定义损失函数,将不想训练的类别在损失计算时排除掉。这样可以避免使用``` ignore_index ```引发的问题。
    下面是一个简单的示例代码,用于自定义损失函数来排除不想训练的类别:
    pythonCopy code
    

    import torch
    import torch.nn.functional as F
    class CustomCrossEntropyLoss(torch.nn.Module):
    def init(self, ignore_indices=[], weight=None):
    super(CustomCrossEntropyLoss, self).init()
    self.ignore_indices = ignore_indices
    self.weight = weight
    def forward(self, inputs, targets):
    loss = F.cross_entropy(inputs, targets, weight=self.weight, ignore_index=255, reduction='mean')
    for index in self.ignore_indices:
    mask = targets != index
    loss *= mask.float()
    return loss.mean()

    使用示例

    ignore_indices = [255] # 需要忽略的类别值列表
    criterion = CustomCrossEntropyLoss(ignore_indices=ignore_indices)

    ```
    这样处理可以避免CUDA错误,并确保不想训练的区域被正确地处理。

    如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月15日
  • 已采纳回答 4月7日
  • 创建了问题 4月6日

悬赏问题

  • ¥15 Opencv(C++)异常
  • ¥15 VScode上配置C语言环境
  • ¥15 汇编语言没有主程序吗?
  • ¥15 这个函数为什么会爆内存
  • ¥15 无法装系统,grub成了顽固拦路虎
  • ¥15 springboot aop 应用启动异常
  • ¥15 matlab有关债券凸性久期的代码
  • ¥15 lvgl v8.2定时器提前到来
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
  • ¥15 cam_lidar_calibration报错