ITOP Dataset (2016)

<strong>Summary</strong> The ITOP dataset (Invariant Top View) contains 100K depth images from side and top views of a person in a scene. For each image, the location of 15 human body parts are labeled with 3-dimensional (x,y,z) coordinates, relative to the sensor's position. Read the full paper for more context [pdf]. <strong>Getting Started</strong> Download then decompress the h5.gz file. <pre><code class="language-bash">gunzip ITOP_side_test_depth_map.h5.gz</code></pre> Using Python and h5py (<em>pip install h5py</em> or <em>conda install h5py</em>), we can load the contents: <pre><code class="language-python">import h5py import numpy as np f = h5py.File('ITOP_side_test_depth_map.h5', 'r') data, ids = f.get('data'), f.get('id') data, ids = np.asarray(data), np.asarray(ids) print(data.shape, ids.shape) # (10501, 240, 320) (10501,)</code></pre> <strong>Note:</strong> For any of the <em>*_images.h5.gz</em> files, the underlying file is a tar file and not a h5 file. Please rename the file extension from <em>h5.gz</em> to <em>tar.gz</em> before opening. The following commands will work: <pre><code class="language-bash">mv ITOP_side_test_images.h5.gz ITOP_side_test_images.tar.gz tar xf ITOP_side_test_images.tar.gz</code></pre> <strong>Metadata</strong> File sizes for images, depth maps, point clouds, and labels refer to the uncompressed size. <pre><code>+-------+--------+---------+---------+----------+------------+--------------+---------+ | View | Split | Frames | People | Images | Depth Map | Point Cloud | Labels | +-------+--------+---------+---------+----------+------------+--------------+---------+ | Side | Train | 39,795 | 16 | 1.1 GiB | 5.7 GiB | 18 GiB | 2.9 GiB | | Side | Test | 10,501 | 4 | 276 MiB | 1.6 GiB | 4.6 GiB | 771 MiB | | Top | Train | 39,795 | 16 | 974 MiB | 5.7 GiB | 18 GiB | 2.9 GiB | | Top | Test | 10,501 | 4 | 261 MiB | 1.6 GiB | 4.6 GiB | 771 MiB | +-------+--------+---------+---------+----------+------------+--------------+---------+</code></pre> <strong>Data Schema</strong> Each file contains several HDF5 datasets at the root level. Dimensions, attributes, and data types are listed below. The key refers to the (HDF5) dataset name. Let \(n\) denote the number of images.<br> <br> <strong>Transformation</strong> To convert from point clouds to a \(240 \times 320\) image, the following transformations were used. Let \(x_{\textrm{img}}\) and \(y_{\textrm{img}}\) denote the \((x,y)\) coordinate in the image plane. Using the raw point cloud \((x,y,z)\) real world coordinates, we compute the depth map as follows: \(x_{\textrm{img}} = \frac{x}{Cz} + 160\) and \(y_{\textrm{img}} = -\frac{y}{Cz} + 120\) where \(C\approx 3.50×10^{−3} = 0.0035\) is the intrinsic camera calibration parameter. This results in the depth map: \((x_{\textrm{img}}, y_{\textrm{img}}, z)\). <strong>Joint ID (Index) Mapping</strong> <pre><code>joint_id_to_name = { 0: 'Head', 8: 'Torso', 1: 'Neck', 9: 'R Hip', 2: 'R Shoulder', 10: 'L Hip', 3: 'L Shoulder', 11: 'R Knee', 4: 'R Elbow', 12: 'L Knee', 5: 'L Elbow', 13: 'R Foot', 6: 'R Hand', 14: 'L Foot', 7: 'L Hand', }</code></pre> <strong>Depth Maps</strong> <em>Key:</em> id <em>Dimensions:</em> \((n,)\) <em>Data Type:</em> uint8 <em>Description:</em> Frame identifier in the form XX_YYYYY where XX is the person's ID number and YYYYY is the frame number. <em>Key: </em>data <em>Dimensions: </em>\((n,240,320)\) <em>Data Type:</em> float16 <em>Description:</em> Depth map (i.e. mesh) corresponding to a single frame. Depth values are in real world meters (m). <strong>Point Clouds</strong> <em>Key:</em> id <em>Dimensions:</em> \((n,)\) <em>Data Type:</em> uint8 <em>Description:</em> Frame identifier in the form XX_YYYYY where XX is the person's ID number and YYYYY is the frame number. <em>Key: </em>data <em>Dimensions: </em>\((n,76800,3)\) <em>Data Type: float16</em> <em>Description:</em> Point cloud containing 76,800 points (240x320). Each point is represented by a 3D tuple measured in real world meters (m). <strong>Labels</strong> <em>Key: </em>id <em>Dimensions: </em>\((n,)\) <em>Data Type: </em>uint8 <em>Description:</em> Frame identifier in the form XX_YYYYY where XX is the person's ID number and YYYYY is the frame number. <em>Key: </em>is_valid <em>Dimensions: </em>\((n,)\) <em>Data Type: </em>uint8 <em>Description:</em> Flag corresponding to the result of the human labeling effort. This is a boolean value (represented by an integer) where a one (1) denotes clean, human-approved data. A zero (0) denotes noisy human body part labels. If is_valid is equal to zero, you should not use any of the provided human joint locations for the particular frame. <em>Key: </em>visible_joints <em>Dimensions: </em>\((n,15)\) <em>Data Type: </em>int16 <em>Description:</em> Binary mask indicating if each human joint is visible or occluded. This is denoted by \(\alpha\) in the paper. If \(\alpha_j=1\) then the \(j^{th}\) joint is visible (i.e. not occluded). Otherwise, if \(\alpha_j = 0\) then the \(j^{th}\) joint is occluded. <em>Key: </em>image_coordinates <em>Dimensions: </em>\((n,15,2)\) <em>Data Type: </em>int16 <em>Description:</em> Two-dimensional \((x,y)\) points corresponding to the location of each joint in the depth image or depth map. <em>Key: </em>real_world_coordinates <em>Dimensions: </em>\((n,15,3)\) <em>Data Type: </em>float16 <em>Description:</em> Three-dimensional \((x,y,z)\) points corresponding to the location of each joint in real world meters (m). <em>Key: </em>segmentation <em>Dimensions: </em>\((n,240,320)\) <em>Data Type: </em><em>int8</em> <em>Description:</em> Pixel-wise assignment of body part labels. The background class (i.e. no body part) is denoted by −1. <strong>Citation</strong> If you would like to cite our work, please use the following. <strong>Haque A, Peng B, Luo Z, Alahi A, Yeung S, Fei-Fei L. (2016). Towards Viewpoint Invariant 3D Human Pose Estimation. European Conference on Computer Vision. Amsterdam, Netherlands. Springer.</strong> <pre>@inproceedings{haque2016viewpoint, title={Towards Viewpoint Invariant 3D Human Pose Estimation}, author={Haque, Albert and Peng, Boya and Luo, Zelun and Alahi, Alexandre and Yeung, Serena and Fei-Fei, Li}, booktitle = {European Conference on Computer Vision}, month = {October}, year = {2016} }</pre>