人体关键点检测技术在姿态估计中具有重要意义, 并且在安防, 游戏娱乐等行业应用前景广阔. 多人关键点检测主要有自顶向下和自底向上这两种策略, 自顶向下的策略是先将图片中目标分割后再分别检测每个目标的关键点; 而后者是先检测出所有关键点然后再用特定的算法将这些关键点与每个目标进行匹配. 2014年Toshev等首次提出基于深度学习的deeppose模型[1]来进行关键点检测. 之后为提高检测效率, Tompson等[2]提出用heatmap回归关键点. Carreira等提出CPM[3], 并引入中间监督机制来防止梯度消失, 能够很好地融合图片的各种信息, 但它参数较多, 检测速度较慢. Newell等提出了Hourglass module结构[4], 它能够对一些难检测的关键点做出预测, 但效果不佳. CMU提出一种基于Bottom-up策略的Openpose[5], 它检测出所有关键点后, 通过二分图最大权匹配算法来对关键点进行拼接, 得到每个人的骨架. 2017年旷视提出了CPN网络[6], 它能够对一些遮挡的, 难以检测的点做出很好的预测. 2019年微软提出了HRNet[7], 它将不同大小的特征层由串行变成了并行, 减小了上采样下采样的信息的丢失.
对于多人关键点检测, 两种策略各有优劣, 使用自底向上的方法虽然计算量较小, 但当目标密集, 该算法容易将关键点误判, 并且如果目标尺度较小可能会漏检; 自顶向下方法准确率更高, 但检测结果受目标检测的影响较大, 并且计算量与标记框数量成正比. 为了避免错判和漏检, 还是用自顶向下的方案更合适, 因此目标检测标记框的准确率及关键点检测前的图片质量就显得尤为重要. 常见的单阶段目标检测算法有YOLO、SSD[8], RetinaNet[9]等; 常见的双阶段算法有Faster RCNN、Mask RCNN[10]以及CascadeRCNN[11]等. 与单阶段相比双阶段要先用RPN等算法筛选出一定数量的候选框而后再分类和回归, 准确率高但速度比较慢.
目标检测网络训练时通常采用IOU来划分正负样本, 但它不能够很好地衡量预测框和实际框的重叠程度, 并且当重叠度为0时, 它的损失函数值也为0, 此时没有梯度返回无法学习; 另一方面由于关键点检测网络没有给每个通道和特征层分配合适的权重, 其精度仍有提升空间. 同时在实际应用中往往是基于视频流切片的, 难免会发生运动模糊现象影响图片质量进而降低关键点检测的准确率. 为此本文提出了一种改进的RetinaNet-CPN网络, 能很好提升人体关键点整体检测精度.
1 算法流程算法流程如图1所示: 对视频流切片后, 先用改进的RetinaNet网络对该图片进行目标检测, 接着用Laplacian算子对每个目标框做模糊检测, 如果大于设定的阈值, 则要用本文的方法估算出模糊核并用其恢复出清晰的图片. 最后用引入注意力机制的CPN网络进行关键点检测.
2 目标检测网络
综合时效性和准确率考虑, 本文选用单阶段中效果较好的RetinaNet做目标检测网络. 如图2所示, 为了充分利用各层的语义信息, RetinaNet采用的是ResNet+FPN[12]结构. FPN网络详细结构如图3所示, 它主要由P3–P7构成, ResNet的C3–C5这3层两倍上采样后与下层经过1×1的卷积相加, 就成了FPN的P3–P5层, 采用1×1卷积核的目的是降低通道数, C5经过卷积得到P6, P7是C6经过激励函数后卷积所得. 每个融合层后接一个分类网络和一个位置回归网络. 每个FPN特征层都有3种不同大小, 3种不同长宽比例的anchor.
单阶段目标检测效果不及双阶段的主要原因是: 负样本比例远高于正样本. 这些负样本对网络学习是没有效果的, 而双阶段利用RPN网络使得正负样本控制在一定比例, 学习效果更好. RetinaNet优于其他单阶段网络主要原因是它引入平衡因子来抑制易分样本的损失权重, 损失函数Focal Loss的表达式如下:
${L_{fl}} = \left\{ {\begin{array}{*{20}{l}} { - \alpha {{(1 - {y'})}^\gamma }\lg {y'} ,\; y = 1} \\ { - (1 - \alpha ){y^{'\gamma }}\lg (1 - {y'}) ,\; y = 0} \end{array}} \right. $ | (1) |
实验发现当α取0.25, γ取2时检测效果最好.
RetinaNet用IOU (两框的交并比)作为预测框和真实框评价函数并用它来划分正负样本. 但IOU没有将两框的距离考虑进去, 当两个框没有重合即IOU为0时, 此时没有梯度回传, 不能调整模型参数; 另一方面如图4所示, 尽管它们的IOU是一样的, 但IOU不能很好地反映其重合的优劣性, 第一幅图效果最好, 最后一幅图最差.
DIOU[13]同时考虑了预测框与实际框的欧式距离, 重叠率和两框的大小, 能够很好地解决上述问题, 计算公式如下:
$DIOU = IOU - \frac{{{\rho ^2}(b,{b^{gt}})}}{{{c^2}}}$ | (2) |
其中,
如图5所示, 运动模糊主要是在摄像机曝光时刻内, 目标快速移动造成的. 对于一幅图片来说, 如果该图片中的高频分量较少则可认为它是模糊的. 拉普拉斯算子是一种常用的检测图片是否模糊的二阶微分线性算子, 公式如式(3)所示, 其检测过程是: 先将每个目标框的图片resize成固定大小的图片, 灰度化后用Laplacian算子滤波, 计算其方差. 由于模糊图片很难提取边缘, 因此方差较小, 如果计算出的值小于阈值则认为它是模糊照片.
$\begin{split} \nabla f(x,y) = &\frac{{{\partial ^2}f}}{{\partial {x^2}}} + \frac{{{\partial ^2}f}}{{\partial {y^2}}}{\rm{ = }}f(x + 1,y) + f(x - 1,y)\\ & + f(x,y + 1) + f(x,y - 1) - 4f(x,y) \end{split}$ | (3) |
运动模糊图像在忽略噪声情况下可以认为由原清晰图像与一个模糊核卷积而成, 所以关键就是估算出模糊核的方向及大小, 然后用逆傅里叶变换即可得到清晰的图像. 由于摄像头的曝光时间比较短, 目标在这段时间里的运动可看成是匀速直线运动. 设曝光时长为T, 目标沿位移方向运动了L像素即模糊核大小为L,
$g(x,y) = \int\limits_0^T {f(x - {x_0}(t),y - {y_0}(t))dt} $ | (4) |
对式(4)进行二维傅里叶变换:
$\begin{split} G(u,v)& = \int\limits_{ - \infty }^{ + \infty } {\int\limits_{ - \infty }^{ + \infty } {g(x,y)} } {e^{ - j2\pi (ux + vy)}}{dx}{dy} \\ & = \int\limits_{ - \infty }^{ + \infty } {\int\limits_{ - \infty }^{ + \infty } {\left( {\int\limits_0^T {f(x - {x_0}(t),y - {y_0}(t))dt} } \right)} } {e^{ - j2\pi (ux + vy)}}{dx}{dy} \\ & = \int\limits_0^T {\left[ {\int\limits_{ - \infty }^{{\rm{ + }}\infty } {\int\limits_{{\rm{ - }}\infty }^{{\rm{ + }}\infty } {f(x - {x_0}(t),y - {y_0}(t)){e^{ - j2\pi (ux + vy)}}dxdy} } } \right]}{dt} \end{split} $ |
令
$\begin{split} G(u,v) &= F(u,v)\int\limits_0^T {{e^{ - j2\pi (u{x_0}(t) + v{y_0}(t))}}} {dt} \\ & = F(u,v)H(u,v) \end{split} $ | (5) |
则有:
$H(u,v) = \int\limits_0^T {{e^{ - j2\pi (u{x_0}(t) + v{y_0}(t))}}} {dt}$ | (6) |
设目标在x轴和y轴方向的位移分量分别为a和b, 则
$H(u,v) = \frac{{T\sin (\pi (ua + vb))}}{{\pi (ua + vb)}}\mathop e\nolimits^{ - j2\pi (ua + vb)} $ | (7) |
设图像尺寸为
${\rm{|}}H(u,v)| = \left| {\dfrac{{T\sin \left( {\pi \left( {\dfrac{{ua}}{M} + \dfrac{{vb}}{N}} \right)} \right)}}{{\pi \left( {\dfrac{{ua}}{M} + \dfrac{{vb}}{N}} \right)}}} \right|$ | (8) |
图6是加入45°模糊核后的频谱图.
当
$\tan \varphi *\tan \theta = - \frac{M}{N}$ | (9) |
本文采用Radon变换[15]来检测亮条纹的偏移角, 然后根据式(9)便可计算出模糊核的角度α.
为了得到更加精确的模糊核大小, 将频谱绕中心点旋转α后, 计算出相邻暗条纹间距d, 让|H(u)|的值为0, 得到模糊核长度为N/
参考文献[16], 上述去运动模糊算法步骤总结如下:
(1) 将目标框图片灰度化后得到频谱幅度图
(2) 为了使条纹表现得更加明显, 将中心点由左上角转变成频域矩形的中心点位置.
(3) 估算模糊核. 用Radon变换找出变换矩阵最大值的列数即为频谱条纹偏移角, 根据式(9)便可得到模糊核角度; 算出相邻暗纹间距, 即可得到模糊核尺度.
(4) 得到模糊核后, 经过逆傅里叶变换即可恢复出原清晰图像.
4 人体关键点检测RetinaNet网络检测出图片中的每个人后, 如图7所示, 将每个目标框裁剪后作为输入送入关键点检测网络, 人体关键点检测选用的是CPN网络(Cascaded Pyramid Network), 如图8所示, 它主要由GlobalNet和RefineNet两个子网络组成. GlobalNet用ResNet提取特征, 其中C2–C5这4个特征层采用FPN的结构来进行特征融合. GlobalNet对于一些比较容易被检测到的、未被遮挡的如眼睛等关键点检测效果较好, 而对于一些难检测的, 遮挡严重的关键点检测效果不佳, 需要依赖于RefineNet. RefineNet接在GlobalNet后面, 在GlobalNet每层输出后加一定个数的bottleneck (即residual block), 然后经过不同倍数的上采样后通过concat层(其作用是将多个特征图在某个维度上进行拼接)融合各层语义信息, 最后再经过一个bottleneck输出结果. 同时GlobalNet也采用在线难挖掘技术, 忽略易分样本的损失值, 主要计算几个难检测点的损失值, 使得网络注重难分样本的学习, 提高准确率.
为了进一步提升CPN网络关键点检测的准确率, 在ResNet后加入CBAM注意力机制[17]能够提升网络性能. 如图9所示, CBAM主要由channel attention和spatial attention两部分构成. channel attention的目的是为每个通道分配合理的权重, 为了进一步提高效率及获得更丰富的信息, 特征图通过一个bottleneck后经过一个并行的最大池化层和平均池化层, 然后分别进入多层感知机(MultiLayer Perceptron, MLP), 再将两者叠加后就是channel attention. spatial attention更加关注于位置信息, 将channel attention得到的加权特征图送入spatial attention后同样经过一个并行的maxpool和avgpool层, 得到的结果经过一个concat层拼接后再经过卷积层, 即可学习每个位置对预测结果的重要程度.
5 实验分析
实验基于CentOS 操作系统, Python 3.6, PyTorch 1.4, CUDA 10.1, GPU 型号为 Tesla T4, 显存为15 GB, CPU型号为Intel(R) Xeon(R) Silver 4110, 2.10 GHz. 实验采用的是COCO数据集[18], COCO数据集训练集有11万张图片, 验证集约有5千张图片, 测试集有2万多张图片, 并且该数据集对每个人的脸部和肢体共17个关键点做了标注. 主要做了3个实验: 用DIOU代替IOU做评价函数的对比实验、模糊核估算及图像复原实验和引入注意力机制CPN[19]的性能对比实验.
5.1 目标检测对比实验训练时先将输入的图片resize成256×256像素, 然后用一些常用的数据增强的手法如翻转、旋转、随机裁剪等方法来提高模型的泛化能力. 实验学习率初始值为
5.2 运动模糊去除实验
选取50张图片检测框内的人体目标加入不同的模糊核做模糊处理, 用本文的方法估算出模糊核. 图10、图11、图12是其中的3幅图, 其实际与估算的模糊角度, 模糊核长度如表2所示.
5.3 CPN网络引入注意力机制前后的对比实验
关键点检测采用的是RetinaNet+CPN的方式, 将每个目标框resize成 128×256 送入CPN网络检测关键点. 实验学习率初始值为
将RetinaNet正负样本评价函数由IOU变成DIOU后, AP由39.1提高到40.2, 性能提高了2.81%, 同时将DIOU用在其他单阶段网络也有不错的性能提升, 有很强的泛化能力. 50幅图片中估算出的模糊核与实际模糊核角度、尺寸偏差均值分别为3.7°和2.1 pixel. 引入注意力机制后的CPN网络关键点检测AP和AR均有小幅提高, 分别提升1.12%和0.51%.
6 结论与展望
用本文提出的改进的RetinaNet-CPN网络将目标评价函数IOU改成DIOU能够有效提升目标框提取的准确率; 引入注意力机后CPN网络各通道和特征层分配合理的权重, 性能有一定的提升; 同时用基于Radon变换的估算出的模糊核与实际模糊核相差不大, 用它基本能够还原清晰图. 尽管用本文的方法使得关键点检测性能得到一定的提升, 但对遮挡严重, 人员密集的情况下的关键点检测依旧欠佳, 若再提升目标检测准确率对关键点检测效果提升有限, 接下来的研究应重点关注如何提高遮挡点预测准确性.
[1] |
Toshev A, Szegedy C. Deeppose: Human pose estimation via deep neural networks. 2014 IEEE Conference on Computer Vision and Pattern Recognition. Columbus: IEEE, 2014. 1653–1660.
|
[2] |
Tompson J, Goroshin R, Jain A, et al. Efficient object localization using convolutional networks. Proceedings of the 2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Boston: IEEE, 2015. 648–656.
|
[3] |
Carreira J, Agrawal P, Fragkiadaki K, et al. Human pose estimation with iterative error feedback. Proceedings of the 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Las Vegas: IEEE, 2016. 4733–4742.
|
[4] |
Newell A, Yang KY, Deng J. Stacked hourglass networks for human pose estimation. Proceedings of the 2016 14th European Conference on Computer Vision (ECCV). Amsterdam: Springer, 2016. 483–499.
|
[5] |
Sato K, Nagashima Y, Mano T, et al. Quantifying normal and parkinsonian gait features from home movies: Practical application of a deep learning-based 2D pose estimator. PLoS One, 2019, 14(11): e0223549. DOI:10.1371/journal.pone.0223549 |
[6] |
Chen YL, Wang ZC, Peng YX, et al. Cascaded pyramid network for multi-person pose estimation. Proceeding of the 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition. Salt Lake City: IEEE, 2018. 7103–7112.
|
[7] |
Sun K, Xiao B, Liu D, et al. Deep high-resolution representation learning for human pose estimation. Proceedings of the 2019 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). Long Beach: IEEE, 2019. 5686–5696.
|
[8] |
Liu W, Anguelov D, Erhan D, et al. SSD: Single shot MultiBox detector. Proceedings of the 14th European Conference on Computer Vision (ECCV). Amsterdam: Springer, 2016. 21–37.
|
[9] |
Lin TY, Goyal P, Girshick R, et al. Focal loss for dense object detection. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2020, 42(2): 318-327. DOI:10.1109/TPAMI.2018.2858826 |
[10] |
He KM, Gkioxari G, Dollár P, et al. Mask R-CNN. Proceedings of 2017 IEEE International Conference on Computer Vision. Venice: IEEE, 2017. 2980–2988.
|
[11] |
Cai ZW, Vasconcelos N. Cascade R-CNN: Delving into high quality object detection. 2018 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR). Salt Lake City: IEEE, 2018. 6154–6162.
|
[12] |
Lin TY, Dollár P, Girshick R, et al. Feature pyramid networks for object detection. Proceedings of the 2017 IEEE Conference on Computer Vision and Pattern Recognition (CVPR). Honolulu: IEEE, 2017. 936–944.
|
[13] |
Wu XW, Sahoo D, Zhang DX, et al. Single-shot bidirectional pyramid networks for high-quality object detection. Neurocomputing, 2020, 401: 1-9. DOI:10.1016/j.neucom.2020.02.116 |
[14] |
孔勇奇, 卢敏, 潘志庚. 频谱预处理模糊运动方向鉴别的改进算法. 中国图象图形学报, 2013, 18(6): 637-646. DOI:10.11834/jig.20130604 |
[15] |
Moghaddam ME, Jamzad M. Finding point spread function of motion blur using Radon transform and modeling the motion length. Proceedings of the Fourth IEEE International Symposium on Signal Processing and Information Technology, 2004. Rome: IEEE, 2004. 314–317.
|
[16] |
陈健, 张欣, 陈忠仁. 基于Radon变换改进的运动模糊图像PSF参数估计算法. 软件, 2020, 41(6): 1-6. DOI:10.3969/j.issn.1003-6970.2020.06.001 |
[17] |
Woo S, Park J, Lee JY, et al. CBAM: Convolutional block attention module. Proceedings of the 15th European Conference on Computer Vision. Munich: Springer, 2018. 3–19.
|
[18] |
Lin TY, Maire M, Belongie S, et al. Microsoft COCO: Common objects in context. Proceedings of the 13th European Conference on Computer Vision. Zurich: Springer, 2014. 740–755.
|
[19] |
林怡雪, 高尚, 王光彩, 等. 基于改进CPN的人体关键点定位算法研究. 现代计算机, 2020(12): 86-92. |
[20] |
Redmon J, Farhadi A. YOLOv3: An incremental improve-ment. arXiv: 1804.02767, 2018.
|