作者:顺达
最近夸克端智能小组在做端上的实时文档检测,即输出一张RGB图像,失去文档的四个角的关键点的坐标。整个pipelines属于关键点检测算法,因而最近对相干畛域的论文进行浏览和进行了试验尝试。
将关键点检测算法依照不同模块进行拆分,能够分成以下几个局部,每个局部都有相干的办法能够进行优化:
- 图片解决:包含数据光学加强,变换,resize,crop等操作,裁减图片的多样性;
- 编码:指的是在训练中,如何将坐标转换成所须要的label,用于监督模型的输入;
- 网络模型:指的是网络结构,能够有backbone/FPN/detection head等局部组成;
- 解码:指的是如何将模型推理的后果转换成所须要的坐标模式,如笛卡尔坐标系下的坐标。
Related Works
关键点检测中次要有两条技术计划:
- 相似人脸检测,模型输入的后果tensor通过fc层,间接失去一维的向量,通常是归一化后关键点坐标值;
- 相似人体姿势预计,模型输入的后果tensor通过argmax等形式,获取heatmap中相应大的坐标,最初将此坐标复原至原图坐标。
近年来,基于heatmap来进行关键点检测的计划居多,其次要起因是基于heatmap的成果要好于应用全连贯层进行回归的计划。所以,咱们采纳的计划也是基于heatmap的,上面是近几年的一些相干论文工作。
DSNT
[1] Nibali A , He Z , Morgan S , et al. Numerical Coordinate Regression with Convolutional Neural Networks[J]. 2018.
思路
目前,在模型输入的heatmap到数值坐标的转换中,有两种形式:
- 通过对heatmap中取argmax,失去相应最大的点,以此来转换成数值坐标。此种形式具备较好的空间泛化性,然而因为在训练中argmax是不可导的,通常应用heatmap来迫近编码的高斯热例图,这会导致损失函数与最终评估指标的不统一。其次,在推理阶段,只应用到最大响应的坐标点来计算数值坐标,而在训练阶段,所有坐标点都对损失有奉献。第三,通过heatmap转换成数值坐标,是会存在理论误差上限的;
- 通过在heatmap后接fc层,转换成数值坐标。此种办法让梯度从数值坐标回传到input中,然而后果重大依赖与数据分布(例如在训练集中,一个物体始终呈现在坐标;而在测试集中,这个物体呈现在左边,这样就会导致预测谬误)。其次,通过fc转换,失落了heatmap的空间信息。
针对上述的两种计划,作者兼容了这两种计划的长处(端到端优化和放弃空间泛化性),提出一种可微分的形式来失去数值坐标。
具体步骤
- 模型的输入1KH*W个heatmaps,其中K示意关键点的数量;
- 将每个通道的heatmap归一化,让其值都为非负且和为1,从而失去 norm_heatmap 。这么做的目标是,应用归一化后的heatmap保障了预测的坐标位于heatmap的空间范畴之内。同时, norm_heatmap 也能够了解成二维离散概率密度函数;
- 生成 X 和 Y 矩阵,\( X_{(i,j)} = \frac{2j-(w+1)}{w} \), \( Y_{(i,j)} = \frac{2i-(h+1)}{h} \),别离示意x轴的索引和y轴的索引。能够了解成将图片的左上角缩放到 (-1,-1) 和右下角缩放到 (1,1) ;
- 将X 和 Y 矩阵别离与 norm_heatmap 点乘,从而失去最终的数值坐标。这么做的起因是, norm_heatmap 示意概率密度函数, X 矩阵示意索引,两者点成示意预测x的均值。通过均值来示意最终的预测的坐标,这样的益处是,a)可微分;b)理论误差上限小。
损失函数loss
dsnt模块的损失函数由Euclidean loss 和JS正则束缚组成。前者用于回归坐标,后者用于束缚生成的热力求更加靠近高斯分布。
$$
L_{euc}(u,p) = ||p-u||_2
$$
$$
L_D(Z,p) =JS(p(c)||N(p,I)))
$$
长处
- 整套模型是端到端训练的,损失函数与测试指标能对应;
- 理论误差上限很小;
- 引入 X 矩阵和 Y 矩阵,能够了解成引入先验,让模型的学习难度升高;
- 低分辨率的成果仍然不错。
毛病
在试验中,发现当关键点位于图片边缘时,预测后果不好。
DARK
[1] Zhang F , Zhu X , Dai H , et al. Distribution-Aware Coordinate Representation for Human Pose Estimation[J]. 2019.
思路
作者发现将 heatmaps 解码后果,对生成最终数值坐标存在较大影响。因而钻研了规范的坐标解码形式的有余,提出一种散布已知的解码形式和编码方式,来进步模型的最终成果。
规范的坐标解码过程是,取得模型的 heatmaps 后,通过argmax找到最大响应点 m 和第二大响应点 s ,以此来计算最终的响应点 p :
$$
p=m+0.25\frac{s-m}{\left \| s-m \right \|_2}
$$
这个公式意味着最大响应点向第二大响应点偏移0.25个像素,这么做的目标是弥补量化误差。而后把响应点映射回原图:
$$
\hat{p} = \lambda p
$$
这也阐明, heatmap 中最大响应点并不是与原图的关键点准确对应,只是大略地位。
基于下面的痛点,作者基于散布已知的前提(高斯分布),提出新的解码形式,解决如何从 heatmap 中失去准确的地位,最小化量化误差。同时,提出了配套的编码方式
具体步骤
解码
假如输入的 heatmap 合乎高斯分布,那么 heatmap 就能够用上面函数示意
其中\( \mu \)示意关键点映射到 heatmap 的地位。咱们需要求\( \mu \)的地位,因而将函数g转换成最大似然函数
对\( P(\mu ) \)进行泰勒开展
其中,m示意在热力求中最大响应的地位。而\( \mu \)在热力求对应的是极点,存在以下性质
联合上述公式,能够失去
因而,为了失去 heatmap 中\( \mu \)的地位,能够通过 heatmap 的一阶导数与二阶导数求得。这步的作用是通过数学的办法来阐明该挪动间隔。
后面提及了假如输入的 heatmap 合乎高斯分布,理论状况是不合乎的,理论可能是多峰,因而须要对 heatmap 进行调制,让其尽量满足这个前提。具体做法是用高斯核函数来平滑 heatmap ,同时为了保障幅值统一,要进行归一化。
$$
{h}’=K\circledast h
$$
$$
{h}’=\frac{{h}’-min({h}’)}{max({h}’)-min({h}’)}*max(h)
$$
综上所述,步骤是:
- 对 heatmap 应用高斯核来调制,并且缩放;
- 求一阶导数和二阶导数,来失去\( \mu \);
- 将\( \mu \)映射回原图。
编码
编码指的是将关键点映射到 heatmap 上,并且生成高斯分布。
之前工作的做法是现对坐标进行下采样,而后将点进行量化(floor,ceil,round),最初应用量化后的坐标生成高斯函数。
因为量化是不可导的,存在量化误差,因而,作者提出不进行量化,应用float来生成高斯函数,这样就能生成无偏 heatmap 。
UDP
[1] Huang J , Zhu Z , Guo F , et al. The Devil is in the Details: Delving into Unbiased Data Processing for Human Pose Estimation[J]. 2019.
思路
作者从数据处理和坐标示意下手,以此来进步性能。作者发现,目前的数据处理形式是存在偏差的,特地是flip时,会与原数据不对齐;其次坐标表征也存在统计误差。这两个问题独特导致后果存在偏差。因而提出了一种数据处理形式unbiased data processing,解决图像转换和坐标转换带来的误差。
具体步骤
Unbiased Coordinate System Transformation
在测试中,通常应用翻转后的\( {k}’_{o,flip} \)与原始的\( {k}’_o \)进行叠加,来失去最终的预测后果。然而\( {k}’_o \)与\( {\hat{k}}’_o \)并不统一,存在偏差。能够看到翻转后的 heatmap 不与原来的 heatmap 对齐,会产生误差,与分辨率无关。
因而作者倡议应用 unit length 来代替图片长度:\( w=w^p-1 \)。这样翻转后的 heatmap 就对齐了。
Unbiased Keypoint Format Transformation
无偏的关键点转换形式应该是可逆的,即\( k=Decoding(Enoding(k)) \)。因而,作者提出了两种形式:
- Combined classification and regression format
借鉴了指标检测中anchor的形式,假如须要预测的关键点\( k=(m,n) \),则将其转换成如下。其中C示意关键点的地位范畴,X和Y示意须要预测的offset。最终解码就是在热力求C上取到argmax,而后对X与Y的热力求上拿到对应地位的offset,最初进行相加失去数值坐标。
- Classification format
与DARK形式统一,即应用泰勒开展来迫近实在地位。
AID
[1] Huang J , Zhu Z , Huang G , et al. AID: Pushing the Performance Boundary of Human Pose Estimation with Information Dropping Augmentation[J]. 2020.
奉献点
对于关键点检测,外观信息与束缚信息同样重要。而以往的工作通常是过拟合外观信息,而疏忽了束缚信息。因而,本文心愿通过information drop,可了解成掩膜,来强调束缚信息。束缚信息有利于在该关键点被遮挡时,预测出其精确地位。
而以往工作没有应用到information drop的起因是,应用该数据加强伎俩后指标降落。作者就通过试验,发现information drop是有助于进步模型精度的,但须要批改响应的训练策略:
- 加倍训练次数;
- 先应用没有mask的来训练,失去一个比拟好的模型后,再把mask伎俩退出持续训练。
RSN
[1] Cai Y , Wang Z , Luo Z , et al. Learning Delicate Local Representations for Multi-Person Pose Estimation[J]. 2020.
奉献点
本文是2019年coco关键点检测冠军的计划。其本文的次要思维是,最大水平聚合具备雷同空间尺寸的特色,以此来取得丰盛的部分信息,部分信息有利于产生更加精确的地位。因而提出了RSN网络,如下图一所示。从图来看,即交融不同感触野特色。RSN的输入蕴含了low-level精确的空间信息与high-level语义信息,空间信息有助于定位,语义信息有助于分类。然而这两类信息给最终预测带来的影响权重是不统一的,须要应用到PRM模块来均衡,RPM模块实质就是一个通道注意力和空间注意力模块。
Lite-HRNet
[1] Yu C , Xiao B , Gao C , et al. Lite-HRNet: A Lightweight High-Resolution Network[J]. 2021.
奉献点
本文出了一个高效的高分辨率网络,是HRNet的轻量化版本,通过将ShuffleNet中的shuffle block引入到HRNet中。同时发现shuffleNet中大量应用了pointwise convolution(11卷积),是计算瓶颈,因而引入contional channel weight来取代shuffle block中的11卷积。网络的整体构造如下图所示。在模型中统一保留高分辨率特色,并一直交融high-level特色。
在后面提及到的contional channel weight如下所示。右边是ShuffleNet中的shuffle block,右图是contional channel weight。能够看到,采纳新模块来取代了1*1的卷积,实现跨stage信息交换与部分信息交换。其具体做法蕴含了Cross-resolution weight computation和Spatial weight computation。这两个模块的实质是注意力机制。
试验优化后果
模型构造
本次模型借鉴了CenterNet/RetiaFace/DBFace中的相干工作。本次的应用了dsnt的计划。次要起因是:须要运行在端上,实时性是首要思考因素。dsnt在低分辨率的劣势显著。
MobileNet v3应用small版本,FPN中应用 Nearest Upsample + conv + bn + Relu 来进行上采样。在训练时应用了 keypoints , mask 和 center 分支;而预测时,只应用到了 keypoints 分支。
优化策略
在本次试验中,应用到了以下几种优化策略:
- 应用 mask 与 center 分支来辅助学习。其中mask示意文档的掩膜,center示意文档的中心点;
- 应用deep Supervise。应用4倍下采样特色图与8倍下采样特色图来进行训练,应用雷同的loss函数来监督这两层;
- dsnt中对边缘点的成果不佳,因而,对图片进行padding,让点不再位于图片边缘;
- 数据加强策略,除了惯例的光学扰动加强外,还对图片进行random crop、random erase和random flip等操作;
- 进行loss函数尝试工作,对于关键点分支的loss,尝试过 euclidean loss , l1 loss , l2 loss 和 smoothl1 loss ,最终 smoothl1 loss 的成果最佳。
评估指标
- MSE
用于在训练中评估验证集的均方误差。
$$
mse = \frac{\sum |d_i – \hat{d_i}|_2^2}{N}
$$
- oks-mAP
oks用于评估预测与实在关键点之间的类似度,mAP的评估形式相似coco[0.5:0.05:0.95]的评估形式,这里取[0.99:0.001:0.999]。其中,oks进行肯定变换,\( d_{p,i} \)示意点的欧式间隔,$S_p$示意该四边形的面积。
$$
oks_{p,i} =e^{-\frac{d_{p,i}^2}{2S_p}}
$$
- 耗时
耗时指的是在红米8上,用MNN推理框架跑模型的均匀工夫。
试验后果
先构建一个baseline,baseline的模型为 moblieNet v3 + fpn + ssh module + keypoints 分支 + dsnt ,其中,都没有应用上述优化策略,应用4倍下采样特色图作为输入。
在v2版本中替换不同的loss函数。
此外,还尝试过其余有效的tricks:
- 辅助工作有利于进步模型的指标,因而还退出了edge的分支来辅助学习。试验下来,退出该分支反而侵害模型的指标。可能起因是edge是利用gt关键点来生成的,可能某些edge并不是对应文档真正的边缘;
- 现阶段是预测文档的4个角,因而在减少4个点来进行预测,别离是4条边的中心点,所以模型一共预测8个关键点。试验结果显示,指标也降落了。
Demo 演示
Demo 视频请点击此文章尾部查看。
总结
综上所述,在端上的文档关键点检测畛域中,目前尝试下来,是基于heatmap+dsnt的计划较优,oks-mAP的指标有晋升空间。然而,比照应用fc层进行回归坐标的形式,基于heatmap的计划中存在一个有余是:无奈依据文档的束缚信息,来预测图片外的关键点坐标。此计划的有余,会导致文档内容的缺失,摆正成果不佳的状况。因而,后续须要补救此有余。
如何高效开发端智能算法?MNN 工作台 Python 调试详解
关注咱们,每周 3 篇挪动技术实际&干货给你思考!