半监督语义分割学习笔记

目录

[partial cross entropy loss](#partial cross entropy loss)


GitHub - LiheYoung/UniMatch: [CVPR 2023] Revisiting Weak-to-Strong Consistency in Semi-Supervised Semantic Segmentation

partial cross entropy loss

python 复制代码
import torch
import torch.nn.functional as F

def partial_cross_entropy_loss(inputs, targets, ignore_index=-1):
    """
    自定义部分交叉熵损失函数,忽略 ignore_index 指定的标签。
    
    :param inputs: 模型的输出,形状应为 (N, C, H, W),其中 N 是批量大小,C 是类别数,H 和 W 是高度和宽度。
    :param targets: 真实的标签,形状应为 (N, H, W)。
    :param ignore_index: 要忽略的标签值,默认为 -1。
    :return: 计算得到的损失。
    """
    # 计算 log softmax
    log_probs = F.log_softmax(inputs, dim=1)
    
    # 将 log_probs 和 targets 转换为适合 gather 的形状
    log_probs = log_probs.permute(0, 2, 3, 1)  # (N, H, W, C)
    log_probs = log_probs.reshape(-1, log_probs.shape[-1])  # (N*H*W, C)
    targets = targets.view(-1)  # (N*H*W)
    
    # 掩码未标记的数据点
    mask = targets != ignore_index
    log_probs = log_probs[mask]
    targets = targets[mask]
    
    # 只计算有标签的数据点的损失
    loss = F.nll_loss(log_probs, targets, reduction='mean')
    
    return loss
python 复制代码
# 假设模型的输出和真实标签
outputs = torch.randn(2, 3, 5, 5)  # 随机生成模拟输出(2个样本,3个类别,5x5的图像)
targets = torch.tensor([[[-1, 1, -1, 0, -1], 
                         [1, -1, 2, 2, 1], 
                         [-1, -1, 1, -1, 0], 
                         [2, 2, 2, -1, 1], 
                         [-1, 0, -1, 0, 1]], 
                        [[1, 0, -1, 1, -1], 
                         [2, 2, -1, 0, 0], 
                         [-1, 1, 1, 0, -1], 
                         [0, 0, 2, -1, 1], 
                         [2, -1, 0, -1, -1]]])  # 生成带有未标记区域的标签

# 计算损失
loss = partial_cross_entropy_loss(outputs, targets)
print(f"Loss: {loss.item()}")
相关推荐
林深现海1 小时前
【刘二大人】PyTorch深度学习实践笔记 —— 第一集:深度学习全景概述(超详细版)
pytorch·笔记·深度学习
经年未远2 小时前
vue3中实现耳机和扬声器切换方案
javascript·学习·vue
Hill_HUIL2 小时前
学习日志22-静态路由
网络·学习
莱茶荼菜2 小时前
yolo26 阅读笔记
人工智能·笔记·深度学习·ai·yolo26
詩不诉卿3 小时前
zephyr学习之自定义外部module记录
学习
浮游本尊3 小时前
React 18.x 学习计划 - 第十三天:部署与DevOps实践
学习·react.js·状态模式
wdfk_prog4 小时前
[Linux]学习笔记系列 -- [drivers][dma]dmapool
linux·笔记·学习
电饭叔4 小时前
Tkinter Button 括号内的核心参数详解
python·学习
玄〤4 小时前
Java 大数据量输入输出优化方案详解:从 Scanner 到手写快读(含漫画解析)
java·开发语言·笔记·算法
闵帆5 小时前
反演学习器面临的鸿沟
人工智能·学习·机器学习