openpose中PAF的实现原理

以人体右下胳膊为例,假设A,B两点分别是右手肘和右手腕,我们现在要以此来实现右胳膊中的PAF。

def putVecMaps(centerA, centerB, accumulate_vec_map, count, grid_y, grid_x, stride):
    centerA = centerA.astype(float)
    centerB = centerB.astype(float)

首先假定人体的胳膊宽度为1(即thre=1),然后将坐标除以stride值,即将坐标映射到特征图中。得到AB向量后将其单位华得到单位向量。

thre = 1  # limb width
    centerB = centerB / stride #映射到特征图中
    centerA = centerA / stride

    limb_vec = centerB - centerA
    norm = np.linalg.norm(limb_vec)#求范数
    if (norm == 0.0):
        # print 'limb is too short, ignore it...'
        return accumulate_vec_map, count
    limb_vec_unit = limb_vec / norm #单位向量
    # print 'limb unit vector: {}'.format(limb_vec_unit)

然后我们要判断,特征图上哪些点是属于该合理区域的,该部分较难理解。根据A和B的坐标,首先得到一个矩形,即代码中的range部分,那模型如何判断特征图中的点哪些在range中哪些不在range中?

# To make sure not beyond the border of this two points
    min_x = max(int(round(min(centerA[0], centerB[0]) - thre)), 0)# 得到所有可能区域
    max_x = min(int(round(max(centerA[0], centerB[0]) + thre)), grid_x)
    min_y = max(int(round(min(centerA[1], centerB[1]) - thre)), 0)
    max_y = min(int(round(max(centerA[1], centerB[1]) + thre)), grid_y)

根据上述代码可以得到一个矩形,如图:
在这里插入图片描述
我们针对特征图中的点做向量,以A为例,假设特征图中的点为C,那么用向量AC与AB的单位向量做叉乘,可以得到以两个向量为边的平行四边形的面积,以面积作为划分标准。
具体对比如图所示:
在这里插入图片描述

range_x = list(range(int(min_x), int(max_x), 1))
    range_y = list(range(int(min_y), int(max_y), 1))
    xx, yy = np.meshgrid(range_x, range_y)
    ba_x = xx - centerA[0]  # the vector from (x,y) to centerA 根据位置判断是否在该区域上(分别得到X和Y方向的)
    ba_y = yy - centerA[1]
    limb_width = np.abs(ba_x * limb_vec_unit[1] - ba_y * limb_vec_unit[0]) #向量叉乘根据阈值选择赋值区域,任何向量与单位向量的叉乘即为四边形的面积
    mask = limb_width < thre  # mask is 2D # 小于阈值的表示在该区域上

对每个点都要进行如上计算,全部算完以后可以得到一个mask矩阵, 里面是true or false,true代表该点在矩阵内,false则不在。

vec_map = np.copy(accumulate_vec_map) * 0.0 #本次计算

    vec_map[yy, xx] = np.repeat(mask[:, :, np.newaxis], 2, axis=2)
    vec_map[yy, xx] *= limb_vec_unit[np.newaxis, np.newaxis, :] #在该区域上的都用对应的方向向量表示(根据mask结果表示是否在)

在这里插入图片描述
该段代码描述的是,每个在区域内的点,最后都会被画成AB的单位向量,false=0,true=1,然后用bool矩阵去乘单位向量。
效果图如下:
在这里插入图片描述

mask = np.logical_or.reduce(
        (np.abs(vec_map[:, :, 0]) > 0, np.abs(vec_map[:, :, 1]) > 0)) #在特征图中(46*46)中 哪些区域是该躯干所在区域

判断是否为躯干,再次得到一个bool矩阵。

accumulate_vec_map = np.multiply(
        accumulate_vec_map, count[:, :, np.newaxis]) #每次返回的accumulate_vec_map都是平均值,现在还原成实际值
    accumulate_vec_map += vec_map # 加上当前关键点位置形成的向量
    count[mask == True] += 1 # 该区域计算次数都+1

    mask = count == 0

    count[mask == True] = 1 # 没有被计算过的地方就等于自身(因为一会要除法)

    accumulate_vec_map = np.divide(accumulate_vec_map, count[:, :, np.newaxis])# 算平均向量
    count[mask == True] = 0 # 还原回去

    return accumulate_vec_map, count

