首先姿态估计属于计算机视觉领域的一个基础研究方向。MMPose是基于Pytorch的姿态估计开源算法库,功能全,涵盖的算法多。
维度:预测的是2D还是3D姿态。
输入格式:图片 or 视频
姿态的表示形式:关键点 or 形状等
目标类型:全身 or 人脸 or 人手 or 动物 or 服饰
Human Pose Estimation是关键点检测任务中最热门的任务,即进行人体骨架和关节的关键点检测。

例如:facebook提出的Dense pose。将整个人体表面进行包络。(伪3D),并没有将3维坐标还原出来。如果要做3D,用三维人体重建的库MMHuman3D。
关于视频理解(MMAction2)与人体姿态估计的关系:视频动作理解的基础就是人体姿态估计。先得把骨骼关键点构建出来,才能根据这些特征判断动作。MMAction2可以参考这篇:关于MMAction2
论文链接:DensePose
(1)2D Human Pose(包括body+hand+face一共133个关键点)
(2)3D Human Pose(先检测人体,再检测2D Human Pose,再检测3D Human Pose)

(3)3D Human Pose(人体网格重建任务——从image中恢复人体网格)

(4)3D Hand Pose(基于RGB图像的2D和3D手势联合估计)

(5)其他还包括脸部关键点,animal pose,目标跟踪等等。
★这里先解释一下Regression和Heatmap

DeepPose就是这一类方法的经典代表。直接回归关键点坐标的方法思路比较简单,预测速度快,但直接预测坐标的精度会受到一定影响。

论文链接:DeepPose
基于heatmap的方式逐渐成为主流。该方法会去每个位置预测一个分数,来表征该位置是关键点的置信度。根据预测到的heatmap,可以进一步去提取关键点的位置。由于该方法可以更好地保留空间信息,更符合CNN的设计特性,精度也比坐标直接回归更高。

论文链接:Stacked Hourglass
主要分为两种方法:自顶向下、自底向上
自顶向下(TopDown):先检测处图片中的人体,再对每一个人体单独预测关键点。该方法的计算量会随着人数的增多而上升,但对不同尺寸的人体更加鲁棒,精度更高。通俗来说,该方法更准确。
自底向上(BottomUp):先去检测到所有的关键点,再进行关键点聚类,组合成人体。该方法的计算量不会随着人数的增多而上升。通俗来说,该方法更快(人更多的时候越明显)。

主要在3维空间里去预测人的位置,根据输入不同,可以分为以下3种方法
这种方法的经典代表:SimpleBaseline3D。根据2Dpose和原始图像的特征,直接估计3D Pose。但是基于单目图像会存在遮挡问题。

论文链接:SimpleBaseline3D
这种方法的经典代表:VoxelPose。解决遮挡问题,例如一个场景有很多人,可以融合多视角的信息去重建3D Pose。

论文链接:VoxelPose
在以上两种方法的基础上,引入时间维度,相邻的上下文信息可以辅助更好的预测。例如之前看的ViPNAS就是用上下文信息来辅助更好的预测。
这种方法的经典代表:VideoPose3D。用2D关键点序列(多了时间维度,就是有好几帧)作为输入,然后通过时序的卷积网络去处理信息,最后输出3DPose。

论文链接:VideoPose3D
基于图像:COCO

基于视频:PoseTrack18

基于单人:Human3.6M(360万个人体pose的标注)

基于多视角:CMU Panoptic

基于手部:InterHand2.6M


将深度学习拆分成data(数据集)、model(模型)、optimizer(优化器)等组件,先把每一个小模块做好,再注册到registry(注册器)里,注册器里包含了很多功能类似的模块。在需要启动任务时,通过config配置系统,代码就会调用builder,从而构造一整套流程。减少了代码的耦合。
在架构上,mmpose使用了mmcv提供的底层的接口,通过runner去管理模型的训练、测试、推理等。

