in common/quaternet.py [0:0]
def __init__(self, num_joints, num_outputs=0, num_controls=0, model_velocities=False):
"""
Construct a QuaterNet neural network.
Arguments:
-- num_joints: number of skeleton joints.
-- num_outputs: extra inputs/outputs (e.g. translations), in addition to joint rotations.
-- num_controls: extra input-only features.
-- model_velocities: add a quaternion multiplication block on the RNN output to force
the network to model velocities instead of absolute rotations.
"""
super().__init__()
self.num_joints = num_joints
self.num_outputs = num_outputs
self.num_controls = num_controls
if num_controls > 0:
fc1_size = 30
fc2_size = 30
self.fc1 = nn.Linear(num_controls, fc1_size)
self.fc2 = nn.Linear(fc1_size, fc2_size)
self.relu = nn.LeakyReLU(0.05, inplace=True)
else:
fc2_size = 0
h_size = 1000
self.rnn = nn.GRU(input_size=num_joints*4 + num_outputs + fc2_size, hidden_size=h_size, num_layers=2, batch_first=True)
self.h0 = nn.Parameter(torch.zeros(self.rnn.num_layers, 1, h_size).normal_(std=0.01), requires_grad=True)
self.fc = nn.Linear(h_size, num_joints*4 + num_outputs)
self.model_velocities = model_velocities