原文: 计算机视觉八大任务全概述:PaddlePaddle工程师详解热门视觉模型 - 2019.03.22
出处:量子位 - 微信公众号
本文转载自 PaddlePaddle.
编者按:
来自百度的深度学习工程师,围绕计算机视觉领域的八大任务,包括:图像分类、目标检测、图像语义分割、场景文字识别、图像生成、人体关键点检测、视频分类、度量学习等,进行了较为详细的综述并形成此文.
这篇综述中,介绍了这些任务的基本情况,以及目前的技术进展、主要的模型和性能对比等. 而且还逐一附上了GitHub传送门,用于更进一步的学习与安装实践指南. 其中不少教程还是用中文写成,非常友好.
总之,这篇综述全程干货,推荐收藏阅读.
计算机视觉(Computer Vision)是研究如何使机器“看”的科学,更进一步的说,是使用摄像机机和电脑代替人眼对目标进行识别、跟踪和测量等的机器视觉,并通过电脑处理成为更适合人眼观察或传送给仪器检测的图像.
形象地说,就是给计算机安装上眼睛(摄像机)和大脑(算法),让计算机像人一样去看、去感知环境.
计算机视觉技术作为人工智能的重要核心技术之一,已广泛应用于安防、金融、硬件、营销、驾驶、医疗等领域.
本文中,一方面,介绍基于PaddlePaddle的计算机视觉技术在图像分类、目标检测、图像语义分割、场景文字识别四大基本任务场景下,如何帮助计算机从单个或者一系列的图片中提取分析和理解的关键信息及其相关的深度学习模型.
另一方面,视频在人们生活中越来越重要,伴随着技术成熟度的提高,计算机视觉技术的突破也从静态图像识别的“看到”转向了视频理解的“看懂”,故还介绍了基于PaddlePaddle的图像生成、人体关键点检测、视频分类相关的深度学习模型.
一. 图像分类
图像分类是根据图像的语义信息对不同类别图像进行区分,是计算机视觉中重要的基础问题,是物体检测、图像分割、物体跟踪、行为分析、人脸识别等其他高层视觉任务的基础.
图像分类在许多领域都有着广泛的应用. 如:安防领域的人脸识别和智能视频分析等,交通领域的交通场景识别,互联网领域基于内容的图像检索和相册自动归类,医学领域的图像识别等.
1.1. 模型结构
得益于深度学习的推动,图像分类的准确率大幅度提升. 在经典的数据集ImageNet上,训练图像分类任务常用的模型,包括AlexNet、VGG、GoogLeNet、ResNet、Inception-v4、MobileNet、MobileNetV2、DPN(Dual Path Network)、SE-ResNeXt、ShuffleNet等.
△ AlexNet
△ VGG
△ GoogLeNet
△ ResNet
△ Inception-v4
△ MobileNet
△ SE-ResNeXt
△ ShuffleNet
1.2. 精度对比
PaddlePaddle - 预训练模型下载,及 PaddlePaddle Fluid 文档:
(还包括将Caffe模型转换为PaddlePaddle Fluid模型配置和参数文件的工具. )
https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleCV/image_classification
模型的结构和复杂程度都不一样,最终得到的准确率也有所区别. 下面这个表格中,列出了在ImageNet 2012数据集上,不同模型的top-1/top-5验证准确率.
model | top-1/top-5 accuracy(PIL) | top-1/top-5 accuracy(CV2) |
---|---|---|
AlexNet | 56.71%/79.18% | 55.88%/78.65% |
VGG11 | 69.22%/89.09% | 69.01%/88.90% |
VGG13 | 70.14%/89.48% | 69.83%/89.13% |
VGG16 | 72.08%/90.63% | 71.65%/90.57% |
VGG19 | 72.56%/90.83% | 72.32%/90.98% |
MobileNetV1 | 70.91%/89.54% | 70.51%/89.35% |
MobileNetV2 | 71.90%/90.55% | 71.53%/90.41% |
ResNet50 | 76.35%/92.80% | 76.22%/92.92% |
ResNet101 | 77.49%/93.57% | 77.56%/93.64% |
ResNet152 | 78.12%/93.93% | 77.92%/93.87% |
SE_ResNeXt50_32x4d | 78.50%/94.01% | 78.44%/93.96% |
SE_ResNeXt101_32x4d | 79.26%/94.22% | 79.12%/94.20% |
△ 图像分类系列模型评估结果
二. 目标检测
目标检测任务的目标是给定一张图像或是一个视频帧,让计算机找出其中所有目标的位置,并给出每个目标的具体类别.
对于人类来说,目标检测是一个非常简单的任务. 然而,计算机能够“看到”的是图像被编码之后的数字,很难解图像或是视频帧中出现了人或是物体这样的高层语义概念,也就更加难以定位目标出现在图像中哪个区域.
与此同时,由于目标会出现在图像或是视频帧中的任何位置,目标的形态千变万化,图像或是视频帧的背景千差万别,诸多因素都使得目标检测对计算机来说是一个具有挑战性的问题.
在目标检测任务中,主要介绍如何基于PASCAL VOC、MS COCO数据训练通用物体检测模型,包括SSD模型、PyramidBox模型、R-CNN模型.
2.1. SSD模型
Single Shot MultiBox Detector,是一种单阶段的目标检测器. 与两阶段的检测方法不同,单阶段目标检测并不进行区域推荐,而是直接从特征图回归出目标的边界框和分类概率. SSD 运用了这种单阶段检测的思想,并且对其进行改进:在不同尺度的特征图上检测对应尺度的目标,是目标检测领域较新且效果较好的检测算法之一,具有检测速度快且检测精度高的特点.
△ SSD目标检测模型结构
△ SSD目标检测可视化
SSD 模型下载、训练与使用:
https://github.com/PaddlePaddle/models/blob/develop/fluid/PaddleCV/object_detection
Model | Pre-trained Model | Training data | Test data | mAP |
---|---|---|---|---|
MobileNet-v1-SSD 300x300 | COCO MobileNet SSD | VOC07+12 trainval | VOC07 test | 73.32% |
△ 目标检测SSD模型评估结果
2.2. PyramidBox模型
PyramidBox模型 是百度自主研发的人脸检测模型,是一种语境辅助的单次人脸检测新方法,能够解决在不受控制的环境中检测小的、模糊的及部分遮挡的人脸时的问题,模型于18年3月份在WIDER Face数据集上取得第一名.
△ Pyramidbox 人脸检测模型
△ Pyramidbox 预测可视化
Pyramidbox 模型(全中文文档):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/face_detection
模型 | 预训练模型 | 训练数据 | 测试数据 | mAP |
---|---|---|---|---|
Pyramidbox-v1-SSD 640x640 | VGGNet | WIDER FACE train | WIDER FACE Val | 96.0%/ 94.8%/ 88.8% |
△ PyramidBox模型评估结果
2.3. R-CNN系列模型
区域卷积神经网络(R-CNN)系列模型是典型的两阶段目标检测器,相较于传统提取区域的方法,R-CNN 中 RPN 网络通过共享卷积层参数大幅提高提取区域的效率,并提出高质量的候选区域. Faster R-CNN和Mask R-CNN是R-CNN系列的典型模型.
Faster R-CNN是区域生成网络(RPN) + Fast R-CNN的实现,将候选区域生成、特征提取、分类、位置精修统一到一个深度网络框架,大大提高运行速度.
Mask R-CNN在原有Faster R-CNN模型基础上添加分割分支,得到掩码结果,实现了掩码和类别预测关系的解藕,是经典的实例分割模型.
△ Faster R-CNN 结构
△ Faster R-CNN 预测可视化
△ Mask R-CNN结构
△ Mask R-CNN 预测可视化
R-CNN安装、准备、训练等:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/rcnn
Model | RoI function | Batch size | Max iteration | mAP |
---|---|---|---|---|
Fluid RoIPool minibatch padding | RoIPool | 8 | 180000 | 0.316 |
Fluid RoIPool no padding | RoIPool | 8 | 180000 | 0.318 |
Fluid RoIAlign no padding | RoIAlign | 8 | 180000 | 0.348 |
Fluid RoIAlign no padding 2x | RoIAlign | 8 | 360000 | 0.367 |
△ Faster R-CNN评估结果
Model | Batch size | Max iteration | box mAP | mask mAP |
---|---|---|---|---|
Fluid mask no padding | 8 | 180000 | 0.359 | 0.314 |
△ Mask R-CNN评估结果
2.4. YOLOV3 模型
YOLOv3 是一阶段End2End的目标检测器。其目标检测原理如下图所示:
△ YOLOv3 检测原理
YOLOv3 将输入图像分成 SxS 个格子,每个格子预测 B 个bounding box,每个bounding box预测内容包括: Location(x, y, w, h)、Confidence Score和C个类别的概率,因此 YOLOv3 输出层的 channel 数为SxSxBx(5 + C).
YOLOv3 的 loss 函数也有三部分组成:Location误差,Confidence误差和分类误差.
YOLOv3的网络结构如下图所示:
△ YOLOv3 网络结构
YOLOv3 的网络结构由基础特征提取网络、multi-scale特征融合层和输出层组成。
[1] - 特征提取网络
YOLOv3使用 DarkNet53作为特征提取网络:DarkNet53 基本采用了全卷积网络,用步长为2的卷积操作替代了池化层,同时添加了 Residual 单元,避免在网络层数过深时发生梯度弥散。
[2] - 特征融合层
为了解决之前YOLO版本对小目标不敏感的问题,YOLOv3采用了3个不同尺度的特征图来进行目标检测,分别为13x13,26x26,52x52,用来检测大、中、小三种目标。特征融合层选取 DarkNet 产出的三种尺度特征图作为输入,借鉴了FPN(feature pyramid networks)的思想,通过一系列的卷积层和上采样对各尺度的特征图进行融合。
[3] - 输出层
同样使用了全卷积结构,其中最后一个卷积层的卷积核个数是255:3*(80+4+1)=255,3表示一个grid cell包含3个bounding box,4表示框的4个坐标信息,1表示Confidence Score,80表示COCO数据集中80个类别的概率。
△ YOLOv3 可视化检测结果
PaddlePaddle YOLOV3 实现:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/yolov3
input size | 608x608 | 416x416 | 320x320 |
---|---|---|---|
infer speed | 50 ms/frame | 29 ms/frame | 24 ms/frame |
三. 图像语义分割
图像语义分割,顾名思义是将图像像素按照表达的语义含义的不同进行分组/分割.
图像语义是指对图像内容的理解,例如,能够描绘出什么物体在哪里做了什么事情等,分割是指对图片中的每个像素点进行标注,标注属于哪一类别. 近年来用在无人车驾驶技术中分割街景来避让行人和车辆、医疗影像分析中辅助诊断等.
分割任务主要分为实例分割和语义分割.
实例分割是物体检测加上语义分割的综合体.Mask R-CNN是实例分割的经典网络结构之一.
在图像语义分割任务中,主要介绍兼顾准确率和速度的 ICNet,DeepLab中最新、执行效果最好的DeepLab v3+.
3.1. DeepLab v3+
DeepLab v3+,DeepLab语义分割系列网络的最新作,通过encoder-decoder进行多尺度信息的融合,同时保留了原来的空洞卷积和ASSP层, 其骨干网络使用了Xception模型,提高了语义分割的健壮性和运行速率,在 PASCAL VOC 2012 dataset取得新的state-of-art performance,89.0mIOU.
△ DeepLab v3+ 基本结构
DeepLab v3+ - PaddlePaddle 实现:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/deeplabv3%2B
数据集 | norm type | pretrained model | trained model | mean IoU |
---|---|---|---|---|
CityScape | batch norm | deeplabv3plus_xception65_initialize.tgz | deeplabv3plus.tgz | 0.7873 |
CityScape | group norm | deeplabv3plus_gn_init.tgz | deeplabv3plus_gn.tgz | 0.7881 |
△ DeepLab v3+ 评估结果
3.2. ICNet
ICNet, Image Cascade Network,主要用于图像实时语义分割,主要思想是将输入图像变换为不同的分辨率,然后用不同计算复杂度的子网络计算不同分辨率的输入,然后将结果合并. ICNet由三个子网络组成,计算复杂度高的网络处理低分辨率输入,计算复杂度低的网络处理分辨率高的网络,通过这种方式在高分辨率图像的准确性和低复杂度网络的效率之间获得平衡.
△ ICNet网络结构
△ ICNet可视化
ICNet - PaddlePaddle 实现(中文文档):
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/icnet
数据集 | pretrained model | mean IoU |
---|---|---|
CityScape | pretrained_model | 0.67 |
△ ICNet评估结果
四. 场景文字识别
许多场景图像中包含着丰富的文本信息,对理解图像信息有着重要作用,能够极大地帮助人们认知和理解场景图像的内容.
场景文字识别是在图像背景复杂、分辨率低下、字体多样、分布随意等情况下,将图像信息转化为文字序列的过程,可认为是一种特别的翻译过程:将图像输入翻译为自然语言输出.
场景图像文字识别技术的发展也促进了一些新型应用的产生,如通过自动识别路牌中的文字帮助街景应用获取更加准确的地址信息等.
在场景文字识别任务中,介绍如何将基于CNN的图像特征提取和基于RNN的序列翻译技术结合,免除人工定义特征,避免字符分割,使用自动学习到的图像特征,完成字符识别. 这里主要介绍CRNN-CTC 模型和基于注意力机制的序列到序列模型.
4.1. CRNN-CTC模型
CRNN-CTC模型, 采取CNN+RNN+CTC架构,卷积层使用CNN,从输入图像中提取特征序列、循环层使用RNN,预测从卷积层获取的特征序列的标签(真实值)分布、转录层使用CTC,把从循环层获取的标签分布通过去重整合等操作转换成最终的识别结果.
4.2. 基于注意力机制的序列到序列模型
基于注意力机制的序列到序列模型, 提出了基于attention机制的文本识别方法,不需要检测,直接输入图片进行识别,对于识别字符类别数很少的场景很实用,例如车牌识别、自然场景图片的主要关键词提取等. 同时也不要求识别文本必须单行排列,双行排列,多行排列都可以. 在训练过程中则不需要文本框的标注,训练数据的收集变得很方便.
△ CRNN-CTC模型结构
△ 基于注意力机制的序列到序列模型结构
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/ocr_recognition
模型 | 错误率 |
---|---|
ocr_ctc_params | 22.3% |
ocr_attention_params | 15.8% |
△ OCR模型评估结果
五. 图像生成
图像生成是指根据输入向量,生成目标图像. 这里的输入向量可以是随机的噪声或用户指定的条件向量. 具体的应用场景有:手写体生成、人脸合成、风格迁移、图像修复、超分重建等. 当前的图像生成任务主要是借助生成对抗网络(GAN)来实现.
生成对抗网络(GAN)由两种子网络组成:生成器和识别器. 生成器的输入是随机噪声或条件向量,输出是目标图像. 识别器是一个分类器,输入是一张图像,输出是该图像是否是真实的图像. 在训练过程中,生成器和识别器通过不断的相互博弈提升自己的能力.
在图像生成任务中,主要介绍如何使用 DCGAN 和 ConditioanlGAN 来进行手写数字的生成,另外还介绍了用于风格迁移的CycleGAN.
5.1. ConditioanlGAN
ConditioanlGAN ,顾名思义是带条件约束的生成对抗模型,它在生成模型和判别模型的建模中均引入了额外的条件变量,对于生成器对数据的生成具有指导作用. ConditioanlGAN是把无监督的GAN变成有监督模型的改进,为后续的工作提供了指导作用.
△ ConditioanlGAN结构
△ ConditioanlGAN预测效果图
中文文档:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/gan/c_gan
5.2. DCGAN
DCGAN,为了填补CNN在监督学习和无监督学习之间的gap,此篇论文提出了将CNN和GAN结合的DCGAN(深度卷积生成对抗网络),并且DCGAN在无监督学习中取得不错的结果.
△ DCGAN结构
△ DCGAN预测效果图
中文文档:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/gan/c_gan
5.3. CycleGAN
CycleGAN,将一类图片转换成另一类图片. 传统的 GAN 是单向生成,CycleGAN 是互相生成,本质上是两个镜像对称的GAN,构成了一个环形网络,所以命名为 Cycle. 风格迁移类任务一般都需要两个域中具有相同内容的成对图片作为训练数据,CycleGAN的创新点就在于其能够在没有成对训练数据的情况下,将图片内容从源域迁移到目标域.
△ CycleGAN 结构
△ CycleGAN预测可视化
中文文档:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/gan/cycle_gan
六. 人体关键点检测
人体关键点检测,通过人体关键节点的组合和追踪来识别人的运动和行为,对于描述人体姿态,预测人体行为至关重要,是诸多计算机视觉任务的基础,例如动作分类,异常行为检测,以及自动驾驶等等,也为游戏、视频等提供新的交互方式.
在人体关键点检测任务中,主要介绍网络结构简单的coco2018关键点检测项目的亚军方案.
6.1. Simple Baselines for Human Pose Estimation in Fluid
Simple Baselines for Human Pose Estimation in Fluid,coco2018关键点检测项目的亚军方案,没有华丽的技巧,仅仅是在ResNet中插入了几层反卷积,将低分辨率的特征图扩张为原图大小,以此生成预测关键点需要的Heatmap. 没有任何的特征融合,网络结构非常简单,但是达到了state of the art 效果.
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/human_pose_estimation
Arch | Head | Shoulder | Elbow | Wrist | Hip | Knee | Ankle | Mean | Mean@0.1 | Models |
---|---|---|---|---|---|---|---|---|---|---|
383x384_pose_resnet_50 in PyTorch | 96.658 | 95.754 | 89.790 | 84.614 | 88.523 | 84.666 | 79.287 | 89.066 | 38.046 | - |
383x384_pose_resnet_50 in Fluid | 96.248 | 95.346 | 89.807 | 84.873 | 88.298 | 83.679 | 78.649 | 88.767 | 37.374 | link |
△ Simple Baselines for Human Pose Estimation in Fluid 评估结果
七. 视频分类
视频分类是视频理解任务的基础,与图像分类不同的是,分类的对象不再是静止的图像,而是一个由多帧图像构成的、包含语音数据、包含运动信息等的视频对象,因此理解视频需要获得更多的上下文信息,不仅要理解每帧图像是什么、包含什么,还需要结合不同帧,知道上下文的关联信息.
视频分类方法主要包含基于卷积神经网络、基于循环神经网络、或将这两者结合的方法.
在视频分类任务中,主要介绍视频分类方向的多个主流领先模型,其中Attention LSTM,Attention Cluster 和 NeXtVLAD 是比较流行的特征序列模型,TSN 和 StNet 是两个End-to-End的视频分类模型.
Attention LSTM模型速度快精度高,NeXtVLAD 是 2nd-Youtube-8M 比赛中最好的单模型, TSN是基于2D-CNN的经典解决方案. Attention Cluster 和 StNet是百度自研模型,分别发表于CVPR2018和AAAI2019,是Kinetics600比赛第一名中使用到的模型.
7.1. Attention Cluster模型
Attention Cluster模型为ActivityNet Kinetics Challenge 2017中最佳序列模型,通过带Shifting Opeation的Attention Clusters处理已抽取好的RGB、Flow、Audio数据.
△ Attention Cluster模型结构
Attention LSTM 模型,采用了双向长短记忆网络(LSTM),将视频的所有帧特征依次编码. 与传统方法直接采用LSTM最后一个时刻的输出不同,该模型增加了一个Attention层,每个时刻的隐状态输出都有一个自适应权重,然后线性加权得到最终特征向量.
△ Attention LSTM 模型结构
7.2. NeXtVLAD模型
NeXtVLAD模型,第二届Youtube-8M视频理解竞赛中效果最好的单模型,提供了一种将桢级别的视频特征转化并压缩成特征向量,以适用于大尺寸视频文件的分类的方法. 其基本出发点是在NetVLAD模型的基础上,将高维度的特征先进行分组,通过引入attention机制聚合提取时间维度的信息,这样既可以获得较高的准确率,又可以使用更少的参数量.
△ NeXtVLAD模型结构
7.3. StNet模型
StNet模型,框架为ActivityNet Kinetics Challenge 2018中夺冠的基础网络框架,提出“super-image”的概念,在super-image上进行2D卷积,建模视频中局部时空相关性. 另外通过temporal modeling block建模视频的全局时空依赖,最后用一个temporal Xception block对抽取的特征序列进行长时序建模.
△ StNet模型结构
7.4. Temporal Segment Network (TSN)
Temporal Segment Network (TSN) ,视频分类领域经典的基于2D-CNN的解决方案,主要解决视频的长时间行为判断问题,通过稀疏采样视频帧的方式代替稠密采样,既能捕获视频全局信息,也能去除冗余,降低计算量. 最终将每帧特征平均融合后得到视频的整体特征,并用于分类.
△ TSN模型结构
中文文档:
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/video
模型 | Batch Size | 环境配置 | cuDNN版本 | GAP | 下载链接 |
---|---|---|---|---|---|
Attention Cluster | 2048 | 8卡P40 | 7.1 | 0.84 | model |
Attention LSTM | 1024 | 8卡P40 | 7.1 | 0.86 | model |
NeXtVLAD | 160 | 4卡P40 | 7.1 | 0.87 | model |
△ 基于Youtube-8M数据集的视频分类模型 评估结果
模型 | Batch Size | 环境配置 | cuDNN版本 | Top-1 | 下载链接 |
---|---|---|---|---|---|
StNet | 128 | 8卡P40 | 5.1 | 0.69 | model |
TSN | 256 | 8卡P40 | 7.1 | 0.67 | model |
△ 基于Kinetics数据集的视频分类模型 评估结果
八. 度量学习
度量学习也称作距离度量学习、相似度学习,通过学习对象之间的距离,度量学习能够用于分析对象时间的关联、比较关系,在实际问题中应用较为广泛,可应用于辅助分类、聚类问题,也广泛用于图像检索、人脸识别等领域.
以往,针对不同的任务,需要选择合适的特征并手动构建距离函数,而度量学习可根据不同的任务来自主学习出针对特定任务的度量距离函数. 度量学习和深度学习的结合,在人脸识别/验证、行人再识别(human Re-ID)、图像检索等领域均取得较好的性能,在这个任务中我们主要介绍基于Fluid的深度度量学习模型,包含了三元组、四元组等损失函数.
https://github.com/PaddlePaddle/models/tree/develop/fluid/PaddleCV/metric_learning
pretrain model | softmax | arcmargin |
---|---|---|
without fine-tuned | 77.42% | 78.11% |
fine-tuned with triplet | 78.37% | 79.21% |
fine-tuned with quadruplet | 78.10% | 79.59% |
fine-tuned with eml | 79.32% | 80.11% |
△ 度量学习模型 评估结果
10 comments
我也想做一个像你这样的博客,用于做笔记的,你有什么建议的吗
博主您的博客写的太棒了,每一篇都是精华
是不是遍历所有像素点,对每个像素点生成的heatmap与gt 的heatmap做欧式距离呢
终于找到一个能评论的地方了,博主是这样的,我在csdn上看到你对姿态估计heatmap的分析,有一个疑问困扰,就是通过heatmap确定坐标点时,argmax是不可导的,那么在一次反向传播中,heatmap的坐标点是如何更新的呢
欢迎交流学习哈,可能第一次评论需要审核,所以不是不能评论,只是第一次评论不会马上显示出来.
heatmap 相当于一个 nxn 的 mask map 图,前向计算的是预测的 heatmap 和 gt heatmap 之间的欧式距离,并没有 argmax 计算. argmax 计算是在部署测试阶段,根据预测的 mask map 响应图,取响应最强的坐标点,作为估计的关节点坐标位置. 还有采用响应最强坐标点到响应第二强坐标点四分之一方向作为估计的关节点坐标位置.
还请您确定我理解的是否正确,谢谢了
计算的不只是圆的部分,是整个 nxn 的方形 heatmap. 因为网络前向计算的输出是 mxnxn 的 m 个 nxn 特征图.
太感谢了,豁然开朗
恩恩,我想我明白了,我之前一直以为是预测的关节点的高斯heatmap(圆的那部分)和真实的heatmap(圆 的部分)做欧式距离,其实是整个特征图之间的距离,这样才可以解释的通