\parbox{0.49\textwidth}{
\caption{Evaluation on the number of Sinkhorn iterations.}
\label{Tab:ablation_2}
\resizebox{0.49\textwidth}{!}{
\begin{tabular}{l|cccccc}
\hline
Method & AP & $\text{AP}^{50}$ & $\text{AP}^{75}$ & $\text{AP}^{\text{M}}$ &$\text{AP}^{\text{L}}$ &AR  \\
\hline
Baseline(HRNet-W48) &77.1 &91.8 &83.8 &73.5 &83.5 &81.8\\
\hline
500 Sinkhorn iterations & 78.3 & 92.4 & 84.9 & 74.8 & 84.4 & 82.7 \\
1000 Sinkhorn iterations & 78.8 & 92.5 & 85.1 & 75.0 & 85.3 & 83.1\\
1500 Sinkhorn iterations & 78.7 & 92.4 & 85.2 & 74.8 & 85.4 & 83.0 \\
\hline
\end{tabular}}}
The Earth Mover's Distance is a 
a technique used for measuring the difference between two probability distributions, which can be understood as the optimal cost needed to transport the mass from one distribution to another. Specifically, for calculating the Earth Mover's Distance, we regard the source distribution as a set of ($N$) suppliers $S = (s_1, ..., s_N)^\top$, where $s_n$ represents the total units of mass that the $n$-th supplier has, and we regard the target distribution as a set of ($M$) demanders $D = (d_1, ..., d_M)^\top$, where $d_m$ represents the total units of mass that the $m$-th demander requires. Besides, we also denote $C \in  R^{N \times M}_{\geq 0}$ as the cost function between the source and target distributions, where $C_{n,m}$ represents the cost for transporting a unit of mass from the $n$-th supplier to the $m$-th demander. Then we aim to find a least-cost transportation plan from the set of possible plans $P = \{p \in R^{N \times M}_{\geq 0}:~p\textbf{1} = S~\&~p^\top\textbf{1} = D\}$ to transport all mass from the $N$ suppliers to the $M$ demanders, where \textbf{1} represents a vector of ones. The Earth Mover's Distance $E_C(S, D)$ denotes the cost of the least-cost transportation plan, which can be formulated as:

where $\lambda > 0$, and $h(p) = -\sum_{n=1}^{N} \sum_{m=1}^{M} C_{n,m} \log C_{n,m}$. Optimizing Eq.~\ref{eq:pre_2} is computationally cheaper than optimizing Eq.~\ref{eq:pre_1}, since Eq.~\ref{eq:pre_2} can be optimized with matrix scaling through the Sinkhorn algorithm.

We denote $K$ the number of joints per input image $I$. Then we denote $\mathbf{H_{dot}} = \{H_{dot}^1, ..., H_{dot}^K\}$, $\mathbf{H_{Gau}} = \{H_{Gau}^1, ..., H_{Gau}^K\}$,  and $\mathbf{H_{pred}} = \{H_{pred}^1, ..., H_{pred}^K\}$ respectively the corresponding $K$ GT dot-annotated heatmaps, GT Gaussian-smoothed heatmaps, and predicted heatmaps of the input image $I$. We denote $\mathcal D_{dot} = \{(I, \mathbf{H_{dot}})\}$ the joint distribution of the input image and the corresponding $K$ dot-annotated heatmaps, and $\mathcal D_{Gau} = \{(I, \mathbf{H_{Gau}})\}$ the joint distribution of the input image and the corresponding $K$ Gaussian-smoothed heatmaps. Besides, we denote $l_{MSE}(a, b) = \left\| a - b\right\|_2^2$ the pixel-wise MSE loss, and $\phi$ the model parameters where $\phi(I) = \mathbf{H_{pred}}$. After that, we denote $R(\mathcal D_{dot}, \phi, l_{MSE}) = \mathbb{E}_{(I, \mathbf{H_{dot}}) \sim \mathcal D_{dot}}[l_{MSE}(\phi(I), \mathbf{H_{dot}})]$ as the expected risk calculated between the predicted heatmaps and the GT dot-annotated heatmaps, and $R(\mathcal D_{Gau}, \phi, l_{MSE}) = \mathbb{E}_{(I, \mathbf{H_{Gau}}) \sim \mathcal D_{Gau}}[l_{MSE}(\phi(I), \mathbf{H_{Gau}})]$ as the expected risk calculated between the predicted heatmaps and the Gaussian-smoothed heatmaps.

\subsection{COCO Keypoint Detection}
\noindent\textbf{Dataset \& evaluation metric.} The COCO dataset \cite{lin2014microsoft} contains more than 200k images and 250k person instances, which are annotated with 17 body joints. This dataset has three subsets including COCO training set, COCO validation set, and COCO test-dev set, which have 57k, 5k and 20k images, respectively. We conduct experiments on this dataset via first training the model on the train2017 set, and then evaluating the model on the val2017 set and test-dev2017 set. Following \cite{xiao2018simple,sun2019deep,YuanFHLZCW21}, we use standard average precision (AP) calculated based on Object Keypoint Similarity (OKS) to evaluate model performance.

