最近读了Openpose论文,关于OpenPose的相关资料,博主整理后,留下了一个传送门,将网上写的比较好的博文和github地址记录在传送门里。


文章目录

  • 一、置信图(Confidence Map)生成原理
  • 二、两种生成置信图的方法
    • 2.1 循环遍历
    • 2.2 用矩阵替代循环,加快速度

一、置信图(Confidence Map)生成原理

摘自OpenPose论文中的段落:
我们首先为每一个个体 kkk 产生个体的置信图 Sj,k∗S^{*}_{j,k}Sj,k∗​, 用 xj,k∈R2x_{j,k} \in R^2xj,k​∈R2 表示个体 kkk 的关键点部位 jjj 的真是位置,则 Sj,k∗S^{*}_{j,k}Sj,k∗​ 中位置 p∈R2p\in R^2p∈R2 的值定义为:

其中 σ\sigmaσ 控制峰值的传播。 网络预测的置信图是通过一个最大操作将各个置信图聚合在一起:

是的,你没有看错,这就是一个 高斯分布!标准的高斯分布公式为

xxx, yyy 代表像素的模板坐标,模板中心位置为原点)
xxx, yyy 直接看成图像中任意点 (x,y)(x, y)(x,y)到目标点(关键点)的在xxx或者yyy方向上的距离。

二、两种生成置信图的方法

