DEKR 解构式人体关键点回归(三):损失函数
前言
损失函数是一项工作里很重要的部分,它意在每个训练阶段告诉模型有多“犯傻”、离“正确答案”还有多远,然后基于损失反向传播回去使得各模型参数获得相应的梯度,于是模型就知道该如何纠正错误(当然,还要结合优化算法,由于不在本文内容之中,这里就不给它出场的机会了)。正是这样经历一系列迭代训练后,模型最终才能学习成长为“三好学生”。
上一期CW已向大家介绍了DEKR的标签分配方法,那么本期就接着来看看损失函数的设计吧!
目录
i, 分类损失
ii. 回归损失
分类损失
分类指的是区分每个位置是否是关键点(COCO中有17类)和虚拟中心点(代表人的中心点,具体意义可以回顾上期内容),对于COCO数据集来说,这里就会设置18个类别(17类+虚拟中心点1类)。类别对应到通道这个维度,于是,网络的输出是17张关键点热度图+1张虚拟中心点热度图,标签也是一样的形式,loss 使用的是加权的 L2 损失函数:
其中,H,C 分别代表预测的关键点和虚拟中心点热度图,带 的是对应的标签,它们相减是 element-wise 的形式。 代表掩膜(mask),用于为正负样本分配不同的权重:正样本1,负样本0.1(注意不是0)。 的 shape 和 一致,比如: 则有17个通道,每个通道对应一类关键点,而 当然就只有1个通道了。 于是, 就是 element-wise product,每个元素一对一相乘。
回归损失
网络回归的是虚拟中心点到关键点位置的 offset maps,对于COCO数据集来说,这个输出通道则为17x2=34,对应17类关键点的 x,y 坐标,标签也是同样的形式,虚拟中心点邻域的位置是正样本,loss 使用归一化的 Smooth-L1 损失:
其中, C 代表正样本位置集合, 代表网络预测的offset map,带 表示对应的标签, 代表人物面积,实际是根据人物中关键点在 x, y 方向的最远距离 来计算的: , 的 shape 和 是一致的,这里的所有操作也是 element-wise 的。
最终的 loss 计算如下:
其中是分类和回归损失的 trade-off,默认设为0.03。
这部分内容没有太多可言,loss 也很常规,对于正样本不熟悉的可以再回顾下前一期的内容。
可以思考下的是,为何 heatmap (分类)部分要使用 L2 Loss? Cross Entropy,Focal Loss 会怎样呢?
DEKR 解构式人体关键点回归(三):损失函数相关推荐
- DEKR 解构式人体关键点回归(二):标签分配(Label Assignment)
前言 上一期 DEKR 解构式人体关键点回归(一):算法思想与原理 解析了DEKR的算法与工作原理,这期本文将聚焦于标签分配.当然,首先得了解标签是什么,明确模型的学习目标,然后再进一步看看如何制作与 ...
- DEKR 解构式关键点回归(一):算法思想与原理
前言 CW前阵子玩了下人体姿态估计,用上了微软新鲜出炉的算法--DEKR: Bottom-Up Human Pose Estimation Via Disentangled Keypoint Regr ...
- CVPR 2021 | 微软提出“解构式关键点回归“, 刷新COCO自底向上多人姿态检测记录!
随着深度学习的发展,运用计算机视觉中的人体姿态估计技术已经能够高精度地从人体的图片中检测出人体关键点,并恢复人体位姿.在应用端,此技术也已经在人机交互.影视制作.运动分析.游戏娱乐等各领域大放异彩. ...
- CVPR 2021 | 微软提出解构式关键点回归, 刷新COCO自底向上多人姿态检测记录!...
本文转载自微软研究院AI头条. 编者按:在拥挤的人群的场景下,由于人群过于密集,重合程度太高,所以每个人的位置难以用人体检测框表示,而传统的一些自下而上的人体姿态估计算法也很难检测到人物的关键点.因此 ...
- 展开运算符解构赋值_解构式展开式搜索栏
展开运算符解构赋值 View demo 查看演示Download Source 下载源 Maybe you have noticed the little adjustments that we di ...
- 解构领域驱动设计(三):领域驱动设计
在上一部分,分层架构的目的是为了将业务规则剥离出来在单独的领域层中进行实现.再回顾一下领域驱动设计的分层中应用层代码的实现. @Override public void pay(int orderId ...
- ES6基础:变量的解构赋值
ES6基础系列之变量的解构赋值 ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构.这种方式的出现大大提高了代码的扩展性 前言 一.数组的解构赋值 二.对象的解构赋值 三.函 ...
- JavaScript中的解构赋值(详细)
解构赋值,就是快速的从对象或者数组中取出成员的一个语法方式 1.解构:将对象或者数组中的某个成员取出来 2.赋值:取出来的成员赋值给某一个变量 1.数组的解构 使用 [ ] ...
- Logistic Regression逻辑回归的损失函数与梯度下降训练
有一篇博文提到logistic regression的简单理解(Logistic Regression逻辑回归的简单解释).逻辑回归实际上是odds取对数后的反函数,其函数形式也称为sigmoid f ...
最新文章
- Java实现话术词槽匹配_桔子互动|百度UNIT操作详解(上篇)
- 1.1 开始起步,配置ruby on rails运行环境
- 我的世界服务器无限小号,我的世界惊现全新无限刷物品bug 服主大大都要注意了...
- 自定义控件:视差特效
- Linear Regression总结2
- 微信开发之获取OAuth2.0网页授权认证和获取用户信息进行关联(转:http://playxinz.iteye.com/blog/2249634)
- Android root概念
- AtCoder - arc100_c Or Plus Max(SOSdp)
- c语言24游戏程序,C语言解24点游戏程序
- maya的颤动怎么做_必看!新手学习MAYA的几个建议
- linux以命令行下配置连接wlan无线网卡
- 线性判别用于提取词向量_各种机器学习算法的应用场景分别是什么(比如朴素贝叶斯、决策树、K 近邻、SVM、逻辑回归最大熵模型)?...
- Logit模型拟合实战案例(Biogeme)
- oracle10g debian,Debian Sarge 上安装 Oracle 10g
- 在think-cell数据表中,“撤消” (Ctrl+Z) 操作无效,怎么解决?
- 博途v15程序监视无法使用_博途V15打开应用程序失败,应用程序的并行配置不正确-工业支持中心-西门子中国...
- (转)Y480 完美黑苹果全套驱动分享
- 《少年派的奇幻漂流》:美的漂流,生的思索!
- windows 全系列电脑加速,告别电脑“卡”的时代
- 进阶-第92_es生产集群部署之必须根据自己的集群设置的一些重要参数
热门文章
- java mysql 版本查询_如何查看数据库版本
- python中elif可以单独使用吗_python中elif可以单独使用吗
- nuke无法理解服务器的响应,cuke4nuke服务器没有重新开始
- 【debug】UnicodeDecodeError: codec can't decode byte 0xbd in position 4: invalid start byte
- 球球大作战显示中国服务器较差,球球大作战延迟卡顿原因分析及解决方法
- clistctrl 列不可按 -baijiahao_好吃到让人尖叫的日本人气美食 | 不可错过的京都吃喝地图...
- mongoDB安装及使用
- SSM-网站后台管理系统制作(3)---Google的reCaptcha验证码
- vim之添加多行和删除多行
- 制作首页的显示列表。