- Published on
ð©âð» | ë°ë¥ë¶í° ëì íë 몚ì ìì±: VAEíž
Variational Autoencoder
ìžìœë© ë ë¶ë¶ë€ìŽ ê³µë°±ìŽ ìëë°, ìŽë ì ëë¡ ë ííì ìŽë¯žì§ë¡ ëìœë©ìŒë¡ ìŽìŽì§ì§ ìëë€. VAEë ì ì¬ê³µê°ì í ê³µê°ìŒë¡ ì§ì ë§€íëë AEì ë¬ëЬ í¬ìžíž ì£Œë³ multivariate nomral distributionì ë§µíëë€.
ìëìì íìží ì ìë¯ ì ì¬ ë³ì ì ì ì ê·í 곌ì ì ê±°ì¹ë€.
Autoencoder | Variational Autoencoder |
---|---|
![]() | ![]() |
ìŽë Autoencoderìì ííëë latent spaceê° ë³Žë€ ê³ ë¥Žê² ë¶í¬í ì ìê² íë€.
Data Acquisition & Preprocessing
볞 ë Œë¬žìì ë°ìŽí°ë ëª ìíì§ ìììŒë ìŒë¶ locomotion곌 êŽë šë CMU mocap data륌 ì¬ì©íìë€. ì ë°ì ìž ì ì²ëЬ 곌ì ì
- 120(cmu Ʞ볞 fps) -> 30fpsë¡ sub-sample
- globalìì local positionìŒë¡ transform íŽì ì¬ì©
- local position = Global position - Root XZ position
- local position frameê° ì°šìŽë¥Œ local velocityë¡ ì ìíŽì ì¬ì©
- ìŽê¹šì íì ë°©í¥ ë²¡í°ë¥Œ ëí 벡í°ê°ê³Œ up vectorì ìžì = forward 벡í°ë¡ ì ì
- íŽë¹ forward vec곌 z axis(forward) êž°ì€ìŒë¡ rotation ì ì
- ê° local ì 볎ì rotation ì ì©(pose alignment)
- ë°ìŽí°ë ë°ëŒì ììëë¡ root xz pos, root an
nìŽ ë°ìŽí°ì ìŽ framesëŒê³ íì ë, ë°ìŽí°ë ì ê°ë€.
Motion Variational Autoencoder
몚ëžì Autoregressive Conditional Variational Autoencoderì êž°ë°ìŒë¡ íê³ ìë€.
- Autoregressive: reconstructedë í¬ìŠ ì 볎륌
- Condition: ìŽì íë ì ì ë³Žë¡ ì¡°ê±Žì 죌ë
êµ¬ì¡°ë¡ í¬ê² ìŽë£šìŽì ž ìë€.
Encoder
Encoder 구조ë VAEììì ìŒë°ì ìž autoencoder륌 ê°ì§ë€. ìëë ì§ì 구íí ëªšëž summaryìŽë€.
âââââââââââââââââââââââââââââââââ³ââââââââââââââââââââââââââââ³ââââââââââââââââââ³âââââââââââââââââââââââââââââ
â Layer (type) â Output Shape â Param # â Connected to â
â¡âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ©
â previous_pose (InputLayer) â (None, 375) â 0 â - â
âââââââââââââââââââââââââââââââââŒââââââââââââââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââââââââââââââ€
â current_pose (InputLayer) â (None, 375) â 0 â - â
âââââââââââââââââââââââââââââââââŒââââââââââââââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââââââââââââââ€
â concat_poses (Concatenate) â (None, 750) â 0 â previous_pose[0][0], â
â â â â current_pose[0][0] â
âââââââââââââââââââââââââââââââââŒââââââââââââââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââââââââââââââ€
â encoder_layer1 (Dense) â (None, 256) â 192,256 â concat_poses[0][0] â
âââââââââââââââââââââââââââââââââŒââââââââââââââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââââââââââââââ€
â encoder_layer2 (Dense) â (None, 256) â 65,792 â encoder_layer1[0][0] â
âââââââââââââââââââââââââââââââââŒââââââââââââââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââââââââââââââ€
â encoder_layer3 (Dense) â (None, 256) â 65,792 â encoder_layer2[0][0] â
âââââââââââââââââââââââââââââââââŒââââââââââââââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââââââââââââââ€
â z_mean (Dense) â (None, 32) â 8,224 â encoder_layer3[0][0] â
âââââââââââââââââââââââââââââââââŒââââââââââââââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââââââââââââââ€
â z_log_var (Dense) â (None, 32) â 8,224 â encoder_layer3[0][0] â
âââââââââââââââââââââââââââââââââŒââââââââââââââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââââââââââââââ€
â sampling (Sampling) â (None, 32) â 0 â z_mean[0][0], â
â â â â z_log_var[0][0] â
âââââââââââââââââââââââââââââââââŽââââââââââââââââââââââââââââŽââââââââââââââââââŽâââââââââââââââââââââââââââââ
Decoder
Decoderë Mixture of Expert decoder 구조륌 ê°ì§ê³ ìë€. ì°êµ¬ìì ì°žê³ ë ìŽì ì°êµ¬ìì [Zhang et al. 2018] ë ì¢ì reconstructedë 결곌륌 볎ìë€ê³ íë€.
Consideration
Posterior collapse
볞 ë Œë¬žììë previous pose í ê°ë¥Œ í ëë¡ ì¡°ê±Žì 죌ìì§ë§, ì¬ë¬ ê°ì 조걎ì ì€ ì, reconstruction íì§ì ì¬ëŒê° ì ìë€ê³ íë€. íì§ë§, ë€ìì±ì ì€ìŒ ì ììŒë©°, encoderì 결곌륌 묎ìíê² ëë posterior collapseë¡ ìŽìŽì§ ì ìë€. ëí latent variableì 몚ë expert ë€ížìí¬ì latent ë³ì륌 ì§ëê°ê² ì€ê³íìë€.
def forward(self, z, c):
coefficients = F.softmax(self.gate(torch.cat((z, c), dim=1)), dim=1)
layer_out = c.
for (weight, bias, activation) in self.decoder_layers:
...
input = torch.cat((z, layer_out), dim=1).unsqueeze(1)
. ...
return layer_out
Motion quality and generalization
결곌묌 íì§ì reconstruction곌 kl loss trade offë¡ ìŽë£šìŽì§ëë°, íì§ìŽ ë ëì ìë¡ synthesisê° ìŽë£šìŽì§ì§ ìì ì ìë€.
- Reconstruction loss: ì볞 ë°ìŽí°ë¡ë¶í° ìŒë§ë ì reconstructëëì§ error
- KL divergence loss: ìŽì distributionì ìŒë§ë íì¬ latent spaceì ìŒë§ë ë€ë¥žì§ì ëí error
ìŽ ëì loss êž°ì€ìŒë¡ latent spaceê° ì ë§ë€ìŽì¡ëì§ì ëí êž°ì€ì one order of magnitude ìŠ, ë lossê° 10ë°° ìŽëŽ ì°šìŽë¥Œ 볎ìŽë©Ž heuristicíê² íë š 결곌 ì ì¶ê° ê°ë¥íë€.
Training stability
íë šì ìì ì±ì ìíŽ 3ëšê³ë¡ ëëìŽ íë šíë€. autoregressionìŽ ë€ìŽê°ë 곌ì ìì ìê°ìŽ ì§ë ìë¡ ììž¡ìŽ ì ì ë¶ìì í 묞ì 륌 ì§ëê³ ìë€. ìŽë lossê° ëì ìŽ ëìŽì ì¡°ê±ŽìŽ ë€ìŽê°ê² ëë¯ë¡, 결곌 ë°ìŽí°ê° ì ì ìŽìíŽì§ê² ëë€.
ê·žëì ëšê³ ë³ë¡ ììž¡ 결곌륌 ì ë ¥ìŒë¡ ì¬ì©íë ë¹ìšì ì ì°š ë늬ë ë°©í¥ìŒë¡ íë š ë°©í¥ì ì ìíê³ ìë€.
sample_schedule = torch.cat(
(
# First part is pure teacher forcing
torch.zeros(teacher_epochs),
# Second part with schedule sampling
torch.linspace(0.0, 1.0, ramping_epochs),
# last part is pure student
torch.ones(student_epochs),
)
)
Synthesis: Reinforcement learning
볞 ì°êµ¬ìì ì¬êµ¬ì±ë ì ì¬ë³ì륌 íµíŽ ìíë íëìŒë¡ ì ìŽë¥Œ ê°ííìµì íµíŽ ê°ë¥íšì 볎ì¬ì€ë€. 볎ìíšìììë ë³Žíµ expíšì륌 ì°ê² ëëë°, ìŽë ìì°ì€ë¬ìŽ ë³Žì곌 ì§ìì ë€ìŽê°ë 1ì ê·Œì í ìë¡ êž°íêžìì ìŒë¡ 볎ìì ë§ìŽ ì€ìŒë¡ìš, ê·žì ë§ê² íëìŽ ì ìŽëê³ íìµì íë€.
ì첎 ì€íììë ì ê³µë ë ê°ì§ í겜, Target Environment곌 Joystick Environment ë ê°ë§ ì€íì ì§ííìë€.
Train
ë Œë¬žê³Œ ë€ë¥Žê² ì€ì í hyperparameterë ìëì ê°ë€.
LOCOMOTION_SUBJECTS = [2, 9, 16, 35, 38]
HIDDEN_UNITS = 256
LATENT_DIM = 32 # can impact likelihood of posterior collapse
NUM_EXPERTS = 6
BATCH_SIZE = 64
EPOCHS = 140
BETA = 0.2
FRAME_SIZE = 375
NUM_CONDITION_FRAMES = 1
NUM_FUTURE_PREDICTIONS = 1
locomotion ë°ìŽí°ë running categoryë§ ë°ìŽí°ë¥Œ ë£ìë€. ìŽì ëíììì ì€íí 결곌, VAE ë€ë¥ž categoryë¡ ìœê² transitionì íì§ ëª»íë 몚ìµì 뎀ìëë°, ìŽë, ë€ìíê³ ë³µì¡í ë°ìŽí°ë¥Œ íëì ì ê·ë¶í¬ë¡ ìì¶íë € íêž° ë묞ìŽë€. ê·ž 결곌, ëì ì¬ìŽë¥Œ ë¶ëëœê² ìŽìŽì£Œêž°ë³Žë€ í늿íê±°ë ìŽìí ê²°ê³Œê° ëì€ë ê²ì íìžíë€. ë Œë¬ž limitationìì ì íìë¯, ë§ìœ íŽë¹ 칎í ê³ ëŠ¬ì ë°ìŽí°ê° íì í ì ìŒë©Ž, ìŽë¬í ëìì ì ì°Ÿì§ ëª»íì¬ one-hot encoding곌 ê°ìŽ ë³ëì conditionì 죌ë ë°©ë²ìŒë¡ íìµíìë€ê³ íë€.
RTX 5060 í겜ìì íìµíììŒë©° CVAEë ìœ 50ë¶ìŽ ììëìê³ , controllerë ìœ 4ìê° 30ë¶ ê°ë ììê° ëìë€.
CVAE training
Reconstruction Loss | KL-divergence Loss | Total Loss |
---|---|---|
![]() | ![]() | ![]() |
Result

