B: 배치 사이즈 (Batch Size)num_latest_obs (L): 2 (과거 몇 개의 관측을 볼 것인가)xf_n_embd (E): 256 (Transformer의 임베딩 차원)action_prediction_horizon (T_act): 8 (예측할 미래 행동의 길이)action_dim (A): 21 (행동의 차원)WBVIMAPolicy.forward)목표: 관측 데이터(obs)를 입력받아 문맥 정보가 담긴 transformer_output (Shape: [B, 6, E])을 생성.
obs):
prop_obs: 로봇 관절 등 자체 상태. Shape: [B, L, prop_dim] = [B, 2, 21]pointcloud: PCD Shape: [B, L, num_points, 6] (e.g., [B, 2, 1024, 6])ObsTokenizer (관측 데이터 토큰화):
prop_obs는 MLP를 통과하여 Shape이 [B, 2, 21] -> [B, 2, E] = [B, 2, 256]로 변환pointcloud는 PointNet을 통과하여 Shape이 [B, 2, 1024, 6] -> [B, 2, E] = [B, 2, 256]로 변환.concat) obs_tokens가 됩니다.
obs_tokens Shape: [B, L * 2, E] = [B, 4, 256]tokens_in (Transformer 입력 시퀀스 구성):
action_readout_token)"을 번갈아 배치t)당 토큰 구성: [prop_token, pc_token, action_readout_token]num_latest_obs가 2이므로, 전체 시퀀스는 [prop_0, pc_0, act_q_0, prop_1, pc_1, act_q_1] 형태가 됩니다.n_tokens_per_step = 2(관측) + 1(질문) = 3n_total_tokens = L * n_tokens_per_step = 2 * 3 = 6tokens_in 최종 Shape: [B, n_total_tokens, E] = [B, 6, 256]GPT (Transformer 실행):
tokens_in이 Transformer 모델에 입력됩니다.tokens_out (== transformer_output) 최종 Shape: [B, 6, 256]WBVIMAPolicy.compute_loss)목표: transformer_output을 조건으로, gt_action의 노이즈를 예측하여 손실을 계산.
_get_action_readout_tokens (조건 정보 추출):
[B, 6, 256])에서 행동 생성을 위해 질문했던 action_readout_token에 해당하는 결과만 추출action_readout_tokens Shape: [B, L, E] = [B, 2, 256]