最后就是计算,当有重叠部分时,算法是如何处理的。其中最重要的是计算平均的处理,是先将原平均值还原,再将新的特征图加进去算,除以总数n+1即可。

### 回答1: 在 MSDN API PAF(Microsoft Developer Network Application Programming Interface Platform Add-on),关于文文档的下载,可以通过以下步骤进行: 1. 打开 MSDN API PAF的官方网站,通常是在 Microsoft 的官方开发者网络网站上。 2. 导航到文档页面,并选择文文档下载选项。 3. 在下载选项,可能会提供多种格式的文档,例如PDF、HTML或CHM格式等。选择适合自己的文件格式。 4. 点击下载按钮,开始下载文文档。 5. 下载完成后,解压(如果是压缩文件)并打开文档。 6. 浏览文档以获取相关信息。 需要注意的是,MSDN API PAF的官方文档通常是英文版本的,所以要找到文文档可能需要进行一些额外的搜索或浏览网站的操作。另外,由于 MSDN API PAF 是 Microsoft 开发者的平台和工具,文档通常是面向开发者的技术文档,可能需要一定的技术背景才能理解和应用其的内容。 可以通过搜索引擎或访问 Microsoft 开发者网站来获取更准确和最新的信息,以确保能够找到并下载到最新的文文档。 ### 回答2: 要下载MSDN API PAF(Platform Architecture and Foundation)的文文档,可以按照以下步骤进行操作: 1. 打开您的浏览器,并访问MSDN官网。在搜索框输入"MSDN API PAF文文档下载",然后点击搜索按钮。 2. 在搜索结果,您可能会看到来自官方MSDN网站的链接。点击该链接,以进入MSDN文档页面。 3. 在MSDN文档页面,您可以找到有关不同主题的API文档。浏览列表,找到与PAF相关的文档。 4. 在PAF文档页面,可能会有多个链接和下载选项。选择适合您需求的链接,并点击该链接。 5. 针对您所选择的链接,可能需要您进行一些操作才能完成下载。这可能包括提供您的姓名、联系方式或MSDN帐户登录。 6. 填写所需的信息后,您将能够开始下载文文档。根据您的浏览器设置,可能会出现文件下载提示或直接开始下载。 7. 完成下载后,您可以打开文档,并查看PAF文API文档。 请注意,以上步骤仅提供了一种一般的下载方式,具体的下载过程可能因为MSDN网站的更新和变化而有所不同。为了获得最准确和最新的信息,请在搜索和下载过程,仔细阅读MSDN网站上的指导和提示。 ### 回答3: 对于想要下载 MSDN API PAF文文档,可以按照以下步骤进行操作: 1. 首先,打开 MSDN API PAF 的官方网站。使用搜索引擎搜索 "MSDN API PAF 官方网站",找到官方网站链接。 2. 进入官方网站后,找到文档下载页面。一般来说,文档下载页面会在导航栏或者页面底部的相关链接。 3. 在文档下载页面,会列出可供下载的文档列表。请在列表查找文文档。如果存在文文档,通常会有一个下载链接或按钮。 4. 点击文文档的下载链接或按钮,可以开始下载文档。根据网站的设置和你的浏览器设置,可能会出现文件保存对话框,选择保存文档的目标位置。 5. 下载完成后,可以在保存位置找到下载的文文档。可以使用适合你电脑系统的文档阅读器(如 Adobe Acrobat Reader)打开文档,并查看其的内容。 若在官方网站未找到文文档,可以尝试以下其他途径: 1. 使用搜索引擎搜索 "MSDN API PAF 文文档下载",可能有其他开发者或网站分享了文文档的下载链接。 2. 寻找相关的开发者社区或论坛,向其他开发者咨询并寻求帮助。他们可能会分享文文档的下载链接或提供其他解决方案。 总之,通过访问 MSDN API PAF 的官方网站,查找文档下载页面,并下载文文档,或通过其他途径寻找文文档,可以获得所需的文文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值