ITOP Dataset 사용법

2021. 3. 10. 15:45

☞   문서의 내용은 가장 하단 참고문헌 및 사이트를 참고하여 필자가 보기 쉽도록 정리한 내용입니다.

☞    틀린 내용 및 저작권 관련 문의가 있는 경우 문의하시면 수정 및 삭제 조치하겠습니다.


ITOP Dataset(Invariant Top View)는 사람의 측면과 상단 View에서 촬영한 100,000개의 Depth image를 가지고 있는Dataset이다. 각 Depth image에 대해 15개의 Human body parts를 가지고 있으며 센서 위치를 기준으로 3차원(x , y, z)좌표로 레이블되어 있다. 뿐만 아니라 Segmentation, point Clouds 등과 같은 정보도 제공한다.


ITOP Dataset 다운로드와 사용법

ITOP Dataset은 다음 링크를 통해 다운로드 받을 수 있다. 파일은 총 16개의 압축 파일이 있으며 용량이 약23GB로 크다. 필자는 약 1시간 정도 걸렸다. 16개의 파일은 side_test, side_train, top_test, top_train으로 4개로 분류되며 다시 depthmap, images, labels, pointcloud로 분류된다.

대 분류 소분류 파일 이름
Side_test depthmap ITOP_side_test_depth_map.h5.gz
images ITOP_side_test_images.h5.gz
labels ITOP_side_test_labels.h5.gz
pointcloud ITOP_side_test_point_cloud.h5.gz
Side_train depthmap ITOP_side_train_depth_map.h5.gz
images TOP_side_train_images.h5.gz
labels ITOP_side_train_labels.h5.gz
pointcloud ITOP_side_train_point_cloud.h5.gz
top_test depthmap ITOP_top_test_depth_map.h5.gz
images ITOP_top_test_images.h5.gz
labels ITOP_top_test_labels.h5.gz
pointcloud ITOP_top_test_point_cloud.h5.gz
top_train depthmap ITOP_top_train_depth_map.h5.gz
images TOP_top_train_images.h5.gz
labels ITOP_top_train_labels.h5.gz
pointcloud ITOP_top_train_point_cloud.h5.gz

메타데이터

Images, Depth Map, Point Cloud, Labels의 파일 크기는 압축되지 않은 크기를 나타낸다.

View Split Frames People Images Depth Map Point Cloud Labels
Side Train 39,795 16 1.1Gib 5.7Gib 18Gib 2.9Gib
Side Test 10,501 4 276Mib 1.6Gib 4.6Gib 771Mib
Top Train 39,795 16 974Mib 5.7Gib 18Gib 2.9Gib
Top Test 10,501 4 261Mib 1.6Gib 4.6Gib 771Mib

 


Python에서 Import하기

다운로드된 모든 알집의 압축파일을 풀고 Python에서 아래의 명령어를 이용하여 h5py를 설치한다.

pip install h5py

또는

conda install h5py

 

설치가 완료되면 h5파일을 python에서 가져올 수 있다. 아래의 코드는 ITOP_side_test_depth_map.h5파일에서 data와 id를 가져오는 코드이다.

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,)

 


Transformation

Point Clouds에서 240  x 320 이미지로 변환하기 위해 다음 변환이 사용되었다. $x_{img}$ 와 $y_{img}$가 이미지 평면의 (x, y)좌표를 나타낸다. raw point cloud$(x, y, z)$ 실제 좌표를 사용하여 Depth map을 다음과 같이 계산한다.

$x_{img} = \frac{x}{C_{z}}+160$ 

$y_{img} = \frac{y} {C_{z}}+120$

$C ≈ 3.50 × 10^{-3} = 0.0035$는 내장 카메라 보정 매개변수이다.

이렇게하면 Depth mpa이 생성된다. $(x_{img}, y_{img},z)$

 


Joint ID(index) Mapping

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',
}

 

구분 Key 설명
Depth Maps id Dimensions (n, )
Data Type uint8
Description XX_YYYY형식의 frame을 식별한다.
여기서 XX는 사람의 ID번호이고 YYYYY는 프레임 번호이다.
data Dimensions (n, 240, 320)
Data Type float 16
Description 단일 프레임에 해당하는 Depth map의(i.e. mesh) Depth 값의 단위는 실제 미터(m)이다.
Point Clouds id Dimensions (n, )
Data Type uint8
Description XX_YYYY형식의 frame을 식별한다.
여기서 XX는 사람의 ID번호이고 YYYYY는 프레임 번호이다.
data Dimensions (n, 76800, 3)
Data Type float16
Description 76,800 Point (240 x 320)가 포함된 Point Clouds. 각 Point는 실제 미터(m)로 측정된 3D tuple로 표시된다.
Labels id Dimensions (n, )
Data Type uint8
Description XX_YYYY형식의 frame을 식별한다.
여기서 XX는 사람의 ID번호이고 YYYYY는 프레임 번호이다.
is_valid Dimensions (n, )
Data Type uint8
Description 인체 라벨링 작업 결과에 해당하는 플래그이다. 이것은 bool 값이며, 여기서 (1)은 사람이 사람이 승인한 깨끗한 데이터이며 (0)은 노이즈가 많은 인체 부위이다. 
visivle_joints Dimensions (n, 15)
Data Type int16
Description 각 관절이 보이는지 또는 가려졌는지 나타내는 binary mask이다. 이것은 논문에서 $a_{j} = 1$이면 $j^{th}$관절이 보인다.(즉 가려지지 않음). 그렇지 않고 $a_{j} = 0$이면 $j^{th}$관절이 폐색된 것이다.
image_
coordinates
Dimensions (n, 15, 2)
Data Type int16
Description depth image 또는 depth map에서 각 body part의 위치에 해당하는 2차원(x, y)좌표
real_world_
coordinates
Dimensions (n, 15, 3)
Data Type float16
Description 실제 좌표(m)에서 각 body part의 위치에 해당하는 3차원(x, y, z)좌표
segmentation Dimensions (n, 240, 320)
Data Type int8
Description body part lavels의 픽셀을 보여준다.
배경 클래스(즉, 신체 부위 없는 부분)는 -1로 표시된다.

 


참고 문헌

 

ITOP Dataset

Summary 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 positi

zenodo.org