(1)Dataloader:sample定义 + pipline
(Dataloader文件所在位置:Dataloader)
在dataloader方面,mmpose提供了一些数据集的接口,里面定义了sample和需要经过的pipline
(2)Model:backbone + (neck) + head
(Model文件所在位置:models)
在模型层面,会把模型 分为backbone,neck,head三个部分
(1)apis(https://github.com/open-mmlab/mmpose/tree/master/mmpose/apis)
封装训练,测试和推理等流程
train.py:准备数据加载,把模型加载到GPU,构建optimizer和runner,注册hooks等
test.py:模型测试。需要输入模型和dataloader,测试模型精度。
inference.py:模型推理,进行可视化等工作。
Webcam API:调用MMpose及其他算法,实现基于摄像头输入视频的交互式应用。
(2)cores:(https://github.com/open-mmlab/mmpose/tree/master/mmpose/core)
前后处理,可视化,定制工具等
(3)tools:(https://github.com/open-mmlab/mmpose/tree/master/tools)
本机环境:GPU RTX 2060、CUDA v11.1
Pytorch版本:1.8.0
torchvision版本:0.9.0
编译器版本:MSVC 192930137
mmtracking
mmpose:0.28.1
(1)TopDown
这里使用TopDown方法对图像进行预测
先用目标检测把人的框检测出来:faster_rcnn网络
再做框里的人的姿态估计与关键点检测:hrnet网络
效果展示

(2)BottomUp

(1)单帧输入模型的视频预测
这里使用TopDown方法对视频进行预测
目标检测与关键点识别的网络依然是faster_rcnn和hrnet
效果展示
MMPose——单帧输入视频预测
(2)全图输入模型的视频预测
不提取人体检测框,直接将全图输入至姿态估计模型中。仅适用于单人,并且单人的效果并不好
这里使用TopDown的全图输入方法对视频进行预测
没有目标检测模型
人体关键点检测网络:vipnas
效果展示
MMPose——全图输入模型的视频预测
(3)BottomUp算法的视频预测
同样,精度效果不如TopDown
人体姿态估计模型:hrnet
MMPose——BottomUp算法的视频预测
在存在少部分遮挡的情况下,会存在部分关键点的误识别,但基本上手部关键点都检测正确

在没有遮挡的情况下,手部关键点全都准确识别。

视频中的手部关键点识别效果也不错
MMPose——手掌关键点检测

视频中关键点检测效果也不错
MMPose——全身关键点检测(人脸+手+肢体)
实时的效果一般,目标检测的fps为20左右,人体姿态估计的fps为10左右

导读语言模型给我们的生产生活带来了极大便利,但同时不少人也利用他们从事作弊工作。如何规避这些难辨真伪的文字所产生的负面影响也成为一大难题。在3月9日智源Live第33期活动「DetectGPT:判断文本是否为机器生成的工具」中,主讲人Eric为我们讲解了DetectGPT工作背后的思路——一种基于概率曲率检测的用于检测模型生成文本的工具,它可以帮助我们更好地分辨文章的来源和可信度,对保护信息真实、防止欺诈等方面具有重要意义。本次报告主要围绕其功能,实现和效果等展开。(文末点击“阅读原文”,查看活动回放。)Ericmitchell斯坦福大学计算机系四年级博士生,由ChelseaFinn和Chri
之前说过10之后的版本没有3dScan了,所以还是9.8的版本或者之前更早的版本。 3d物体扫描需要先下载扫描的APK进行扫面。首先要在手机上装一个扫描程序,扫描现实中的三维物体,然后上传高通官网,在下载成UnityPackage类型让Unity能够使用这个扫描程序可以从高通官网上进行下载,是一个安卓程序。点到Tools往下滑,找到VuforiaObjectScanner下载后解压数据线连接手机,将apk文件拷入手机安装然后刚才解压文件中的Media文件夹打开,两个PDF图打印第一张A4-ObjectScanningTarget.pdf,主要是用来辅助扫描的。好了,接下来就是扫描三维物体。将瓶
Heroku支持人员告诉我,为了在我的Web应用程序中使用自定义字体(未安装在系统中,您可以在bash控制台中使用fc-list查看已安装的字体)我必须部署一个包含所有字体的.fonts文件夹里面的字体。问题是我不知道该怎么做。我的意思是,我不知道文件名是否必须遵循heroku的任何特殊模式,或者我必须在我的代码中做一些事情来考虑这种字体,或者如果我将它包含在文件夹中它是自动的......事实是,我尝试以不同的方式更改字体的文件名,但根本没有使用该字体。为了提供更多详细信息,我们使用字体的过程是将PDF转换为图像,更具体地说,使用rghostgem。并且最终图像根本不使用自定义字体。在
在我让另一个人重做我的前端UI之前,我的Rails应用程序运行平稳。我已经尝试解决此错误3天了。这是错误:Nosuchfileordirectory-identifyExtractedsource(aroundline#59):575859606162@post=Post.find(params[:id])authorize@postif@post.update_attributes(post_params)flash[:notice]="Postwasupdated."redirect_to[@topic,@post]else{"utf8"=>"✓","_method"=>"patc
我正在尝试学习Ruby词法分析器和解析器(whitequarkparser)以了解更多有关从Ruby脚本进一步生成机器代码的过程。在解析以下Ruby代码字符串时。defadd(a,b)returna+bendputsadd1,2它导致以下S表达式符号。s(:begin,s(:def,:add,s(:args,s(:arg,:a),s(:arg,:b)),s(:return,s(:send,s(:lvar,:a),:+,s(:lvar,:b)))),s(:send,nil,:puts,s(:send,nil,:add,s(:int,1),s(:int,3))))任何人都可以向我解释生成的
下面的代码工作正常:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson)do|key,oldv,newv|ifkey==:aoldvelsifkey==:bnewvelsekeyendendputskerson.inspect但是如果我在“ifblock”中添加return,我会得到一个错误:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson
在他们的网站上找不到任何内容。我主要只是想看看哪个值得一试(当然是RIA)。谢谢 最佳答案 SproutCoredemos 关于ruby-是否有SproutCore或Cappuccino的现场演示/示例应用程序,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1419788/
我定义了一个方法:defmethod(one:1,two:2)[one,two]end当我这样调用它时:methodone:'one',three:'three'我得到:ArgumentError:unknownkeyword:three我不想从散列中一个一个地提取所需的键或排除额外的键。除了像这样定义方法之外,有没有办法规避这种行为:defmethod(one:1,two:2,**other)[one,two,other]end 最佳答案 如果不想写**other中的other,可以省略。defmethod(one:1,two:2
如果我们有一个数组array=[1,1,0,0,2,3,0,0,0,3,3,3]我们如何识别给定数字的运行(具有相同值的连续数字的数量)?例如:run_pattern_for(array,0)->2run_pattern_for(array,3)->1run_pattern_for(array,1)->1run_pattern_for(array,2)->0没有2的运行,因为没有连续出现2。3有一个运行,因为只有一个幻影以树为连续数字。 最佳答案 尝试:classArraydefcount_runs(element)chunk{|n
技术选型1,前端小程序原生MINA框架cssJavaScriptWxml2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云开发数据库(基于MongoDB)云存储4,人脸识别算法基于百度智能云实现人脸识别一,用户端效果图预览老规矩我们先来看效果图,如果效果图符合你的需求,就继续往下看,如果不符合你的需求,可以跳过。1-1,登录注册页可以看到登录页有注册入口,注册页如下我们的注册,需要管理员审核,审核通过后才可以正常登录使用小程序1-2,个人中心页登录成功以后,我们会进入个人中心页我们在个人中心页可以注册人脸,因为我们做人脸识别签到,需要先注册人脸才可以进行人脸比对,进