íì€í window ì¬ìŽìŠë¡ ë€ìŽê°ë ìŽì autoencoderìì íë ší 결곌ì ë¬ëЬ, íëì frame 조걎ìŒë¡ reconstuctionìŽ ìë 몚ìµìŽë€.
Target Environment | Joystick Environment |
---|---|
![]() | ![]() |
ìê°ë³Žë€ ì ìŽ ê²°ê³Œë ì¢ì§ 못íë€. ìŽë ìŽì ì íìµí cvae loss ì¬ìŽê° one order of magnitude륌 ë°ë¥Žì§ ìììŒë©°, ìŽë kl-lossê° reconstruction loss ë¹íŽ ë®ì posterior collapseê° ë°ìíìë€. ì륌 ë€ìŽ ë°ìŽí°ê° ì§ì§ìŒë¡ ê°ë¥ ì°ííë ë°ìŽí°ê° ììŒë©Ž ë°©í¥ íêž°ì ê°ì ì ìŽë ë¶ê°ë¥íë€ë ê²ìŽë€. (stochastic íë€ë ì믞ìŽë€)
ì ìê° ë°ìŽí°ë¥Œ ê³µê°íì§ ììì§ë§, ì ë Œë¬žì Fig 5.륌 íìží멎 ì¬ì©í ë°ìŽí°ì 겜ë¡ê° ëìšë€. 볎멎 Path follower í겜ì ë§ë ë°ìŽí°ë¥Œ ë£ì 몚ììŽê³ êžê²©íê² ëìì€ë acyclicí 몚ì ë€ìŽ ë§ìŽ ë€ìŽê° 몚ììŽë€. ì ìë ìŽë¬í ì ì ìëì§ íê³ì ë¶ê° ì€ëª ì ë£ì ë¯ ì¶ë€.
Code
ìœëë ìµëí ì 늬íŽì ìë 늬í¬ì§í°ëЬì ëšê²šëìë€.
- Authors
- Name
- Amelia Young
- GitHub
- @ameliacode