정리하기에 앞서 본 내용은 sample_token = fd8420396768425eabec9bdddf7e64b6 를 기준으로 작성함.
이 때 sample_token은 한 frame이라 생각하면 될 듯.
전체 구조도
sample_token : 한 frame에 해당하는 token 값
scene_token : scene은 여러 개의 frame으로 구성되어 있음. 이에 대한 token 값
ego_pose_token : 해당 frame에서 자차의 odometry정보에 대한 token값 == sample_data의 token값
sample_annotation의 token : 특정 frame(동일 sample_token)에서의 특정 객체에 해당하는 token값. 즉, 동일한 sample_token에 대응하는 sample_annotation의 token이 여러개 존재할 수 있음.
instance_token : 특정 객체의 고유한 object_id 값. 이 token은 frame에 따라 변하지 않는다.
category_token : 특정 객체의 category값에 대응하는 token값
0-1. sample_data
{
"token" : "80a35c14dd68408d83cf0e4f814feae4" ,
"sample_token" : "fd8420396768425eabec9bdddf7e64b6" ,
"ego_pose_token" : "80a35c14dd68408d83cf0e4f814feae4" ,
"calibrated_sensor_token" : "53a38cc5fb2a491b83d9b18a5071e12a" ,
"timestamp" : 1533201470448696 ,
"fileformat" : "pcd" ,
"is_key_frame" : true ,
"height" : 0 ,
"width" : 0 ,
"filename" : "samples/LIDAR_TOP/n015-2018-08-02-17-16-37+0800__LIDAR_TOP__1533201470448696.pcd.bin" ,
"prev" : "" ,
"next" : "e168f3fa0f9e4956aecca639b0f52555"
}
0-2. sample_annotation
{
"token" : "b746e7064b3d483c9ffc13163d20c4c9" ,
"sample_token" : "fd8420396768425eabec9bdddf7e64b6" ,
"instance_token" : "a5f12393fdf042a4a1c25cbe29f3f4ea" ,
"visibility_token" : "4" ,
"attribute_tokens" : [
"cb5118da1ab342aa947717dc53544259"
],
"translation" : [
242.87 ,
926.036 ,
0.898
],
"size" : [
1.726 ,
4.257 ,
1.489
],
"rotation" : [
0.787419398050721 ,
0.0 ,
0.0 ,
-0.616417627565468
],
"prev" : "" ,
"next" : "f4d16c517a714a8891ad35985b6b01c2" ,
"num_lidar_pts" : 169 ,
"num_radar_pts" : 4
}
sample_token을 기준으로 nbr_annotations(여기선 37개)개의 token이 존재함.
이는 한 frame( sample_token )에서 검출된 객체들에 대한 정보.
token : 특정 객체에 대한 고유 값
sample_token : frame에 대한 고유 값
instance_token : frame에 대응됨. category_token정보가 포함되어 category정보와 연결됨.
attribute_token : 특정 객체에 대한 움직임 정보?(moving, stopped, parked, ...)
instance_token을 기준으로 데이터가 묶여있음.
sample_annotation의 token이 굳이 왜 필요한지 잘 모르겠다...
1. attribute
token정보로 객체 움직임 정보 분류.
{
"token" : "cb5118da1ab342aa947717dc53544259" ,
"name" : "vehicle.moving" ,
"description" : "Vehicle is moving."
},
{
"token" : "c3246a1e22a14fcb878aa61e69ae3329" ,
"name" : "vehicle.stopped" ,
"description" : "Vehicle, with a driver/rider in/on it, is currently stationary but has an intent to move."
},
{
"token" : "58aa28b1c2a54dc88e169808c07331e3" ,
"name" : "vehicle.parked" ,
"description" : "Vehicle is stationary (usually for longer duration) with no immediate intent to move."
}
annotation 파일에 "attribute_tokens" 으로 저장되어 있음.
2. Scene
{
"token" : "e7ef871f77f44331aefdebc24ec034b7" ,
"log_token" : "92af2609d31445e5a71b2d895376fed6" ,
"nbr_samples" : 40 ,
"first_sample_token" : "fd8420396768425eabec9bdddf7e64b6" ,
"last_sample_token" : "20684b77c01641e7a5ada48308a0b1e1" ,
"name" : "scene-0003" ,
"description" : "Parking lot, barrier, exit parking lot"
}
40개의 token으로 묶여있는 scene.
3. Sample
{
"token" : "fd8420396768425eabec9bdddf7e64b6" ,
"timestamp" : 1533201470448696 ,
"prev" : "" ,
"next" : "6eb8a3ff0abf4f3a9380a48f2a0b87ef" ,
"scene_token" : "e7ef871f77f44331aefdebc24ec034b7"
},
{
"token" : "6eb8a3ff0abf4f3a9380a48f2a0b87ef" ,
"timestamp" : 1533201470948018 ,
"prev" : "fd8420396768425eabec9bdddf7e64b6" ,
"next" : "b10f0cd792b64d16a1a5e8349b20504c" ,
"scene_token" : "e7ef871f77f44331aefdebc24ec034b7"
},
sample_token 과 대응하는 timestamp 가 저장되어있음.
4. ego_pose
{
"token" : "80a35c14dd68408d83cf0e4f814feae4" ,
"timestamp" : 1533201470448696 ,
"rotation" : [
0.9984303573176436 ,
-0.008635865272570774 ,
0.0025833156025800875 ,
-0.05527720957189669
],
"translation" : [
249.89610931430778 ,
917.5522573162784 ,
0.0
]
}
sample_data에 포함된 ego_pose_token 과 대응.
5. map
{
"category" : "semantic_prior" ,
"token" : "53992ee3023e5494b90c316c183be829" ,
"filename" : "maps/53992ee3023e5494b90c316c183be829.png" ,
"log_tokens" : [
"0986cb758b1d43fdaa051ab23d45582b" ,
"1c9b302455ff44a9a290c372b31aa3ce" ,
"e60234ec7c324789ac7c8441a5e49731" ,
"46123a03f41e4657adc82ed9ddbe0ba2" ,
"a5bb7f9dd1884f1ea0de299caefe7ef4" ,
"bc41a49366734ebf978d6a71981537dc" ,
"f8699afb7a2247e38549e4d250b4581b" ,
"d0450edaed4a46f898403f45fa9e5f0d" ,
"f38ef5a1e9c941aabb2155768670b92a" ,
"7e25a2c8ea1f41c5b0da1e69ecfa71a2" ,
"ddc03471df3e4c9bb9663629a4097743" ,
"31e9939f05c1485b88a8f68ad2cf9fa4" ,
"783683d957054175bda1b326453a13f4" ,
"343d984344e440c7952d1e403b572b2a" ,
"92af2609d31445e5a71b2d895376fed6" ,
"47620afea3c443f6a761e885273cb531" ,
"d31dc715d1c34b99bd5afb0e3aea26ed" ,
"34d0574ea8f340179c82162c6ac069bc" ,
"d7fd2bb9696d43af901326664e42340b" ,
"b5622d4dcb0d4549b813b3ffb96fbdc9" ,
"da04ae0b72024818a6219d8dd138ea4b" ,
"6b6513e6c8384cec88775cae30b78c0e" ,
"eda311bda86f4e54857b0554639d6426" ,
"cfe71bf0b5c54aed8f56d4feca9a7f59" ,
"ee155e99938a4c2698fed50fc5b5d16a" ,
"700b800c787842ba83493d9b2775234a"
]
}
scene에 포함된 log_token 에 대응.
6. log
{
"token" : "92af2609d31445e5a71b2d895376fed6" ,
"logfile" : "n015-2018-08-02-17-16-37+0800" ,
"vehicle" : "n015" ,
"date_captured" : "2018-08-02" ,
"location" : "singapore-onenorth"
}
scene에 포함된 log_token 에 대응.
7. instance
{
"token" : "a5f12393fdf042a4a1c25cbe29f3f4ea" ,
"category_token" : "fd69059b62a3469fbaef25340c0eab7f" ,
"nbr_annotations" : 37 ,
"first_annotation_token" : "b746e7064b3d483c9ffc13163d20c4c9" ,
"last_annotation_token" : "14aa60d25a424b8cbb36fe5f24d8a6b4"
}
annotation에 포함된 instance_token 에 대응.
8. category
{
"token" : "fd69059b62a3469fbaef25340c0eab7f" ,
"name" : "vehicle.car" ,
"description" : "Vehicle designed primarily for personal use, e.g. sedans, hatch-backs, wagons, vans, mini-vans, SUVs and jeeps. If the vehicle is designed to carry more than 10 people use vehicle.bus. If it is primarily designed to haul cargo use vehicle.truck. "
}
instance에 포함된 category_token 과 대응.
9. calibrated_sensor
{
"token" : "53a38cc5fb2a491b83d9b18a5071e12a" ,
"sensor_token" : "dc8b396651c05aedbb9cdaae573bb567" ,
"translation" : [
0.943713 ,
0.0 ,
1.84023
],
"rotation" : [
0.7077955119163518 ,
-0.006492242056004365 ,
0.010646214713995808 ,
-0.7063073142877817
],
"camera_intrinsic" : []
}
sample_data에 있는 calibrated_sensor_token 과 대응.
10. sensor
{
"token" : "dc8b396651c05aedbb9cdaae573bb567" ,
"channel" : "LIDAR_TOP" ,
"modality" : "lidar"
}
calibrated_sensor에 있는 sensor_token 에 대응.