> ## Content Index
> Fetch the complete content index at: https://cms.yufeiran.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# OpenPose Research Notes
- URL: https://cms.yufeiran.com/en-openpose-diao-yan/
- Published: 2022-11-11T01:06:00.000Z
- Updated: 2026-09-27T12:42:21.000Z
- Author: Feiran Yu
- Tags: #lang-en, #legacy-import

# Background

Our lab works a lot on human reconstruction. [OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose?ref=cms.yufeiran.com) is a very strong project in human pose estimation, and studying it helps with entering the human reconstruction field.

It is also an open-source project with about 25k GitHub stars and roughly 120k lines of code. From a software-development perspective, its architecture is also worth studying. So I decided to research it.

The image below shows one OpenPose result.

![dance_foot](https://yufeiran.com/content/images/2022/11/dance_foot.gif)

You can see that each person is drawn with reasonable torso and joint positions, and the algorithm can run in real time. The result is quite good.

# 0\. PPT

Based on online materials and my own understanding, I organized an OpenPose-principles PPT:

**File:** OpenPose [Download](https://yufeiran.com/content/files/2023/12/OpenPose.pptx?ref=cms.yufeiran.com)

PPT about OpenPose software design:

**File:** OpenPose [Download](https://yufeiran.com/content/files/2023/12/OpenPose------.pptx?ref=cms.yufeiran.com)

# Research Plan

The research mainly means understanding the papers and running the code. It consists of:

1. Reading and analyzing the papers.
2. Downloading and compiling the source code.
3. Running some demos provided by the project.
4. Reading and analyzing OpenPose’s code architecture.

# 1\. Paper Reading and Analysis

The OpenPose line of work consists of several papers.

First is *Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields*, where they proposed the PAFs algorithm.

Then came *OpenPose: Realtime Multi-Person 2D Pose Estimation using Part Affinity Fields*. In this work, they improved the whole system, increased speed and accuracy, integrated body, foot, hand, and face keypoints, and finally completed the OpenPose open-source library.

## Abstract

The abstract mainly explains that OpenPose uses their proposed PAFs, Part Affinity Fields, algorithm. Compared with traditional bottom-up systems, it has better performance. In bottom-up systems, cost increases linearly with the number of people in the scene, while OpenPose keeps the same computational cost. OpenPose is also the first open-source real-time framework integrating body, foot, hand, and face keypoints.

## 1.1 Introduction

## 1.2 Method

## 1.2.1

[Understanding the Part Affinity Fields paper](https://zhuanlan.zhihu.com/p/79594205?ref=cms.yufeiran.com)

[How to evaluate CMU’s OpenPose project?](https://www.zhihu.com/question/59750782/answer/530824012?ref=cms.yufeiran.com)

VGG network: [Understanding VGG in one article](https://zhuanlan.zhihu.com/p/41423739?ref=cms.yufeiran.com)

The difference between concat and add in deep learning:

![v2-04817784bef75d724d38cc22fcad8e35_720w](https://yufeiran.com/content/images/2022/11/v2-04817784bef75d724d38cc22fcad8e35_720w.webp)

[Non-Maximum Suppression](https://zhuanlan.zhihu.com/p/37489043?ref=cms.yufeiran.com)

# 2\. Downloading and Compiling Source Code

Although OpenPose also provides precompiled binaries, I compiled it from source in order to study its structure.

The documentation section for compilation:

[Compiling and Running OpenPose from Source](https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/master/doc/installation/0%5Findex.md?ref=cms.yufeiran.com#compiling-and-running-openpose-from-source)

Compiling this project requires CUDA. Download it from the official website:

[CUDA Toolkit 11.8 Downloads](https://developer.nvidia.com/cuda-downloads?target%5Fos=Windows&target%5Farch=x86%5F64&target%5Fversion=11&target%5Ftype=exe%5Flocal&ref=cms.yufeiran.com)

# 2.1 Compiling Source Code on Windows

Compiling from source on Windows is relatively simple. You only need Git or GitHub Desktop, CMake GUI, and CUDA.

On my Windows 11 x64 machine, compilation completed smoothly.

# 3\. Running Demos

The project provides many demos. I tested most of them, and they could run directly. The experience was very good.

![QQ–20221107210632](https://yufeiran.com/content/images/2022/11/QQ--20221107210632.png)

## Find its dataset and run it myself once

# 4\. Reading and Analyzing OpenPose Code Architecture

[OpenPose source-code reading summary](https://zhuanlan.zhihu.com/p/140720737?ref=cms.yufeiran.com)

According to the information in its GitHub repository, OpenPose is mainly written in C++ and uses GPU parallel computing. It implements two works from their lab:

OpenPose\_Realtime\_Multi-Person\_2D\_Pose

and

Hand Keypoint Detection in Single Images using Multiview Bootstrapping

Its documentation is at [/doc/index.html](https://cmu-perceptual-computing-lab.github.io/openpose/web/html/doc/index.html?ref=cms.yufeiran.com).

The overall code structure is introduced in [md\_doc\_very\_advanced\_library\_structure\_1\_library\_deep\_overview.html](https://cmu-perceptual-computing-lab.github.io/openpose/web/html/doc/md%5Fdoc%5Fvery%5Fadvanced%5Flibrary%5Fstructure%5F1%5Flibrary%5Fdeep%5Foverview.html?ref=cms.yufeiran.com).

## This document introduces OpenPose’s core data structures: Array and Datum.

Most structures are written as templates, making them generic enough to be used in different places. `Array` is the data-storage structure of OpenPose. `Datum` is the data structure returned and passed into later threads. Threads communicate through this structure.

## It then introduces OpenPose thread management.

It explains thread creation, running, and management. Since it is also implemented with templates, custom functions can be conveniently attached into this process management.

## Finally, it introduces the core system: the multi-person keypoint detection module.

It introduces the Caffe-based pose extractor and how to initialize it. Then it explains how to detect poses in a crowd, including input values and return values. Finally, it introduces rendering the results back to the image using the `PoseRenderer` module. The documentation differs from the actual current program, and some API parameters do not match.

The overall UML diagram is in [UML.pdf](https://github.com/CMU-Perceptual-Computing-Lab/openpose/blob/1f1aa9c59fe59c90cca685b724f4f97f76137224/doc/very%5Fadvanced/library%5Fstructure/UML/1%5F0%5F0rc3/UML.pdf?ref=cms.yufeiran.com).