摘自一个COCO数据中,某一图像的关键点标注。
关于COCO数据集的理解,见我之前整理的 理解COCO数据集中的关键点标注

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
*  * *** *  * *  *
*  *  *   **  *  *
****  *   **  *  *
*  *  *   **  *  *
*  * **  *  * ****  @File     :Openpose/showGussMapForPoint.py
@Date     :2020/12/7 下午2:07
@Require  :opencv、matplotlib、numpy
@Author   :hjxu2016, https://blog.csdn.net/hjxu2016/
@Funtion  :二维图像中的 Guss热值图
"""import cv2
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm as cbgr_image = cv2.imread("./000000000785.jpg")
rgb_image = cv2.cvtColor(bgr_image, cv2.COLOR_BGR2RGB)points = [[367,  81,  2],[378, 118,   2],[358, 129,   2],[341, 159,   2],[309, 178,   2],[399, 108,   2],[433, 142,   2],[449, 165,   2],[393, 214,   2],[367, 273,   2],[396, 341,   2],[424, 203,   2],[429, 294,  2],[466, 362,   2],[360,  75,   2],[374,  73,   2],[356,  81,   2],[386,  78,   2]]

2.1 循环遍历

循环已成惯性思维,第一个想到的就是循环遍历

import math
def put_heatmap(shape, center, sigma):center_x, center_y, _ = centerheatmap = np.zeros((shape[0], shape[1]))height, width, _ = shapeth = 4.6052delta = math.sqrt(th * 2)x0 = int(max(0, center_x - delta * sigma))y0 = int(max(0, center_y - delta * sigma))x1 = int(min(width, center_x + delta * sigma))y1 = int(min(height, center_y + delta * sigma))for y in range(y0, y1):for x in range(x0, x1):d = (x - center_x) ** 2 + (y - center_y) ** 2  # 高斯!exp = d / 2.0 / sigma / sigma  # 高斯!if exp > th:continueheatmap[y][x] = max(heatmap[y][x], math.exp(-exp))heatmap[y][x] = min(heatmap[y][x], 1.0)return heatmapfor point in points:guss_heatmap = put_heatmap(rgb_image.shape, point, sigma = 7)fg, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(40, 8))ax1.imshow(rgb_image)ax2.imshow(guss_heatmap, cmap=c.jet)guss_heatmap = np.array(guss_heatmap)guss_heatmap[guss_heatmap < 0] = 0guss_heatmap = cv2.normalize(guss_heatmap, guss_heatmap, 0, 255, cv2.NORM_MINMAX)guss_heatmap = np.uint8(guss_heatmap)jetmap = cv2.applyColorMap(255-guss_heatmap, cv2.COLORMAP_JET)alpha = 0.5out = cv2.addWeighted(rgb_image, alpha, jetmap, 1 - alpha, 0, jetmap)ax3.imshow(out, cmap=c.jet)

2.2 用矩阵替代循环,加快速度

循环比较太慢了,矩阵则是一个更好的思路。
设置两个xxx和yyy矩阵,分别0、1、...−w0、1、...-w0、1、...−w
那么图像所有点(x,y)(x, y)(x,y)到目标点 ppp的在xxx或者yyy方向上的距离和就可以用矩阵运算。

def generate_gaussian_heatmap(shape, joint, sigma):x, y,_ = joint grid_x = np.tile(np.arange(shape[1]), (shape[0], 1))grid_y = np.tile(np.arange(shape[0]), (shape[1], 1)).transpose()grid_distance = (grid_x - x) ** 2 + (grid_y - y) ** 2gaussian_heatmap = np.exp(-0.5 * grid_distance / sigma ** 2)# 产生的就是一整张图的gaussian分布,只不过里中心点远的点非常非常小return gaussian_heatmap
for point in points:guss_heatmap = generate_gaussian_heatmap(rgb_image.shape, point, sigma = 7)fg, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(40, 8))ax1.imshow(rgb_image)ax2.imshow(guss_heatmap, cmap=c.jet)guss_heatmap[guss_heatmap < 0] = 0guss_heatmap = cv2.normalize(guss_heatmap, guss_heatmap, 0, 255, cv2.NORM_MINMAX)guss_heatmap = np.uint8(guss_heatmap)jetmap = cv2.applyColorMap(255-guss_heatmap, cv2.COLORMAP_JET)alpha = 0.5out = cv2.addWeighted(rgb_image, alpha, jetmap, 1 - alpha, 0, jetmap)ax3.imshow(out, cmap=c.jet)

显示一下结果

OpenPose(一):根据关键点生成置信图(Confidence Map)相关推荐

  1. 峰值旁瓣matlab,基于置信图峰值旁瓣比优化的遮挡目标跟踪方法与流程

    本发明属于图像处理技术领域,涉及一种基于置信图峰值旁瓣比优化的遮挡 目标跟踪方法. 背景技术: 目标跟踪是计算机视觉中的热点问题,在行为分析.智能监控.智能交通. 汽车导航以及人机交互等领域扮演着十分 ...

  2. 华为诺亚、北大提出GhostNet​,使用线性变换生成特征图,准确率超MobileNet v3 | CVPR 2020...

    作者 | Kai Han, Yunhe Wang等 编译 | Conv 出品 | AI科技大本营(rgznai100) 受限于内存空间和计算资源,将卷积神经网络部署到嵌入式设备中会比较困难.CNNs中 ...

  3. R语言生成组合图并保存实战:实际上只保存了最后一个图问题、ggsave生成组合图并保存(保存完整组合图)

    R语言生成组合图并保存实战:实际上只保存了最后一个图问题.ggsave生成组合图并保存(保存完整组合图) 目录

  4. 用mysqlworkbench生成ER图

    为什么80%的码农都做不了架构师?>>>    下载安装mysql workbench 首先是下载mysql workbench,windows系统的自己百度,我用的是ubuntu ...

  5. 如何在使用babel和webpack时生成源图?

    本文翻译自:How do I generate sourcemaps when using babel and webpack? I'm new to webpack, and I need a ha ...

  6. 用Enterprise Architect从源码自动生成类图

    参考:http://blog.csdn.net/zhouyong0/article/details/8281192/ /* references:感谢资源分享者. info:简单记录如何通过工具从源码 ...

  7. 用Alpha生成Trimp图的方法(python)

    用Alpha生成Trimp图的方法(python) 文章目录: 一.Alpha图生成Trump图(方法一) 二. 一.Alpha图生成Trump图(方法一) __Author__ = 'Shliang ...

  8. powerdesigner反向MySQL5.1数据库 生成ER图

    powerdesigner反向MySQL5.1数据库 生成ER图 转载于:https://www.cnblogs.com/passer1991/archive/2013/03/17/2964680.h ...

  9. echarts mysql scrapy_抓取58job, 赶集job以及智联招聘,并使用数据分析生成echarts图...

    **抓取58job, 赶集job以及智联招聘,并使用数据分析生成echarts图** 爬虫部分 爬虫部分使用scrapy-redis分布式爬虫,通过redis实现增量爬取以及去重,并将所有的数据直接保 ...

最新文章

  1. Flex与.NET互操作(十):基于FluorineFx.Net的及时通信应用(Real-time Messaging Applications)(一)...
  2. QEMU — 编译安装指定的版本
  3. zlib 1.2.5 编译 ( VS2010 vc6 )
  4. 仅IE6中链接A的href为javascript协议时不能在当前页面跳转
  5. MyBatis Plus自定义SQL使用条件构造器QueryWrapper
  6. Linux下getopt()函数的简单使用
  7. NIO 之 Channel实现原理
  8. jQuery Object 和 HTML Element间的转换
  9. 解决VM虚拟机中ubuntu系统上不了网的问题
  10. iOS14 UIDatePicker的变化
  11. 修改oracle数据库的编码为utf-8
  12. C语言-数组练习题(附答案)
  13. java xcap_java实现发布订阅
  14. 一篇文章教你,破解百度网盘加密文件,学会这个举一反二
  15. IDEA 问题记录-2022
  16. Switch新机发布引全球吐槽,老任给牙膏厂上了一课,这波是等等党输了
  17. linux注销系统有几种方法,怎么注销Linux子系统
  18. 异常:getInputStream() has already been called for this request
  19. 汉澳matrix矩阵电脑
  20. 软件公司如何提升效能?研发团队的北极星指标

热门文章

  1. FMC板卡标准(一)介绍及FMC兼容
  2. 学习英文之社区,博客及源码
  3. [深度学习论文笔记]Knowledge distillation from multi-modal to mono-modal segmentation networks从多模态到单模态分割的知识提取
  4. JavaScript设计模式之策略模式(学习笔记)
  5. Excel 数字转日期类型
  6. c语言----移动n根火柴使等式成立
  7. 项目管理软件中有哪些技术风险?
  8. WARNING: Device for PV 0lQ0Gl-RBe5-fPrr-OKYB-whwD-qHPF-izvEES not found or rejected by a filter
  9. HTML页面左上角图标
  10. linux文件夹缩略图不显示,在Linux终端中使用lsix显示缩略图图像