\noindent\textbf{Implementation details.} We apply our method to various baselines including Simple Baseline \cite{xiao2018simple}, HRNet \cite{sun2019deep}, and HRFormer \cite{YuanFHLZCW21}, with their respective backbones including ResNet-152, HRNet-W32, HRNet-W48, and HRFormer-Base. For these baselines, we follow their original learning and optimization configurations for model training. 
To calculate the Earth Mover's Distance using the Sinkhorn algorithm, we set the Sinkhorn entropic regularization parameter to 1 and the number of Sinkhorn iterations to 1000 in our experiments.

\subsection{MPII Human Pose Estimation}
\noindent\textbf{Dataset \& evaluation metric.} The MPII dataset \cite{andriluka20142d} contains around 25K images and more than 40k person instances, which are annotated with 16 body joints. We adopt the standard train/val split in \cite{andriluka20142d} to build the MPII training set and validation set, and conduct all the experiments on this dataset via first training the model on the MPII training set, and then evaluating it on the MPII validation set. Following \cite{sun2019deep}, we use the head-normalized probability of correct keypoint (PCKh) \cite{andriluka20142d} score as the evaluation metric on this dataset and report the PCKh@0.5 score.

\noindent\textbf{Implementation details.} On the MPII dataset, we also apply our method to various methods as our baselines, including Simple Baseline \cite{xiao2018simple} and HRNet \cite{sun2019deep}, with their respective backbones including ResNet-152, HRNet-W32, and HRNet-W48. We follow the original learning and optimization configurations for model training for both Simple Baseline \cite{xiao2018simple} and HRNet \cite{sun2019deep}. Besides, same as the experiments on the COCO dataset, we also set the Sinkhorn entropic regularization parameter to 1 and the number of Sinkhorn iterations to 1000 in our experiments on the MPII dataset.

\noindent\textbf{Impact of the number of Sinkhorn iterations.} For measuring the Earth Mover's Distance utilizing the Sinkhorn algorithm, we need to set the number of Sinkhorn iterations, which we set to 1000 in our experiments. We evaluate other choices of the number of Sinkhorn iterations in Tab.~\ref{Tab:ablation_2}. As shown, all variants outperform the baseline method, and after the number of Sinkhorn iterations becomes larger than 1000, the model performance becomes stabilized. Hence, we set the number of Sinkhorn iterations to be 1000 in all our experiments.
{"value": "77.1", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "AP", "experimental settings": {"xx": "yy"}, "model": "Baseline(HRNet-W48)", "model settings": {"xx": "yy"}} {"value": "91.8", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{50}", "experimental settings": {"xx": "yy"}, "model": "Baseline(HRNet-W48)", "model settings": {"xx": "yy"}} {"value": "83.8", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{75}", "experimental settings": {"xx": "yy"}, "model": "Baseline(HRNet-W48)", "model settings": {"xx": "yy"}} {"value": "73.5", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{\\text{M}", "experimental settings": {"xx": "yy"}, "model": "Baseline(HRNet-W48)", "model settings": {"xx": "yy"}} {"value": "83.5", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{\\text{L}}", "experimental settings": {"xx": "yy"}, "model": "Baseline(HRNet-W48)", "model settings": {"xx": "yy"}} {"value": "81.8", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "AR", "experimental settings": {"xx": "yy"}, "model": "Baseline(HRNet-W48)", "model settings": {"xx": "yy"}} {"value": "78.3", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "AP", "experimental settings": {"xx": "yy"}, "model": "500 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "92.4", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{50}", "experimental settings": {"xx": "yy"}, "model": "500 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "84.9", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{75}", "experimental settings": {"xx": "yy"}, "model": "500 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "74.8", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{\\text{M}", "experimental settings": {"xx": "yy"}, "model": "500 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "84.4", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{\\text{L}}", "experimental settings": {"xx": "yy"}, "model": "500 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "82.7", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "AR", "experimental settings": {"xx": "yy"}, "model": "500 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "78.8", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "AP", "experimental settings": {"xx": "yy"}, "model": "1000 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "92.5", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{50}", "experimental settings": {"xx": "yy"}, "model": "1000 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "85.1", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{75}", "experimental settings": {"xx": "yy"}, "model": "1000 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "75.0", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{\\text{M}", "experimental settings": {"xx": "yy"}, "model": "1000 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "85.3", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{\\text{L}}", "experimental settings": {"xx": "yy"}, "model": "1000 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "83.1", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "AR", "experimental settings": {"xx": "yy"}, "model": "1000 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "78.7", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "AP", "experimental settings": {"xx": "yy"}, "model": "1500 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "92.4", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{50}", "experimental settings": {"xx": "yy"}, "model": "1500 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "85.2", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{75}", "experimental settings": {"xx": "yy"}, "model": "1500 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "74.8", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{\\text{M}", "experimental settings": {"xx": "yy"}, "model": "1500 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "85.4", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "\\text{AP}^{\\text{L}}", "experimental settings": {"xx": "yy"}, "model": "1500 Sinkhorn iterations", "model settings": {"xx": "yy"}} {"value": "83.0", "type": "Result", "training data/set": "COCO", "test data/set": "COCO validation", "task": ["human pose estimation", "2D human pose estimation"], "metric": "AR", "experimental settings": {"xx": "yy"}, "model": "1500 Sinkhorn iterations", "model settings": {"xx": "yy"}}