当前位置: 首页 > news >正文

实例分割loss示例

@LOSSES.register_module()
class LaneCustomWeightedLoss(nn.Module):def __init__(self,negative_ratio=3,loss_weight=1.0,type_num=3,  # Assuming there are 11 classesspecial_classes=[4],special_weight=5)super(LaneCustomWeightedLoss, self).__init__()self.type_num = type_numself.negative_ratio = negative_ratioself.loss_weight = loss_weightself.special_classes = special_classesself.special_weight = special_weightdef forward(self, pred_seg, gt_seg_cur, quality_weight):   # pred_seg:(bs, num_cls, H, W)B, H, W = gt_seg_cur.shapegt_seg_cur = gt_seg_cur.reshape(-1)pred_seg = pred_seg.permute(0, 2, 3, 1).reshape(-1, self.type_num)pmask = (gt_seg_cur > 0)   # 创建正样本掩码,标记真实标签中大于0的位置(即有车道线的位置)fpmask = pmask.float()n_pos = torch.sum(fpmask)nmask = (gt_seg_cur == 0)  # 创建负样本掩码,标记真实标签中等于0的位置(即无车道线的背景位置)fnmask = nmask.float()max_neg_entries = torch.sum(fnmask)n_neg = n_pos * self.negative_ratio   # 计算需要选择的负样本数量,按照正负样本比例(默认为1:3)n_neg = n_neg if n_neg < max_neg_entries else max_neg_entriesn_neg = n_neg if n_neg > 0 else torch.ones_like(n_neg)n_neg_int = n_neg.int()bg_predict = pred_seg[:, 0]   # 获取预测结果中背景类别的预测值val, indxes = torch.topk(bg_predict[nmask], k=n_neg_int, largest=False)  # 在负样本位置中找到预测值最小的 n_neg_int 个样本(最难的负样本)max_hard_pred = val[-1]nmask_ohem = ((bg_predict <= max_hard_pred) * nmask)   # 通过OHEM策略创建最终的负样本掩码,选择最难的负样本fnmask_ohem = nmask_ohem.float()log_p = F.log_softmax(pred_seg, dim=-1)q_log_p = -log_p.gather(dim=1, index=gt_seg_cur.unsqueeze(1).long()).squeeze(1)  # 提取真实类别对应的对数概率,并取负号得到交叉熵损失# Apply special weight to specific classesspecial_mask = torch.zeros_like(gt_seg_cur, dtype=torch.float)for cls in self.special_classes:special_mask += (gt_seg_cur == cls).float()weighted_q_log_p = q_log_p * (1 + self.special_weight * special_mask)   # 为特殊类别应用额外权重,普通类别权重为1,特殊类别权重为 1+special_weight# 根据质检结果改变loss权重assert len(quality_weight) == Bquality_weight = torch.tensor(quality_weight, device=pred_seg.device)[:, None, None].expand(B, H, W)quality_weight = quality_weight.reshape(-1)weighted_q_log_p *= quality_weighttotal_cross_pos = torch.sum(weighted_q_log_p * fpmask)   # 计算加权后的正样本交叉熵损失总和total_cross_neg = torch.sum(weighted_q_log_p * fnmask_ohem)   # 计算加权后的负样本交叉熵损失总和(仅包含OHEM选中的困难负样本)total_cross_pos = total_cross_pos / n_pos if n_pos > 0 else torch.zeros_like(total_cross_pos)total_cross_neg = total_cross_neg / n_negtotal_cross_pos = total_cross_pos * self.loss_weighttotal_cross_neg = total_cross_neg * self.loss_weightreturn total_cross_pos + total_cross_neg,  pmask.view(B,H,W)

  

 

http://www.jsqmd.com/news/284538/

相关文章:

  • 【开题答辩全过程】以 基于java的宠物领养系统的设计与实现为例,包含答辩的问题和答案
  • 救命神器 2026 9款一键生成论文工具测评:本科生毕业论文必备清单
  • 【开题答辩全过程】以 基于BS架构的酒店信息管理系统为例,包含答辩的问题和答案
  • 内网渗透-内网信息收集
  • 耐达讯自动化Profibus光纤链路模块:跨行业通信的“隐形桥梁”,让控制更丝滑!
  • BIO/NIO/AIO/Netty 知识点
  • 【开题答辩全过程】以 基于BS结构的旅游网站的设计与实现为例,包含答辩的问题和答案
  • 不止于抓取:2026年自适应夹爪品牌推荐
  • 2026必备!自考论文难题TOP8 AI论文网站测评
  • 考虑源-荷-储协同互动的主动配电网优化调度研究Matlab实现
  • 强烈安利8个AI论文工具,MBA论文写作必备!
  • 写论文软件哪个好?宏智树 AI 凭 “真科研” 实力领跑学术写作赛道
  • 9款AI写论文哪个好?宏智树AI实测封神,毕业论文全流程开挂
  • 揭秘人工智能在网络安全中的应用与挑战
  • 宏智树AI:ChatGPT学术版驱动,重塑学术写作新生态
  • 宏智树 AI:破解降重去 AIGC 双重难题,让论文回归学术本真
  • 620-0085输入输出控制模块
  • 620-0086链路驱动器模块
  • Jenkinsfile编写全解析:从语法逻辑到团队协作,音视频项目自动化落地实践
  • 620-2032逻辑控制器模块
  • M3U8深度解析:从原理到实战优化,搞定流媒体传输核心
  • 宏智树 AI:破解顶刊规范密码,AI 时代期刊论文的合规创作指南
  • 621-0010模拟输出模块
  • Deepoc具身大模型开发板:多模态融合的智能决策引擎
  • 测试开发必备技能:Python多线程处理
  • java_ssm12企业人事工资管理系统
  • 621-0022-AR隔离分析输入模块
  • 那曲市英语雅思培训辅导机构推荐,2026权威出国雅思课程中心学校口碑排行榜推荐
  • C/C++ Linux网络编程2 - Socket编程与简单UDP服务器客户端 - 教程
  • 人工磨题 VS 宏智树 AI 设计?实证调研的效率革命藏在这里