精华内容
下载资源
问答
  • tensorflow实现人体姿态识别
  • 人体姿态识别

    2017-10-26 00:32:28
    CVPR2017的最新论文,实时的人体姿态估计算法。对深度学习爱好者有帮助
  • 通过使用tensorflow搭建Openpose环境实现对人体18个骨骼点的实时监测。
  • AlphaPose人体姿态识别

    2020-12-07 11:23:13
    AlphaPose 是一个精准的多人姿态估计系统,是首个在 COCO 数据集上可达到 70+ mAP(72.3 mAP,高于 Mask-RCNN 8.2 个百分点),在 MPII 数据集上可达到 80+ mAP(82.1 mAP)的开源系统。为了能将同一个人的所有姿态...
  • 使用深度学习网络处理人体关节点定位的人体姿态识别
  • 用opencv进行姿态识别人体姿态检测和动作识别
  • 人体姿态识别在移动端上开发的经验分享.pdf
  • 第1章 绪论 1.1 研究背景 对于目标实施追踪一直是人们追求的目标,以前只能通过人为的或者其他信息进行模糊的追踪。20世纪初,数字图像的处理走入大众的视野。在那个时候,人们在两地之间传输了一张照片,该照片经过...
  • 摄像头人体姿态检测 opencv 人体姿态检测 Python+OpenCV+OpenPose实现人体姿态估计(人体关键点检测)代码说明参见:https://blog.csdn.net/m0_38106923/article/details/89416514
  • 学习了曹哲的Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields之后自己做的PPT便于理解,希望能帮助到大家,之前一直忘记传..不常登录比较懒见谅^^
  • 该课题为基于MATLAB差影法的人体姿态识别。带有一个GUI可视化界面。需要准备对应的模板图片作为背景图,然后测试图和背景图进行作差,结合形态学知识,提取出人体轮廓,接上最外接矩形,得出矩形长宽,计算长宽比例...
  • 人体姿态识别在人机交互, 游戏以及医疗健康等领域有着深远意义, 基于便携式传感器进行多种人体姿态高精度的稳定识别是该领域的研究难点. 本文采集了8种姿态的高频传感器数据, 提取原始数据的窗口时域特征组成数据集....
  • 人体姿态识别代码

    2021-07-01 14:54:45
  • Github开源人体姿态识别项目OpenPose中文文档 人工智能小技巧 42018.11.11 19:15:26字数 2,405阅读 97,346 logo OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络和监督学习并以caffe...

    摘自:https://www.jianshu.com/p/3aa810b35a5d

    Github开源人体姿态识别项目OpenPose中文文档

    人工智能小技巧

    42018.11.11 19:15:26字数 2,405阅读 97,346

    logo

    OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于卷积神经网络和监督学习并以caffe为框架开发的开源库。可以实现人体动作、面部表情、手指运动等姿态估计。适用于单人和多人,具有极好的鲁棒性。是世界上首个基于深度学习的实时多人二维姿态估计应用,基于它的实例如雨后春笋般涌现。人体姿态估计技术在体育健身、动作采集、3D试衣、舆情监测等领域具有广阔的应用前景,人们更加熟悉的应用就是抖音尬舞机。

    OpenPose项目Github链接:https://github.com/CMU-Perceptual-Computing-Lab/openpose

    为了便于中国开发者学习CMU开源人体姿态识别项目,我将README文档翻译成了中文。

    向卡耐基梅隆大学大学的开发者以及本项目其他贡献者致敬。

    英译汉:张子豪(同济大学开源软件协会)

    文章勘误、补充,请看译者知乎专栏:人工智能小技巧

    In order to facilitate Chinese software developers to learn, use Openpose, make progress in human gesture recognition development and source code contributions, we translated README file into simplified Chinese.

    Salute to the developers in Carnegie Mellon university and the contributors to this project.

    Translattor: Tommy in Tongji Univerisity Opensource Software Association

    人体姿态识别与估计的应用场景:抖音尬舞机、体育动作教学、3D健身教练、3D试衣、绘画辅助、游戏人物动作采集。

    本项目更详细的中文介绍:【AI识人】OpenPose:实时多人2D姿态估计 | 附视频测试及源码链接

    本项目理论基础来自Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields ,是CVPR 2017的一篇论文,作者是来自CMU感知计算实验室的曹哲,Tomas Simon,Shih-En Wei,Yaser Sheikh

    一些人体姿态识别案例案例:

    《芳华》文工团跳舞视频片段:人体姿态识别

    《芳华》文工团跳舞视频片段:人体姿态识别

    《叶问》武打视频片段:人体姿态识别

    《叶问》武打视频片段:人体姿态识别

    内容

    1. 特点
    2. 最近更新
    3. 效果
    4. 安装、重装、卸载
    5. 快速启动
    6. 输出
    7. 增加运算速度以及基准测试
    8. 向我们提供出错信息和反馈
    9. 作者和项目贡献者
    10. 引用
    11. 授权协议

    特点

    • 功能:
      • 二维多人关键点实时识别:
        • 15、18或 25个身体/脚部的关键点识别,运算时间与检测出的人数无关
        • 221个手部关键点识别。目前,运算时间取决于检测出的人数*。
        • 70个面部关键点的识别。目前,运算时间取决于检测出的人数
      • 三维单关键点实时识别:
        • 通过多个单一角度的视频进行三角测量。
        • 菲力尔品牌摄像机的视频同步处理。
        • 与Flir摄像机和Point Grey摄像机兼容,提供了C++语言的代码样本,用户可以自定义输入。
      • 校准工具:
        • 能够对摄像机拍摄中出现的扭曲等内外参数进行简易评估。
      • 针对未来的加速优化和视觉流畅,增加了单人位置追踪
    • 输入: 图片、视频、网络摄像头的视频流、Flir或Point Grey和IP摄像机。项目提供了C++语言的代码样本,用户可以自定义输入。
    • 输出: 原有图片+关键点展示(PNG、JPG、AVI等格式),关键点数据存储文件((JSON, XML, YML等格式)。
    • 操作系统: Ubuntu (14, 16), Windows (8, 10), Mac OSX, Nvidia TX2.
    • 其它:
      • 项目提供: 命令行测试、C++封装、C++ API接口。
      • CUDA (Nvidia GPU), OpenCL (AMD GPU), and CPU 版本。

    最近更新

    更多信息可访问 全部更新文档 以及 版本更新记录.

    效果

    躯干、脚部识别

    躯干、脸部、手部识别

    人体姿态三维重建

    身体、手指关键点识别

    身体识别

    安装、重装、卸载

    Windows能用的版本: 点击所有版本 下载最新的版本即可。

    或者,你也可以点击 安装文档 查看通过源代码编译安装的安装指南。

    快速启动

    大部分用户不需要调用OpenPose的C++和Python的开发接口,这些用户只需要运行OpenPose Demo即可

    • OpenPose Demo: 为了便于处理图片、视频或者网络摄像头的视频流,并展示和后处理结果,你需要看doc/demo_overview.md. 例如,你可以直接通过以下命令在Ubuntu操作系统上处理一个视频。
    # Ubuntu
    ./build/examples/openpose/openpose.bin --video examples/media/video.avi
    :: Windows - Portable Demo
    bin\OpenPoseDemo.exe --video examples\media\video.avi
    

    输出

    请点击这个文档,查看输出文件的格式、关键点数据结构等信息。doc/output.md.

    增加运算速度以及基准测试

    点击这个文档,查看增加运行速度、减少内存需求的提示 doc/faq.md#speed-up-memory-reduction-and-benchmark.

    向我们提供出错信息和反馈!

    我们的代码库面向以科学研究为目的开发者开源,我们希望持续不断地优化它!所以,如果出现了以下情况,请及时向我们反馈。

    1. 你发现OpenPose处理图片或视频出错,请把识别失败的案例发到openposecmu@gmail.com邮箱中,我们会运用你提供的信息优化我们的算法。
    2. 你发现了软件功能或者运行速度上的bug。
    3. 你增加了一些我们可能吸纳到项目源代码中的函数、类或者其它子类。
    4. 你知道如何针对本项目优化性能、提升检测速度。
    5. 你发现本项目的一个潜在应用场景。
    6. 其它问题.

    你可以在Github上评论,或者pull request提交你的新代码,我们会尽快回复你的。如果你基于本项目做了有趣的开发或者录制了Youtube视频,请给我们发电子邮件。

    作者和项目贡献者

    Openpose项目由 Gines Hidalgo, Zhe Cao, Tomas Simon, Shih-En Wei, Hanbyul Joo, 和 Yaser Sheikh创造发起。 目前,这个项目由 Gines HidalgoYaadhav Raaj进行日常维护。 original CVPR 2017 repo 包括了Matlab和Python版本,以及模型训练代码。人体姿态评估方面的工作是基于 the original ECCV 2016 demo的。

    除此之外,不可或缺的还有 CMU Panoptic Studio dataset

    我们还想感谢所有帮助过OpenPose项目的人,主要贡献者列在了这个文档里doc/contributors.md

    引用

    如果本项目帮助了你的研究,请在你发表的作品里注明引用出处(人脸关键点识别与[Simon et al. 2017]使用了同样的训练方法)。

    @inproceedings{cao2017realtime,
      author = {Zhe Cao and Tomas Simon and Shih-En Wei and Yaser Sheikh},
      booktitle = {CVPR},
      title = {Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields},
      year = {2017}
    }
    
    @inproceedings{simon2017hand,
      author = {Tomas Simon and Hanbyul Joo and Iain Matthews and Yaser Sheikh},
      booktitle = {CVPR},
      title = {Hand Keypoint Detection in Single Images using Multiview Bootstrapping},
      year = {2017}
    }
    
    @inproceedings{wei2016cpm,
      author = {Shih-En Wei and Varun Ramakrishna and Takeo Kanade and Yaser Sheikh},
      booktitle = {CVPR},
      title = {Convolutional pose machines},
      year = {2016}
    }
    

    授权协议

    Openpose对于非商业化使用是免费的,而且仅限于这些情况。点击 license查看更多细节。对商业使用的授权感兴趣?点我吧。咨询商业应用相关信息可以联系 Yaser Sheikh.

    参考文献和扩展阅读

    【1】论文:https://arxiv.org/pdf/1611.08050.pdf

    【2】姿态检测视频制作源码:muyiguangda/caffe_rtpose

    【3】开头视频:Changing Batteries 更换电池「中字」

    【4】CMU训练数据集: CMU Panoptic Dataset

    【4】匈牙利算法: Hungarian algorithm

    古画人体姿态分析

    展开全文
  • 本例程是我研究生阶段做的一个小项目,该项目用pytorch的深度学习框架来进行人体姿态识别,能够实现头部和身体的骨架识别!图像处理方面加入了OpenCV包进行相关的处理,希望能帮助大家!
  • 基于openpose的人体姿态识别部署详细过程 毕设的题目是这个问题,自己学了很久都没有看懂网上的各种各样的教程,终于在今天问老师之后解决了。具体过程如下。 1. opencv的下载 2. 下载CUDA、cuDNN以及安装 3. python...

    基于openpose的人体姿态识别部署详细过程

    毕设的题目是这个问题,自己学了很久都没有看懂网上的各种各样的教程,终于在今天问老师之后解决了。具体过程如下。

    1. opencv的下载
    2. 下载CUDA、cuDNN以及安装
    3. python 3.6的下载
    4. openpose文件的下载
    5. 使用python配置命令行参数

    opencv的下载

    下载地址https://opencv.org/,opencv安装很简单,教程可以看这篇https://blog.csdn.net/qq_41277822/article/details/104018866

    下载CUDA、cuDNN以及安装

    首先查看一下自己的电脑能用什么版本的CUDA,win+R,输入control,进入控制面板,把产看方式改为大图标或者小图标
    在这里插入图片描述
    进入NVIDA控制面板,点击右上角帮助,系统信息,组件查看版本信息,可以看到我的电脑支持的版本号为9.0, 查看自己的版本号,我看网上说可以向下兼容,但是我安装8.0的时候并没有成功还是安装的9.0才成功的。而且因为CUDA的下载地址是国外的,国内的下载镜像经常不能用,就算能下载,速度也非常让人崩溃。所以文末会附上CUDA9.0和配套的CUDNN
    在这里插入图片描述
    CUDA的安装也很简单,不会的可以自行搜索。
    附上下载CUDA地址:CUDA下载地址(不建议在官网上下载速度太慢)
    CUDNN是CUDA的优化包,在CUDA安装完成后,将cuDNN压缩包CUDA文件夹下的文件解压到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0目录下

    Python3.6的下载

    Python的版本无所谓,只要能用就可以
    下载地址:python下载地址
    安装python过程也非常简单,主要就是不要忘记把PATH勾上
    在这里插入图片描述
    安装后可以在windows命令行程序中输入python查看是否安装成功如图所示
    在这里插入图片描述

    OPENPOSE文件的下载

    1在这里使用的是opencv里的dnn中的openpose.py
    opencv下载地址https://github.com/opencv/opencv
    在这里插入图片描述
    下载zip压缩文件,最近GitHub也总是进不去,文末也会一起附上网盘链接
    由于还缺少COCO数据集所以还要下载COCO数据集
    下载地址https://github.com/CMU-Perceptual-Computing-Lab/openpose/tree/master/models/pose
    这里是COCO的文件,不知道怎么单独下载一个COCO文件所以我只能把整个openpose下载下来。

    使用python配置命令行参数

    首先将下载下来的COCO文件夹放到dnn文件目录中如图所示。
    在这里插入图片描述
    打开openpose.py.

    # To use Inference Engine backend, specify location of plugins:
    # source /opt/intel/computer_vision_sdk/bin/setupvars.sh
    import cv2 as cv
    import numpy as np
    import argparse
    
    parser = argparse.ArgumentParser(
            description='This script is used to demonstrate OpenPose human pose estimation network '
                        'from https://github.com/CMU-Perceptual-Computing-Lab/openpose project using OpenCV. '
                        'The sample and model are simplified and could be used for a single person on the frame.')
    parser.add_argument('--input', help='Path to image or video. Skip to capture frames from camera')
    parser.add_argument('--proto', help='Path to .prototxt')
    parser.add_argument('--model', help='Path to .caffemodel')
    parser.add_argument('--dataset', help='Specify what kind of model was trained. '
                                          'It could be (COCO, MPI, HAND) depends on dataset.')
    parser.add_argument('--thr', default=0.1, type=float, help='Threshold value for pose parts heat map')
    parser.add_argument('--width', default=368, type=int, help='Resize input to specific width.')
    parser.add_argument('--height', default=368, type=int, help='Resize input to specific height.')
    parser.add_argument('--scale', default=0.003922, type=float, help='Scale for blob.')
    
    args = parser.parse_args()
    print(args.dataset)
    if args.dataset == 'COCO':
        BODY_PARTS = { "Nose": 0, "Neck": 1, "RShoulder": 2, "RElbow": 3, "RWrist": 4,
                       "LShoulder": 5, "LElbow": 6, "LWrist": 7, "RHip": 8, "RKnee": 9,
                       "RAnkle": 10, "LHip": 11, "LKnee": 12, "LAnkle": 13, "REye": 14,
                       "LEye": 15, "REar": 16, "LEar": 17, "Background": 18 }
    
        POSE_PAIRS = [["Neck", "RShoulder"], ["Neck", "LShoulder"], ["RShoulder", "RElbow"],
                      ["RElbow", "RWrist"], ["LShoulder", "LElbow"], ["LElbow", "LWrist"],
                      ["Neck", "RHip"], ["RHip", "RKnee"], ["RKnee", "RAnkle"], ["Neck", "LHip"],
                      ["LHip", "LKnee"], ["LKnee", "LAnkle"], ["Neck", "Nose"], ["REye", "REar"],
                      ["Nose", "REye"], ["Nose", "LEye"], ["LEye", "LEar"]]
    elif args.dataset == 'MPI':
        BODY_PARTS = { "Head": 0, "Neck": 1, "RShoulder": 2, "RElbow": 3, "RWrist": 4,
                       "LShoulder": 5, "LElbow": 6, "LWrist": 7, "RHip": 8, "RKnee": 9,
                       "RAnkle": 10, "LHip": 11, "LKnee": 12, "LAnkle": 13, "Chest": 14,
                       "Background": 15 }
    
        POSE_PAIRS = [ ["Head", "Neck"], ["Neck", "RShoulder"], ["RShoulder", "RElbow"],
                       ["RElbow", "RWrist"], ["Neck", "LShoulder"], ["LShoulder", "LElbow"],
                       ["LElbow", "LWrist"], ["Neck", "Chest"], ["Chest", "RHip"], ["RHip", "RKnee"],
                       ["RKnee", "RAnkle"], ["Chest", "LHip"], ["LHip", "LKnee"], ["LKnee", "LAnkle"] ]
    else:
        assert(args.dataset == "HAND")
        BODY_PARTS = { "Wrist": 0,
                       "ThumbMetacarpal": 1, "ThumbProximal": 2, "ThumbMiddle": 3, "ThumbDistal": 4,
                       "IndexFingerMetacarpal": 5, "IndexFingerProximal": 6, "IndexFingerMiddle": 7, "IndexFingerDistal": 8,
                       "MiddleFingerMetacarpal": 9, "MiddleFingerProximal": 10, "MiddleFingerMiddle": 11, "MiddleFingerDistal": 12,
                       "RingFingerMetacarpal": 13, "RingFingerProximal": 14, "RingFingerMiddle": 15, "RingFingerDistal": 16,
                       "LittleFingerMetacarpal": 17, "LittleFingerProximal": 18, "LittleFingerMiddle": 19, "LittleFingerDistal": 20,
                     }
    
        POSE_PAIRS = [ ["Wrist", "ThumbMetacarpal"], ["ThumbMetacarpal", "ThumbProximal"],
                       ["ThumbProximal", "ThumbMiddle"], ["ThumbMiddle", "ThumbDistal"],
                       ["Wrist", "IndexFingerMetacarpal"], ["IndexFingerMetacarpal", "IndexFingerProximal"],
                       ["IndexFingerProximal", "IndexFingerMiddle"], ["IndexFingerMiddle", "IndexFingerDistal"],
                       ["Wrist", "MiddleFingerMetacarpal"], ["MiddleFingerMetacarpal", "MiddleFingerProximal"],
                       ["MiddleFingerProximal", "MiddleFingerMiddle"], ["MiddleFingerMiddle", "MiddleFingerDistal"],
                       ["Wrist", "RingFingerMetacarpal"], ["RingFingerMetacarpal", "RingFingerProximal"],
                       ["RingFingerProximal", "RingFingerMiddle"], ["RingFingerMiddle", "RingFingerDistal"],
                       ["Wrist", "LittleFingerMetacarpal"], ["LittleFingerMetacarpal", "LittleFingerProximal"],
                       ["LittleFingerProximal", "LittleFingerMiddle"], ["LittleFingerMiddle", "LittleFingerDistal"] ]
    
    
    inWidth = args.width
    inHeight = args.height
    inScale = args.scale
    
    net = cv.dnn.readNet(cv.samples.findFile(args.proto), cv.samples.findFile(args.model))
    
    cap = cv.VideoCapture(args.input if args.input else 0)##视频读取
    
    while cv.waitKey(1) < 0:
        hasFrame, frame = cap.read()
        if not hasFrame:
            cv.waitKey()
            break
    
        frameWidth = frame.shape[1]
        frameHeight = frame.shape[0]
        inp = cv.dnn.blobFromImage(frame, inScale, (inWidth, inHeight),
                                  (0, 0, 0), swapRB=False, crop=False)
        net.setInput(inp)
        out = net.forward()
    
        assert(len(BODY_PARTS) <= out.shape[1])
    
        points = []
        for i in range(len(BODY_PARTS)):
            # Slice heatmap of corresponding body's part.
            heatMap = out[0, i, :, :]
    
            # Originally, we try to find all the local maximums. To simplify a sample
            # we just find a global one. However only a single pose at the same time
            # could be detected this way.
            _, conf, _, point = cv.minMaxLoc(heatMap)
            x = (frameWidth * point[0]) / out.shape[3]
            y = (frameHeight * point[1]) / out.shape[2]
    
            # Add a point if it's confidence is higher than threshold.
            points.append((int(x), int(y)) if conf > args.thr else None)
    
        for pair in POSE_PAIRS:
            partFrom = pair[0]
            partTo = pair[1]
            assert(partFrom in BODY_PARTS)
            assert(partTo in BODY_PARTS)
    
            idFrom = BODY_PARTS[partFrom]
            idTo = BODY_PARTS[partTo]
    
            if points[idFrom] and points[idTo]:
                cv.line(frame, points[idFrom], points[idTo], (0, 255, 0), 3)
                cv.ellipse(frame, points[idFrom], (3, 3), 0, 0, 360, (0, 0, 255), cv.FILLED)
                cv.ellipse(frame, points[idTo], (3, 3), 0, 0, 360, (0, 0, 255), cv.FILLED)
    
        t, _ = net.getPerfProfile()
        freq = cv.getTickFrequency() / 1000
        cv.putText(frame, '%.2fms' % (t / freq), (10, 20), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0))
    
        cv.imshow('OpenPose using OpenCV', frame)
    cv.waitKey(0)
    

    可以看见第十一行到十四行是需要输入的内容。
    在这里插入图片描述
    input要输入的视频地址,事先要下载一个比较清晰的一个人的视频在dnn文件夹中,proto是要输入的prototex的地址,model是要输入的caffemodel地址,这两个文件都在COCO文件夹中,dataset是选择的数据集COCO。
    具体操作为打开命令行跳转到dnn文件夹下,输入一下内容

    python openpose2.py --input D:\yxd\Desktop\opencv-master\samples\dnn\shipin.mp4 --proto D:\yxd\Desktop\opencv-master\samples\dnn\coco\pose_deploy_linevec.prototxt --model D:\yxd\Desktop\opencv-master\samples\dnn\coco\pose_iter_440000.caffemodel --dataset COCO

    注意里面文件的地址要换成在你电脑中所在的位置。效果如下图
    在这里插入图片描述
    就能得到结果了。
    在这里插入图片描述
    电脑配置不是很好所以视频会卡的像图片一样。
    如果想对图片进行骨骼提取和视频没有太大区别,但是需要把input换成图片所在地址。
    代码如下

    # To use Inference Engine backend, specify location of plugins:
    # source /opt/intel/computer_vision_sdk/bin/setupvars.sh
    import cv2 as cv
    import numpy as np
    import argparse
    
    parser = argparse.ArgumentParser(
            description='This script is used to demonstrate OpenPose human pose estimation network '
                        'from https://github.com/CMU-Perceptual-Computing-Lab/openpose project using OpenCV. '
                        'The sample and model are simplified and could be used for a single person on the frame.')
    parser.add_argument('--input', help='Path to image or video. Skip to capture frames from camera')
    parser.add_argument('--proto', help='Path to .prototxt')
    parser.add_argument('--model', help='Path to .caffemodel')
    parser.add_argument('--dataset', help='Specify what kind of model was trained. '
                                          'It could be (COCO, MPI, HAND) depends on dataset.')
    parser.add_argument('--thr', default=0.1, type=float, help='Threshold value for pose parts heat map')
    parser.add_argument('--width', default=368, type=int, help='Resize input to specific width.')
    parser.add_argument('--height', default=368, type=int, help='Resize input to specific height.')
    parser.add_argument('--scale', default=0.003922, type=float, help='Scale for blob.')
    
    args = parser.parse_args()
    print('args::', args)
    print(args.dataset)
    if args.dataset == 'COCO':
        BODY_PARTS = { "Nose": 0, "Neck": 1, "RShoulder": 2, "RElbow": 3, "RWrist": 4,
                       "LShoulder": 5, "LElbow": 6, "LWrist": 7, "RHip": 8, "RKnee": 9,
                       "RAnkle": 10, "LHip": 11, "LKnee": 12, "LAnkle": 13, "REye": 14,
                       "LEye": 15, "REar": 16, "LEar": 17, "Background": 18 }
    
        POSE_PAIRS = [["Neck", "RShoulder"], ["Neck", "LShoulder"], ["RShoulder", "RElbow"],
                      ["RElbow", "RWrist"], ["LShoulder", "LElbow"], ["LElbow", "LWrist"],
                      ["Neck", "RHip"], ["RHip", "RKnee"], ["RKnee", "RAnkle"], ["Neck", "LHip"],
                      ["LHip", "LKnee"], ["LKnee", "LAnkle"], ["Neck", "Nose"], ["REye", "REar"],
                      ["Nose", "REye"], ["Nose", "LEye"], ["LEye", "LEar"]]
    elif args.dataset == 'MPI':
        BODY_PARTS = { "Head": 0, "Neck": 1, "RShoulder": 2, "RElbow": 3, "RWrist": 4,
                       "LShoulder": 5, "LElbow": 6, "LWrist": 7, "RHip": 8, "RKnee": 9,
                       "RAnkle": 10, "LHip": 11, "LKnee": 12, "LAnkle": 13, "Chest": 14,
                       "Background": 15 }
    
        POSE_PAIRS = [ ["Head", "Neck"], ["Neck", "RShoulder"], ["RShoulder", "RElbow"],
                       ["RElbow", "RWrist"], ["Neck", "LShoulder"], ["LShoulder", "LElbow"],
                       ["LElbow", "LWrist"], ["Neck", "Chest"], ["Chest", "RHip"], ["RHip", "RKnee"],
                       ["RKnee", "RAnkle"], ["Chest", "LHip"], ["LHip", "LKnee"], ["LKnee", "LAnkle"] ]
    else:
        assert(args.dataset == "HAND")
        BODY_PARTS = { "Wrist": 0,
                       "ThumbMetacarpal": 1, "ThumbProximal": 2, "ThumbMiddle": 3, "ThumbDistal": 4,
                       "IndexFingerMetacarpal": 5, "IndexFingerProximal": 6, "IndexFingerMiddle": 7, "IndexFingerDistal": 8,
                       "MiddleFingerMetacarpal": 9, "MiddleFingerProximal": 10, "MiddleFingerMiddle": 11, "MiddleFingerDistal": 12,
                       "RingFingerMetacarpal": 13, "RingFingerProximal": 14, "RingFingerMiddle": 15, "RingFingerDistal": 16,
                       "LittleFingerMetacarpal": 17, "LittleFingerProximal": 18, "LittleFingerMiddle": 19, "LittleFingerDistal": 20,
                     }
    
        POSE_PAIRS = [ ["Wrist", "ThumbMetacarpal"], ["ThumbMetacarpal", "ThumbProximal"],
                       ["ThumbProximal", "ThumbMiddle"], ["ThumbMiddle", "ThumbDistal"],
                       ["Wrist", "IndexFingerMetacarpal"], ["IndexFingerMetacarpal", "IndexFingerProximal"],
                       ["IndexFingerProximal", "IndexFingerMiddle"], ["IndexFingerMiddle", "IndexFingerDistal"],
                       ["Wrist", "MiddleFingerMetacarpal"], ["MiddleFingerMetacarpal", "MiddleFingerProximal"],
                       ["MiddleFingerProximal", "MiddleFingerMiddle"], ["MiddleFingerMiddle", "MiddleFingerDistal"],
                       ["Wrist", "RingFingerMetacarpal"], ["RingFingerMetacarpal", "RingFingerProximal"],
                       ["RingFingerProximal", "RingFingerMiddle"], ["RingFingerMiddle", "RingFingerDistal"],
                       ["Wrist", "LittleFingerMetacarpal"], ["LittleFingerMetacarpal", "LittleFingerProximal"],
                       ["LittleFingerProximal", "LittleFingerMiddle"], ["LittleFingerMiddle", "LittleFingerDistal"] ]
    
    
    inWidth = args.width
    inHeight = args.height
    inScale = args.scale
    
    net = cv.dnn.readNet(cv.samples.findFile(args.proto), cv.samples.findFile(args.model))#加载模型
    
    frame = cv.imread(args.input) ##读取图片
    
    frameWidth = frame.shape[1]  ##shape函数读取矩阵长度
    frameHeight = frame.shape[0]
    inp = cv.dnn.blobFromImage(frame, inScale, (inWidth, inHeight),
                              (0, 0, 0), swapRB=False, crop=False)##对图像进行预处理,裁剪缩放
    net.setInput(inp)
    out = net.forward()
    
    assert(len(BODY_PARTS) <= out.shape[1])
    
    points = []
    for i in range(len(BODY_PARTS)):
        # Slice heatmap of corresponding body's part.
        heatMap = out[0, i, :, :]
    
        # Originally, we try to find all the local maximums. To simplify a sample
        # we just find a global one. However only a single pose at the same time
        # could be detected this way.
        _, conf, _, point = cv.minMaxLoc(heatMap)
        x = (frameWidth * point[0]) / out.shape[3]
        y = (frameHeight * point[1]) / out.shape[2]
    
        # Add a point if it's confidence is higher than threshold.
        points.append((int(x), int(y)) if conf > args.thr else None)
    print(points)
    for pair in POSE_PAIRS:
        partFrom = pair[0]
        partTo = pair[1]
        assert(partFrom in BODY_PARTS)
        assert(partTo in BODY_PARTS)
    
        idFrom = BODY_PARTS[partFrom]
        idTo = BODY_PARTS[partTo]
    
        if points[idFrom] and points[idTo]:
            cv.line(frame, points[idFrom], points[idTo], (0, 255, 0), 3)
            cv.ellipse(frame, points[idFrom], (3, 3), 0, 0, 360, (0, 0, 255), cv.FILLED)
            cv.ellipse(frame, points[idTo], (3, 3), 0, 0, 360, (0, 0, 255), cv.FILLED)
    
    t, _ = net.getPerfProfile()
    freq = cv.getTickFrequency() / 1000
    cv.putText(frame, '%.2fms' % (t / freq), (10, 20), cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0))
    
    cv.imshow('OpenPose using OpenCV', frame)
    cv.waitKey(0)
    
    

    资源下载

    在这个项目中需要的资源都存到网盘里了,需要自取
    链接:https://pan.baidu.com/s/16AQlgMpg1WHlyIo2_NbYeA
    提取码:90tx
    这里面的opencv-master里已经把COCO放进去了,还有两张示例图片以及视频。openpose.py是图片处理,openpose2.py是视频提取。

    第一次写这个文章,里面可能有谬误,多多包涵。

    展开全文
  • 提出了一种基于手机加速度与陀螺仪数据的卷积—卷积长短时记忆—注意力(CCLA,convolution-convolutional long short-term memory-attention)人体姿态识别算法。使用卷积神经网络对姿态数据进行空间特征提取,采用...
  • 一,人体姿态识别数据集 1,2D数据集: LSP 地址:http://sam.johnson.io/research/lsp.html 样本数:2K 关节点个数:14 全身,单人 FLIC 地址:https://bensapp.github.io/flic-dataset.html 样本数:2W ...

    一,人体姿态识别数据集

    1,2D数据集:

    LSP

    地址:http://sam.johnson.io/research/lsp.html

    样本数:2K

    关节点个数:14

    全身,单人

    FLIC

    地址:https://bensapp.github.io/flic-dataset.html

    样本数:2W

    关节点个数:9

    全身,单人

    MPII

    地址:http://human-pose.mpi-inf.mpg.de/

    样本数:25K

    关节点个数:16

    全身,单人/多人,40K people,410 human activities

    MSCOCO

    地址:http://cocodataset.org/#download

    样本数:>= 30W

    关节点个数:18

    全身,多人,keypoints on 10W people

    AI Challenge

    地址:https://challenger.ai/competition/keypoint/subject

    样本数:21W Training, 3W Validation, 3W Testing

    关节点个数:14

    全身,多人,38W people

    2,3D数据集:

    在数据处理阶段,3D比2D复杂很多。2D人体姿态识别在dataset和model方面都比3D成熟,2Dmodel也有很多户外,自然界的dataset,但是3D的dataset几乎都是indoor的。因为3D标注、识别的复杂,所以需要大量的传感器,摄像头去采集数据。收集了几个最近看到的数据集分享给大家。

    Human3.6M数据集    Human3.6M数据集有360万个3D人体姿势和相应的图像,共有11个实验者(6男5女,论文一般选取1,5,6,7,8作为train,9,11作为test),共有17个动作场景,诸如讨论、吃饭、运动、问候等动作。该数据由4个数字摄像机,1个时间传感器,10个运动摄像机捕获。
    CMU Panoptic dataset        该数据集是CMU大学制作,由480个VGA摄像头,30+HD摄像头和10个Kinnect传感器采集。
    3、MPI-INF-3DHP        该数据集由Max Planck Institute for Informatics制作,详情可见Monocular 3D Human Pose Estimation In The Wild Using Improved CNN Supervision论文。
     

    二,人体姿态估计重要论文

    相关论文分享:链接:https://pan.baidu.com/s/1wVQJfPgyXVQAmdSIKQNPAA 
    提取码:077o

    1,单人姿态估计的重要论文

    2014----Articulated Pose Estimation by a Graphical Model with ImageDependent Pairwise Relations

    2014----DeepPose_Human Pose Estimation via Deep Neural Networks

    2014----Joint Training of a Convolutional Network and a Graphical Model forHuman Pose Estimation

    2014----Learning Human Pose Estimation Features with Convolutional Networks

    2014----MoDeep_ A Deep Learning Framework Using Motion Features for HumanPose Estimation

    2015----Efficient Object Localization Using Convolutional Networks

    2015----Human Pose Estimation with Iterative Error

    2015----Pose-based CNN Features for Action Recognition

    2016----Advancing Hand Gesture Recognition with High Resolution ElectricalImpedance Tomography

    2016----Chained Predictions Using Convolutional Neural Networks

    2016----CPM----Convolutional Pose Machines

    2016----CVPR-2016----End-to-End Learning of Deformable Mixture of Parts andDeep Convolutional Neural Networks for Human Pose Estimation

    2016----Deep Learning of Local RGB-D Patches for 3D Object Detection and 6DPose Estimation

    2016----PAFs----Realtime Multi-Person 2D Pose Estimation using PartAffinity Fields (openpose)

    2016----Stacked hourglass----StackedHourglass Networks for Human Pose Estimation

    2016----Structured Feature Learning for Pose Estimation

    2017----Adversarial PoseNet_ A Structure-aware Convolutional Network forHuman pose estimation (alphapose)

    2017----CVPR2017 oral----Realtime Multi-Person 2D Pose Estimation usingPart Affinity Fields

    2017----Learning Feature Pyramids for Human Pose Estimation

    2017----Multi-Context_Attention_for_Human_Pose_Estimation

    2017----Self Adversarial Training for Human Pose Estimation

    2,多人姿态估计的重要论文

    2016----AssociativeEmbedding_End-to-End Learning for Joint Detection and Grouping

    2016----DeepCut----Joint Subset Partition and Labeling for Multi PersonPose Estimation

    2016----DeepCut----Joint Subset Partition and Labeling for Multi PersonPose Estimation_poster

    2016----DeeperCut----DeeperCut A Deeper, Stronger, and Faster Multi-PersonPose Estimation Model

    2017----G-RMI----Towards Accurate Multi-person Pose Estimation in the Wild

    2017----RMPE_ Regional Multi-PersonPose Estimation

    2018----Cascaded Pyramid Network for Multi-Person Pose Estimation

    “级联金字塔网络用于多人姿态估计”

    2018----DensePose: Dense Human Pose Estimation in the Wild

    ”密集人体:野外人体姿势估计“(精读,DensePose有待于进一步研究)

    2018---3D Human Pose Estimation in the Wild by Adversarial Learning

    “对抗性学习在野外的人体姿态估计”

     

    三,单人姿态估计
    2015 年之前的方法都是回归出精确的关节点坐标( x,y ),采用这种方法不好的原因是人体运动灵活,模型可扩展性较差。本文主要是2015年之后人体姿态识别的发展综述。(1)遮挡问题,这个问题恐怕是最难的,也是必须要解决的(2)速度过慢。(3)仅仅有二位的姿态是不够的,目前也有这一类的研究,关于直接从2d到3d的姿态进行直接估计。这一点是未来发展的趋势。

    单人姿态估计性能评价指标:MPII单人数据集,LSP数据集和FLIC数据集。通过对比这三个数据集的PCK值来评价模型好坏。评价指标为PCK(Percentage of Correct Keypoints)即关键点正确估计的比例,计算检测的关键点与其对应的groundtruth 间的归一化距离小于设定阈值的比例,FLIC中是以躯干直径作为归一化参考,MPII中是以头部长度作为归一化参考,即PCKh。目前MPII单人数据集的排名如下:

    发展历程:

    《Flowing ConvNets for Human Pose Estimation in Videos》ICCV 2015

    2015 年 flow convnet 将姿态估计看作是检测问题,输出是 heatmap。用相对于AlexNet更深的CNN网络进行人体姿态估计,提高关节点定位的鲁棒性,利用temporal提高精度。其创新点在于从卷积神经网络的 3 和 7 层提取出来,再经过卷积操作,称之为空间融合模型,用来提取关节点之间的内在联系;同时使用光流信息,用来对准相邻帧的 heatmap 预测。最后使用参数池化层,将对齐的heatmap 合并成一个 scoremap(置信图)。

    网络pipeline:对于当前帧t,输入它的相邻的前后n帧。利用全卷积神经网络(Spatial Net + Spatial Fusion Layers)对每一帧输出一个预测的heatmap。再利用光流信息将这些heatmap扭曲到当前帧t。之后将warped的heatmap合并到另一个卷积层中,该层学习如何权衡来自附近框架的扭曲的heatmap。最后使用集合热图的最大值作为人体的身体关节。

    评测数据集:FLIC数据集,对于wrist(手腕)和elbow(肘部)的平均PCK可以达到92%,可以做到实时性,速度为5fps。但是该方法对于pose的估计范围有限,只是半身的关节点,并不是全身的身体骨骼点。

    《Convolutional Pose Machines》CVPR 2016[21]

    2016 年提出的 CPM 方法具有很强的鲁棒性,之后的很多方法是基于此改进的。CPM 的贡献在于使用顺序化的卷积架构来表达空间信息和纹理信息。网络分为多个阶段,每一个阶段都有监督训练的部分。前面的阶段使用原始图片作为输入,后面阶段使用之前阶段的特征图作为输入,主要是为了融合空间信息,纹理信息和中心约束。另外,对同一个卷积架构同时使用多个尺度处理输入的特征和响应,既能保证精度,又考虑了各部件之间的远近距离关系。

    网络输入彩色图像(绿色ori image)。以半身模型为例,分为四个阶段(stage)。每个阶段都能输出各个部件的响应图(蓝色score),使用时以最后一个阶段的响应图输出为准。center map(绿色)是一个提前生成的高斯函数模板,用来把响应归拢到图像中心。 第一阶段是一个基本的卷积网络1(白色convs),从彩色图像直接预测每个部件的响应。半身模型有9个部件,另外包含一个背景响应,共10层响应图。第二阶段也是从彩色图像预测各部件响应,但是在卷积层中段多了一个串联层(红色concat),把以下三个数据合一:

    阶段性的卷积结果(46*46*32)→ →\to 纹理特征 , 前一阶段各部件响应(46*46*10)→ →\to 空间特征 ,中心约束(46*46*1) ,串联后的结果尺寸不变,深度变为32+10+1 = 43。第三阶段不再使用原始图像为输入,而是从第二阶段的中途取出一个深度为128的特征图(feature image)作为输入。同样使用串联层综合三种因素:纹理特征+空间特征+中心约束。 第四阶段结构和第三阶段完全相同。在设计更复杂的网络时(例如全身模型),只需调整部件数量(从10变为15),并重复第三阶段结构即可。

    该论文的主要训练细节有三:

    1. 数据增强:对原始图片进行随机缩放,旋转,镜像

    2. 标定:在每个关节点的位置放置一个高斯响应,来构造响应图的真值。对于含有多个人的图像,生成两种真值响应,一是在每个人的相应关节位置,放置高斯响应。二是只在标定的人的相应关节位置,放置高斯响应。

    3. 中继监督,多个loss:如果直接对整个网络进行梯度下降,则输出层在经过多层反向传播会大幅度的减小,解决方法就是在每个阶段都输出一个loss,可保证底层参数正常更新。

    评测数据集:MPII,LSP,FLIC,在MPII数据集上的total PCKh是87.95%(如果加上LSP数据集作为训练,将达到88.52%),在LSP数据集上的PCKh是84.32%(如果加上MPII数据集作为训练,将达到90.5%),在FLIC数据集上的PCK@0.2分别是elbows(97.59%),wrist(95.03%)。速度不明,应该无法做到实时。

    《Stacked Hourglass Networks for Human Pose Estimation》ECCV 2016[26]

    本文使用全卷积网络解决人体姿态分析问题,截至2016年5月,在MPII姿态分析竞赛中暂列榜首,PCKh(误差小于一半头高的样本比例)达到89.4%。与排名第二的CPM(Convolutiona Pose Machine)1方法相比,思路更明晰,网络更简洁。该论文体现了从模块到网络再到完整网络的设计思想。

    使用的初级模块称为Residual Module,得名于其中的旁路相加结构。参考文献[6]有详细介绍

    作用:Residual模块提取了较高层次的特征(卷积路),同时保留了原有层次的信息(跳级路)。不改变数据尺寸,只改变数据深度。可以把它看做一个保尺寸的高级“卷积”层。

    上下两个半路都包含若干Residual模块(浅绿),逐步提取更深层次特征。但上半路在原尺度进行,下半路经历了先降采样(红色/2)再升采样(红色*2)的过程。

    降采样使用max pooling,升采样使用最近邻插值。n阶Hourglass子网络提取了从原始尺度到1/2 n  1/2n1/2^n尺度的特征。不改变数据尺寸,只改变数据深度。

    以一个Hourglass(深绿色)为中心,可以从彩色图像预测K个人体部件的响应图。原始图像经过一次降采样(橙色),输入到Hourglass子网络中。Hourglass的输出结果经过两个线性模块(灰色),得到最终响应图。期间使用Residual模块(浅绿)和卷积层(白色)逐步提取特征。而本文用的是以两个Hourglass(深绿色)为中心的二级网络。二级网络重复了一级网络的后半结构。第二个Hourglass的输入包含三路: 第一个Hourglass的输入数据 ,第一个Hourglass的输出数据 ,第一级预测结果 。这三路数据通过串接(concat)和相加进行融合,它们的尺度不同,体现了当下流行的跳级结构思想。如下图所示:

    总结起来SHN的方法值得学习的地方有四点:使用模块进行网络设计 ,先降采样,再升采样的全卷积结构 , 跳级结构辅助升采样 ,中继监督训练。

    评测数据集:在FLIC数据集上的PCK@0.2分别elbows(99%),elbows(97%); 不同的方法在MPII数据集的PCKh值,其中[1]为flow convnet,[5]为CPM。

    Structured Feature Learning for Pose Estimation  CVPR 2016[32]

    2017 年王晓刚组的 structured pose 也是在 CNN 的基础上进行微调,其创新点在于在卷积层使用几何变换核,能够对关节点之间的依赖关系进行建模,此外还提出了双向树模型,这样每个关节的 feature channel 都可以接收其他关节的信息,称之为信息传递,这种树状结构还能针对多人进行姿态估计。但是这种多人姿态估计的准确度不高,方法还是基于单人的比较好。

    评测数据集:FCIL,LSP,MPII,在 FCIL,LSP均比之前的方法有所提升,在MPII数据集上也曾暂列榜首,PCKh达到91.5%,准确率提升不大。

    Adversarial PoseNet: A Structure-aware Convolutional Network for Human Pose Estimation [33]

    采用的GAN的方法,效果比之前的state-of-the-art仅仅提升了零点几个百分点。基本上到hourglass之后的方法都是一些微调,虽然理论都不太一样,但是准确度提升不大。

    Learning Feature Pyramids for Human Pose Estimation[27]

    模式识别的方法,pictorial structures以及loopy 结构,这些方法都是基于HOG 特征。后来是神经网络,最早的是deepPose,是使用回归坐标点的方法。坐标点难以训练学习,后来的方法都是将点做了高斯转换得到score map。同时,还会用到多尺度获得丰富特征。

    多尺度特征Hourglass无疑是最成功的。但后面的多种网络结构对这这一基础网络做了调整和优化,有更好的效果。比如这篇,将使用金字塔模型。不是普通的金字塔,而是组合了residual模型和Inception的金字塔,所以计算要求不高。

    MPII单人数据集的PCK值

    截止到目前,[33][34]将准确率刷到了0.921,0.923,单人姿态估计研究基本上趋于饱和,都在刷准确率,而且单人姿态估计对于检测多人效果不佳,人体姿态估计应用应该着力于多人姿态的研究。

    四,多人姿态估计
    单人姿态估计方法在单人识别效果较好,应用于多人姿态识别还是效果比较差 的。同样多人姿态估计效果较好的应用于单人姿态估计的效果不理想。多人姿态估计有两种主流的研究方法,自顶向下(top-down),先检测出多个人,再对每个人进行姿态估计,可以将detection的方法加上单人姿态估计来实现;自底向上(bottom-up):先检测出关节点,再判断每一个关节点属于哪一个人。评价多人姿态性能好坏两大数据集:MPII Multi-Person Dataset[31]和MSCOCO Keypoints Challenge[30]。人体的识别要忍受来自定位和识别的双重误差,这是人体姿态识别需要研究和解决的问题。

    发展历程

    《DeepCut: Joint Subset Partition and Labeling for Multi Person Pose Estimation》 CVPR 2016[18]

    《DeeperCut: A Deeper, Stronger, and Faster Multi-Person Pose Estimation Model》 ECCV 2016[6]

    2016 年的 deepcut,采用自顶向下的方法,先用 CNN 找出所有候选的关节点,将这些关节点组成一幅图,对图中的节点进行聚类,从而判断各个节点属于哪一个人,这是一个优化问题;同时,对各个点进行标记,分类属于身体的哪一部分;两者结合输出姿态估计结果。

    Deepercut 是在 deepcut 的基础上使用 resnet 进行检测提高精度,使用 image conditioned pairwise ,能够将丰富的候选节点进行压缩,提升速度和鲁棒性。

    评测数据集:deepcut,对于单人姿态估计,在LSP数据集上的PCK达到87.1%,在MPII数据集上的PCK达到82.4%(可见,适用于多人的姿态估计方法和纯粹的单人姿态估计方法的准确率还有所差距);对于多人姿态估计,在WAF数据集上mean PCP达到84.7%,在MPII多人数据集上AP 达到 60.5%,速度非常慢。

    DeeperCut:和deepcut的评测数据集相同,这里主要针对多人来看,其准确率和速度都有所提升,尤其是速度方面。

    《ArtTrack: Articulated Multi-person Tracking in the Wild》CVPR 2017[10]

    2017年的ArtTrack的作者也是DeeperCut 的第一作者,是将人物姿态估计用到了视频跟踪里面,本文的贡献是利用现有的单帧姿态估计模型作为基础框架,但是速度却明显加快,这种加快主要通过以下两种方式来进行:(1)通过简化和稀疏身体部位的关系图,使用进来的方法进行快速的推理;(2)不加载用于前馈神经网络上的大规模计算量,这些神经网络是为了检测和关联同一人的身体关节。模型仍然是采用 top-down 的方法,即先用 Resnet 检测出body part proposal,然后再根据关联和空间信息将他们归为不同的人。

    同时,本文也提出一种 top-down/bottom-up 的模型,即 top-down 部分是用来对人体做一个粗略的估计,之后再用bottom-up 进行精确调整,使得预测的关节点位置更准确。

    评测数据集:WAF数据集和MPII Video Pose数据集,相应有所提升。

    《Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields》CVPR 2017[9]

    2017 年的 Part Affinity Fields(PAF)能够针对多人做到实时检测,它采用的却是自底向上的方法,网络框架分为两路;一路使用 CNN,根据置信图进行关节点预测,另一路使用CNN 获得每个关节点的 PAF,PAF 可以看作是记录 limb 位置和方向的 2D 向量。两路进行联合学习和预测。最后就是如何将这些节点两两连接不重复,这转换为图论问题。

    评测数据集:COCO 2016关键点检测数据集+MPII multi-person benchmark。对于MPII多人pose,本文无论是准确度还是精度上都有质的飞跃,其相比于DeeperCut的速度快了4万多倍,准确度也有几个百分点的提升。可以做到实时,每帧只需要50毫秒,即20FPS。

    《Mask R-CNN》ICCV 2017,FAIR,Kaiming He[13]

    2017年何凯明的Mask R-CNN,Mask R-CNN 是用于目标检测分割的框架,即对一张图片,既输出图片中已有的目标,还能为每一个实例生成一个高质量的分割掩码。mask RCNN是在 faster R-CNN 的基础上,在每一个 RoI 都增加一个预测分割的mask,这和分类以及 bounding box 回归是并行的一条分支。它的训练简单,仅仅比 faster RCNN多一点计算开销。它易于泛化到多个任务上,例如人体姿态估计。在不加任何的 trick的情况下,在COCO 数据集上超越其他的方法。因此准确度方面基本上已经是state-of-the-Art。

    应用到pose estimation,将分割系统中的目标改为K个one-hot,m*m的二进制mask。准确率比COCO 2016 冠军高0.9个点,速度达到5 FPS。

    《Towards accurate multi-person pose estimation in the wild》CVPR 2017 Google[11]

    Google的人体姿态估计,多数时候在论文中简写为G-RMI。

    论文采用top-down的结构,分为两个阶段: 第一阶段使用faster rcnn做detection,检测出图片中的多个人,并对bounding box进行image crop; 第二阶段采用fully convolutional resnet对每一个bonding box中的人物预测dense heatmap和offset; 最后通过heatmap和offset的融合得到关键点的精确定位。

    《Associative Embedding:End-to-End Learning for Joint Detection and Grouping》[10]

    论文提出了一种single-stage,end-to-end的关节点检测和分组方法,这不同于以往的multi-stage的关节点检测方法,在MPII和COCO数据集上达到新的state-of-the-art的效果,超越最近的Mask RCNN和Google GMI。从人体姿态估计方法上属于bottom-up的方法,即先检测关节点,再对关节点进行分组。在COCO测试集上mAP达到0.655。

    《RMPE: Regional Multi-Person Pose Estimation》ICCV 2017,SJTU,Tencent Youtu[30]

    文章的写作背景是单人姿态估计的方法不能用在多人上面,而多人姿态估计方法虽然效果不错,但是太慢了(485 seconds per image)。它对于多人姿态估计的方法采用传统的自顶向下的方法,即先检测人,再识别人体姿态。检测使用的是SSD-512,识别人体姿态使用的是state-of-the-art的Stacked Hourglass方法。致力于解决对于imperfect proposal,通过调整,使得crop的单人能够被单人姿态估计方法很好的识别,从而克服检测带来的定位误差。

    目前的人体检测方法会产生两个主要问题:定位错误,以及多余的检测结果,尤其是SPPE (singal person pose estimation)。这篇文章就是为解决这个问题而来的,提出了RMPE方法。包括了三个模块:Symmetric Spatial Transformer Network (SSTN)用于在不准确的bounding box下仍能提取准确的单个人的范围,这是组合到SPPE里面的。NMS是处理多余的候选框的,它是采用了新的距离量测的方法来计算姿态的相似度,且是数据驱动的,不是预先设定的。PGPG用于增多训练样本。

    整体框架

    Symmetric STN + SPPE

    Residual Module

    PCK在MPII数据集

    AP值在MSCOCO Keypoints Challenge

    参考文献
    Tompson,J.,J.,Jain,A.,LeCun,Y.,Bregler,C.:Efficient object localization using convolutional network. In:Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition(CVPR) ,2015,648-656.
    Carreira, J.,Agrawal,P.,Fragkiadaki,K.,Mailk,J.:Human pose estimation with iterative error feedback.In CVPR,2016.
    Hu,P.,Ramanan,D.:Bottom-up and top-down reasoning with hierarchical rectified gaussians.In CVPR,2016
    He, Kaiming, et al. “Deep Residual Learning for Image Recognition.” arXiv preprint arXiv:1512.03385 (2015).
    J. G. Umar Iqbal. Multi-person pose estimation with local joint-to-person associations. In European Conference on Computer Vision Workshops 2016 (ECCVW’16) - Workshop on Crowd Understanding (CUW’16), 2016. 4322, 4327
     E. Insafutdinov, L. Pishchulin, B. Andres, M. Andriluka,and B. Schiele. DeeperCut: A Deeper, Stronger, and Faster Multi-Person Pose Estimation Model. In European Conference on Computer Vision (ECCV), May 2016. 4321, 4322,4327
    S. T. M. O. E. I. A. K. C. R. T. B. B. S. B. A.Evgeny Levinkov, Jonas Uhrig. Joint graph decomposition and node labeling: Problem, algorithms, applications. In IEEE Conference on Computer Vision and Pattern Recog?nition (CVPR), 2017. 4327
     E. Insafutdinov, M. Andriluka, L. Pishchulin, S. Tang, E. Levinkov, B. Andres, and B. Schiele. Arttrack: Articulated multi-person tracking in the wild. In IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2017.
     Z. Cao, T. Simon, S.-E. Wei, and Y. Sheikh. Realtime multiperson 2d pose estimation using part affinity fields. In IEEE Conference on Computer Vision and Pattern Recognition(CVPR), 2017. 4327, 4328
     A. Newell, Z. Huang, and J. Deng. Associative embedding:End-to-end learning for joint detection and grouping. In Advances in Neural Information Processing Systems, pages 2274–2284, 2017. 4327
    G. Papandreou, T. Zhu, N. Kanazawa, A. Toshev, J. Tompson, C. Bregler, and K. Murphy. Towards accurate multiperson pose estimation in the wild. arXiv preprint arXiv:1701.01779, 8, 2017. 4328
    Y. Chen, Z. Wang, Y. Peng, Z. Zhang, G. Yu, and J. Sun.Cascaded pyramid network for multi-person pose estimation.arXiv preprint arXiv:1711.07319, 2017. 4326, 4328
    K. He, G. Gkioxari, P. Doll′ar, and R. Girshick. Mask r-cnn.In Computer Vision (ICCV), 2017 IEEE International Conference on, pages 2980–2988. IEEE, 2017. 4328
    ] L. Pishchulin, M. Andriluka, P. Gehler, and B. Schiele.Strong appearance and expressive spatial models for human pose estimation. In ICCV, 2013. 7
    J. Tompson, A. Jain, Y. LeCun, and C. Bregler. Joint training of a convolutional network and a graphical model for human pose estimation. In NIPS, 2014. 1, 7
    J. Carreira, P. Agrawal, K. Fragkiadaki, and J. Malik. Human pose estimation with iterative error feedback. In CVPR,2016. 7
    L. Pishchulin, E. Insafutdinov, S. Tang, B. Andres, M. Andriluka, P. V. Gehler, and B. Schiele. Deepcut: Joint subset partition and labeling for multi person pose estimation. In CVPR, 2016. 1, 7
    I. Lifshitz, E. Fetaya, and S. Ullman. Human pose estimation using deep consensus voting. In ECCV, 2016. 7
    G. Gkioxari, A. Toshev, and N. Jaitly. Chained predictions using convolutional neural networks. In ECCV, 2016. 7
    U. Rafi, J. Gall, and B. Leibe. An efficient convolutional network for human pose estimation. In ECCV, 2016. 7
    S.-E. Wei, V. Ramakrishna, T. Kanade, and Y. Sheikh. Convolutional pose machines. In CVPR, 2016. 1, 2, 7
    A. Bulat and G. Tzimiropoulos. Human pose estimation via convolutional part heatmap regression. In ECCV, 2016. 2, 7
    V. Belagiannis and A. Zisserman. Recurrent human pose estimation. FG, 2017. 2, 7
    ] MSCOCO keypoint challenge 2016. http://mscoco.org/dataset/keypoints-challenge2016. 4326
    M. Andriluka, L. Pishchulin, P. Gehler, and B. Schiele. 2d human pose estimation: New benchmark and state of the art analysis. In IEEE Conference on Computer Vision and Pat?tern Recognition (CVPR), 2014. 4321, 4325, 4326
    A. Newell, K. Yang, and J. Deng. Stacked hourglass networks for human pose estimation. In ECCV. Springer, 2016.1, 2, 3, 4, 7
    Yang, W., Li, S., Ouyang, W., Li, H., Wang, X.: Learning feature pyramids for human pose estimation. In: The IEEE International Conference on Computer Vision. (2017) 1290–1299
    ] J. G. Umar Iqbal. Multi-person pose estimation with local joint-to-person associations. In European Conference on Computer Vision Workshops 2016 (ECCVW’16) - Workshop on Crowd Understanding (CUW’16), 2016. 4322, 4327
    E. Insafutdinov, L. Pishchulin, B. Andres, M. Andriluka,and B. Schiele. DeeperCut: A Deeper, Stronger, and Faster Multi-Person Pose Estimation Model. In European Confer?ence on Computer Vision (ECCV), May 2016. 4321, 4322,4327
    H.-S. Fang, S. Xie, Y.-W. Tai, and C. Lu. RMPE: Regional multi-person pose estimation. In ICCV, 2017.
    A. Toshev and C. Szegedy. Deeppose: Human pose estimation via deep neural networks. In CVPR, 2014. 1, 2
    X. Chu, W. Ouyang, H. Li, and X. Wang. Structured feature learning for pose estimation. In CVPR, 2016. 2
    Chen,Y.,Shen,C.H.,Wei,X,S.,Liu,L.Q.,Yang,J.Adversarial PoseNet: A Structure-aware Convolutional Network for Human Pose Estimation 
    Lipeng Ke, Ming-Ching Chang, Honggang Qi, Siwei Lyu; The European Conference on Computer Vision (ECCV), 2018, pp. 713-728  Multi-Scale Structure-Aware Network for Human Pose EstimationWei Tang, Pei Yu, Ying Wu; The European Conference on Computer Vision (ECCV), 2018, pp. 190-206 Deeply Learned Compositional Models for Human Pose Estimation
    --------------------- 
    作者:fengfeng,Z 
    来源:CSDN 
    原文:https://blog.csdn.net/qq_38522972/article/details/82953477 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 该代码是一个安卓小项目,应用卷积神经网络访问手机加速度计进行的人体动作姿态识别算法的安卓端开发。开发时需要借助Android Studio.
  • 大概两个月前,接到一个小任务,要做一个深度学习在人体姿态识别领域的一些调研,以前也没做调研相关的事情,连格式怎么写都不知道,前前后后看了接近20篇论文,然后就写下来这篇小总结,感觉都不能算是调研,文章...
  • 人体姿态识别研究综述(详细归纳!)

    万次阅读 多人点赞 2018-10-06 20:23:46
    一,人体姿态识别数据集 1,2D数据集: LSP 地址:http://sam.johnson.io/research/lsp.html 样本数:2K 关节点个数:14 全身,单人 FLIC 地址:https://bensapp.github.io/flic-dataset.html 样本数:2W ...
  • 课题为利用MATLAB的做差法,求出测试图和背景图的人体轮廓,根据人体的躺下,坐下,站立的时候最外接矩形的长宽来判断是什么姿态。带GUI界面。算法是差影法,理解起来很容易。
  •  ...2D人体姿态识别在dataset和model方面都比3D成熟,2Dmodel也有很多户外,自然界的dataset,但是3D的dataset几乎都是indoor的。因为3D标注、识别的复杂,所以需要大量的传感器,摄像头去采集...
  • 源码在git jetpack 版本 4.2 ,直接安装 gluoncv #!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Thu Jul 1 17:17:29 2021 @author: ledi """ import cv2 ... display_width=1280,
  • 人体姿态识别OpenPose

    千次阅读 2020-10-27 08:08:38
    软硬件环境 windows 10 64bit cuda 10.1 cudnn 7.6.35 anaconda with python 3.7 ubuntu 18.04 64bit NVidia GTX 1070Ti cmake 3.18.4 protobuf 3.8.0 简介 OpenPose人体姿态识别项目是美国卡耐基梅隆大学(CMU)基于...
  • 一,人体姿态识别数据集 1,2D数据集: LSP 地址:http://sam.johnson.io/research/lsp.html 样本数:2K 关节点个数:14 全身,单人 FLIC 地址:https://bensapp.github.io/flic-dataset.html 样本数:2W 关节点个数...
  • 体姿态估计(pose estimation) 即识别图像中的人体关键点(人体上有一定...Openpose 团队将人脸识别、手部识别的已有成果整合到了姿态识别中,取得了更好的效果; 有了大数据的支持,这是过去的研究所没有的。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,102
精华内容 2,440
关键字:

人体姿态识别