计算机视觉人工智能深度学习图像处理【免费下载链接】kornia Geometric Computer Vision Library for Spatial AI项目地址https://gitcode.com/gh_mirrors/ko/kornia点击查看免费下载本指南围绕 Kornia 的losses.distributions文档页展开系统讲解基于概率分布散度的两个二维损失函数Jensen-Shannon 散度损失js_div_loss_2d与 Kullback-Leibler 散度损失kl_div_loss_2d。读者将掌握这两个函数在 2D 热力图heatmap场景下的数学原理、Kornia 的源码级实现细节、完整参数语义与 reduction 行为并了解如何通过仓库中的测试用例验证其数值正确性与可微性。文档定位losses.distributions 是什么在 Kornia 的 API 文档体系中losses.distributions.rst 是kornia.losses模块下专门负责分布类损失的页面。其正文通过 Sphinxautofunction指令直接引用两个公开 API.. currentmodule:: kornia.losses .. autofunction:: js_div_loss_2d .. autofunction:: kl_div_loss_2d也就是说该文档的实质内容即这两个函数的完整签名、参数说明与示例全部来源于源码 docstring。在 losses.rst 的总览表中这一页被概括为 Jensen-Shannon and Kullback-Leibler divergences between 2D distributions与重建类损失SSIM、PSNR、Charbonnier、Welsch、Cauchy、Geman-McClure、分割类损失Focal、Dice、Tversky、Lovasz以及形态学损失Hausdorff并列构成 Kornia 损失函数家族的四大类之一。数学原理两种分布散度的核心差异KL 散度不对称的信息损失给定两个定义在相同支撑集上的离散概率分布 P 和 QKL 散度定义为D_KL(P || Q) Σ_i P(i) · (log P(i) - log Q(i))其含义是用 Q 去近似 P 时平均丢失的信息量。KL 散度有两个关键性质非负性D_KL(P || Q) 0当且仅当P Q时取 0不对称性D_KL(P || Q) ! D_KL(Q || P)因此调用时 pred/target 的先后顺序会影响结果。JS 散度对称且有界的距离Jensen-Shannon 散度基于 KL 散度构造先取两个分布的中点M (P Q) / 2再计算JSD(P || Q) 0.5 · D_KL(P || M) 0.5 · D_KL(Q || M)它与 KL 相比的优势在于对称JSD(P || Q) JSD(Q || P)且有界值域为[0, log 2]因此更适合作为需要度量两个分布距离的损失函数在训练过程中数值更稳定。源码级实现剖析两个损失的核心实现位于 kornia/losses/divergence.py整个模块只有约 90 行逻辑非常精简全部基于torch与torch.nn.functional完成没有引入任何额外依赖。1. 底层 KL 计算_kl_div_2d_kl_div_2d是私有辅助函数它把(B, N, H, W)的四维热力图重塑为(B·N, H·W)的二维矩阵对每个 batch-通道切片独立计算 KL 散度def _kl_div_2d(p: torch.Tensor, q: torch.Tensor) - torch.Tensor: # D_KL(P || Q) batch, chans, height, width p.shape unsummed_kl F.kl_div( q.reshape(batch * chans, height * width).log(), p.reshape(batch * chans, height * width), reductionnone ) kl_values unsummed_kl.sum(-1).view(batch, chans) return kl_values这里有一个极易踩坑的 PyTorch 调用约定F.kl_div(input, target)的第一个参数input必须是对数概率第二个参数target才是真实概率。因此代码先将q取对数q.log()作为inputp作为target得到的就是D_KL(P || Q)源码注释明确标注了这一点。reductionnone让每个空间位置的散度保留下来再沿最后一维求和得到形状为(B, N)的每通道 KL 值。2. 底层 JS 计算_js_div_2d_js_div_2d完全按照数学定义实现先计算中点m 0.5 * (p q)再对两个方向取 KL 平均def _js_div_2d(p: torch.Tensor, q: torch.Tensor) - torch.Tensor: # JSD(P || Q) m 0.5 * (p q) return 0.5 * _kl_div_2d(p, m) 0.5 * _kl_div_2d(q, m)得益于 JS 散度的对称性最终公开 API 中 pred/target 的先后顺序对结果没有影响。3. reduction 机制_reduce_loss_reduce_loss是统一的后处理函数代码中带有# TODO: add this to the main module注释暗示它未来可能被提升为模块级公共工具def _reduce_loss(losses: torch.Tensor, reduction: str) - torch.Tensor: if reduction none: return losses return torch.mean(losses) if reduction mean else torch.sum(losses)none直接返回形状(B, N)的逐通道损失矩阵mean对所有元素求平均默认值sum对所有元素求和。注意一个实现细节_kl_div_2d在none模式下返回的是(B, N)因此mean的语义是所有 batch 与所有通道的均值而非对H·W空间维度的均值空间维度已在内部求和。4. 公开 API 的包装逻辑两个公开函数的结构完全对称仅方向不同。以kl_div_loss_2d为例def kl_div_loss_2d(pred: torch.Tensor, target: torch.Tensor, reduction: str mean) - torch.Tensor: return _reduce_loss(_kl_div_2d(target, pred), reduction)这里的关键是参数换位用户传入(pred, target)内部实际计算的是D_KL(target || pred)即_kl_div_2d(target, pred)。由于 KL 散度不对称这一点直接影响数值含义而js_div_loss_2d同样执行换位但因 JSD 对称结果不受影响。完整 API 与参数说明两个函数的签名完全一致均以kornia.losses命名空间导出见 kornia/losses/init.py 与__all__列表 L93-L94项目说明函数js_div_loss_2d(pred, target, reductionmean)kl_div_loss_2d(pred, target, reductionmean)pred预测热力图形状(B, N, H, W)需为概率分布各通道元素和为 1target目标热力图形状(B, N, H, W)约束同上reductionnone返回(B, N)、mean默认全体均值、sum全体求和返回reductionnone时为(B, N)张量mean/sum时为标量张量可导性是通过 gradcheck 验证设备/数据类型支持 CUDA 与 CPU测试覆盖 float32/float64 等多种 dtype两个函数均在 docstring 中内置了 doctest 风格的示例当pred与target均为形状(1, 1, 2, 4)、元素值全部为0.1258 个元素和为 1恰好是合法概率分布时自散度loss.item()返回0.0。实战可复制的使用示例以下代码展示了标准用法可直接运行import torch import kornia # 构造两个合法的概率热力图每个通道内部元素和为 1 pred torch.full((1, 1, 2, 4), 0.125) # 均匀分布和 0.125 * 8 1.0 target torch.zeros((1, 1, 2, 4)) target[0, 0, 0, 0] 1.0 # 单点分布delta 分布 # 默认 reductionmean返回标量 kl_loss kornia.losses.kl_div_loss_2d(pred, target) js_loss kornia.losses.js_div_loss_2d(pred, target) print(kl_loss.item()) # 有限正数target 与 pred 差异越大值越大 print(js_loss.item()) # 有界值位于 [0, log 2] # reductionnone 时返回 (B, N) 的逐通道损失 per_channel kornia.losses.kl_div_loss_2d(pred, target, reductionnone) print(per_channel.shape) # torch.Size([1, 1]) # 完全相同分布时散度为 0自洽性检验 assert kornia.losses.js_div_loss_2d(pred, pred).item() 0.0 assert kornia.losses.kl_div_loss_2d(pred, pred).item() 0.0数值验证0.346574 从何而来测试用例 test_divergence.py 给出了一个精确的参考数值js_div_loss_2d(full((1, 7, 2, 4), 0.125), zeros((1, 7, 2, 4)))期望结果为0.346574。可以手工推算验证实现正确性对单通道M 0.0625D_KL(0.125 || 0.0625) 8 · 0.125 · ln(2) ≈ 0.6931D_KL(0 || 0.0625) 0故JSD 0.5 · 0.6931 ≈ 0.34657与测试期望值吻合。这印证了实现与数学定义严格一致。测试体系正确性、可微性与编译兼容性仓库对这两个函数配备了完整的测试矩阵分布在 tests/losses/test_divergence.py 中数值正确性test_js_div_loss_2d与test_kl_div_loss_2d通过pytest.mark.parametrize覆盖四种组合——全 0.125 vs 全 0.125期望 0.0、全 0.125 vs 全 0JS 期望 0.346574、以及全 0 vs 全 0.125KL 在此方向得到math.inf无 reduction 行为test_kl_div_loss_2d_without_reduction验证reductionnone返回形状(1, 7)的逐通道张量非连续张量test_noncontiguous_kl/test_noncontiguous_js通过view(...).transpose(...)构造非连续内存的张量验证实现不受内存布局影响梯度校验test_gradcheck_kl/test_gradcheck_js使用 float64 精度对(1, 1, 10, 16)随机输入执行gradcheck证明两个损失可安全用于反向传播编译兼容性test_dynamo_kl/test_dynamo_js使用torch.compiledynamo 优化器包装算子并与 eager 模式对比验证其对torch.compile友好可用于推理加速流程。测试还通过kornia.losses.js_div_loss_2d这种全限定方式调用kornia顶层包直接暴露确认了公开 API 的导入路径。此外tests/api_surface.json 将js_div_loss_2d与kl_div_loss_2d列为 Kornia 公开 API 表面的一部分任何签名变更都会触发 API 兼容性测试告警。典型应用场景从函数签名(B, N, H, W)与文档定位between heatmaps可以看出这两个损失是为二维概率热力图回归量身设计的典型场景包括关键点 / 地标定位模型输出空间热力图作为关键点概率分布与高斯标注热力图计算散度损失知识蒸馏让学生网络输出的类别或注意力热力图逼近教师网络的软分布KL 散度是蒸馏任务的标准选择密度估计与注意力对齐将预测密度或注意力图归一化为分布后用 JS 散度衡量与目标的距离借助其对称、有界的特性获得更稳定的训练信号正则化项在无监督或自监督任务中约束某层输出的分布形态如逼近均匀分布。使用注意事项与边界输入必须是概率分布实现内部没有自动归一化若通道内元素和不为 1散度的数学含义即失效。使用前建议自行softmax或归一化使每个通道的H·W个元素和为 1KL 的方向敏感性kl_div_loss_2d(pred, target)实际计算D_KL(target || pred)且log(0) -inf会让含零分布的方向产生inf测试用例中pred全 0 时即返回inf训练时需注意数值稳定性若损失发散可优先改用有界的 JS 散度数值下溢q.log()对零元素会得到-inf配合0 * (-inf)可能产生 NaN实践中常对输入做clamp或加微小 epsilon设备与精度函数为纯 PyTorch 算子自动支持 CUDA 与自动混合精度docstring 示例中的0.125数值恰好保证 float32 下精确可表示便于调试复现。综上losses.distributions页面所承载的两个函数是 Kornia 损失库中面向分布对齐任务的轻量级工具实现透明全文仅 90 行、行为可预期有精确数值测试背书、与生态无缝集成kornia.losses顶层导出、支持torch.compile非常适合在热力图类任务中作为主力损失或辅助正则项使用。如需深入了解与其他损失家族的对比可参阅 losses.rst 及 losses.reconstruction.rst其中包含 Welsch、Cauchy、Geman-McClure 等稳健损失。赞分享计算机视觉人工智能深度学习图像处理【免费下载链接】kornia Geometric Computer Vision Library for Spatial AI项目地址https://gitcode.com/gh_mirrors/ko/kornia点击查看免费下载相关推荐Kornia 分布散度损失指南js_div_loss_2d 与 kl_div_loss_2d 的原理、实现与实战Kornia 分布散度损失指南js_div_loss_2d 与 kl_div_loss_2d 的原理、实现与实战 在计算机视觉的诸多任务热图关键点回归、知识计算机视觉深度学习人工智能图像处理MXNet Gluon KLDivLoss 实战Kullback-Leibler 散度损失的原理、用法与源码剖析MXNet Gluon KLDivLoss 实战Kullback Leibler 散度损失的原理、用法与源码剖析 导读 本文围绕 Apache MXNet G人工智能深度学习机器学习Kornia 语义分割损失函数完全指南Focal、Dice、Tversky 与 Lovasz 的实现原理与实战用法Kornia 语义分割损失函数完全指南Focal、Dice、Tversky 与 Lovasz 的实现原理与实战用法 语义分割是计算机视觉中最常见的像素级分类任计算机视觉人工智能深度学习图像处理上一篇100 Go Mistakes and How to Avoid ThemPackage Design in Go下一篇Streamlit 媒体显示指南st.image / st.video / st.audio / st.pdf / st.logo 完整实战创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
企业AI外呼与CRM集成:外呼结果如何稳定回流(工程判据清单) 在AI外呼(智能外呼)选型中,业务侧看话术和报价,技术侧其实只需要盯一件事:外呼结果怎么稳定、可追溯地回流到自有系统。本文从工程视角拆开讲,给技术负责人一份可对照的判据清单。
一、先分清三种对接方式
… · 2026/9/24 19:52:18
不会聊天、不会写文章,Jev凭什么火遍Agent圈? 前言最近AI圈子里冒出一个很特殊的模型:Jev。GPT、Claude、Kimi这些主流大模型,我们已经很熟悉:你提问,它生成一大段文字回答,能写代码、写文案、陪你聊天、做长任务推理。但Jev不一样。它不会写文章、不会写故事&… · 2026/9/24 19:52:18
国产大模型客户端深度测评:九大势力多模态与智能体能力对比 1. 国产大模型客户端测评的缘起与选型逻辑1.1 为什么我要做这轮客户端深度测评过去一年多,我一直在做AI应用落地相关的项目,从智能体搭建到多模态处理,从企业内部知识库到面向C端的对话产品,几乎把国内主流的大模型API都接了一遍。… · 2026/9/24 20:24:55
从分割回文串看回溯算法与缓存优化:LeetCode 131全解 刷 LeetCode 的时候,我有个习惯:先把题目归类。131 这道题,光看名字“分割回文串”很多人以为是个字符串处理题,其实骨子里是一道回溯题。今天这篇题解基于 Python 实现,重点不是把 AC 代码甩出来,而是把“… · 2026/9/24 20:24:55
Wan 3.0实战:图片、视频、声音参考如何分工,做出30秒商品视频 打开Wan 3.0之前,我原本以为做30秒商品视频这件事,最难的是提示词怎么写。真正上手跑了几十条之后才发现,提示词只能解决“你想让它是什么”,而多张参考图、视频参考和声音参考这三样东西,才是把“模糊的想法”变成“具… · 2026/9/24 20:24:55
gogen实战:用Go标准库打造一条命令生成项目骨架的工具 先承认一件事:我在写 gogen 之前,每次新建 Go 项目都靠手工。打开终端,先mkdir cmd internal pkg,再touch main.go go.mod Makefile README.md,顺手补一个.gitignore,有时候还要加 Dockerfile,然… · 2026/9/24 20:24:55
Java基础高频面试题详解:自动装箱、String与反射等十道八股文 Java基础八股文这个系列写到第四期,我反而比前几期更谨慎了。前三期发完之后,陆续收到一些后台留言,说面试现场栽在了“最简单的题”上——Integer的比较、String不可变性的底层、重写equals之后为什么还要重写hashCode。这些题基本都在Java基… · 2026/9/24 20:24:55
布谷鸟算法优化BP神经网络:四分类预测的CS-BP原理与MATLAB实现 简介:基于布谷鸟算法优化BP神经网络的分类预测项目包,完整包含CS-BP四分类预测与布谷鸟算法优化的多分类预测MATLAB实现。项目将布谷鸟算法的巢寄生搜索机制引入BP网络,对权重和阈值进行全局寻优,有效改善传统反向传播容易陷入局部… · 2026/9/24 20:24:42
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44