deepthink-vla / sft /constants.py
multimodalart's picture
multimodalart HF Staff
DeepThinkVLA demo: CoT + 7-DoF action chunk prediction
1703114 verified
Raw
History Blame Contribute Delete
2.78 kB
"""
Important constants for VLA training and evaluation.
Attempts to automatically identify the correct constants to set based on the Python command used to launch
training or evaluation. If it is unclear, defaults to using the LIBERO simulation benchmark constants.
"""
import sys
from enum import Enum
# Defines supported normalization schemes for action and proprioceptive state.
class NormalizationType(str, Enum):
# fmt: off
MEAN_STD = "MEAN_STD" # Normalize to Mean = 0, Stdev = 1
MIN_MAX = "MIN_MAX" # Normalize to Interval = [-1, 1]
QUANTILE = "QUANTILE" # Normalize [quantile_01, ..., quantile_99] --> [-1, ..., 1]
# fmt: on
# Define constants for each robot platform
LIBERO_CONSTANTS = {
"NUM_ACTIONS_CHUNK": 10,
"ACTION_DIM": 7,
"ACTION_PROPRIO_NORMALIZATION_TYPE": NormalizationType.QUANTILE,
"ACTION_MASK": [True]*6 + [False], # 7-DoF Libero arm: mask out gripper
}
ALOHA_CONSTANTS = {
"NUM_ACTIONS_CHUNK": 25,
"ACTION_DIM": 14,
"ACTION_PROPRIO_NORMALIZATION_TYPE": NormalizationType.MIN_MAX,
"ACTION_MASK": [True]*6 + [False] + [True]*6 + [False], # 14-DoF ALOHA arm: use all actions
}
BRIDGE_CONSTANTS = {
"NUM_ACTIONS_CHUNK": 5,
"ACTION_DIM": 7,
"ACTION_PROPRIO_NORMALIZATION_TYPE": NormalizationType.QUANTILE,
"ACTION_MASK": [True]*6 + [False], # 7-DoF Bridge arm: mask out gripper
}
# Function to detect robot platform from command line arguments
def detect_robot_platform():
cmd_args = " ".join(sys.argv).lower()
if "libero" in cmd_args:
return "LIBERO"
elif "aloha" in cmd_args:
return "ALOHA"
elif "bridge" in cmd_args:
return "BRIDGE"
else:
# Default to LIBERO if unclear
return "LIBERO"
# Determine which robot platform to use
ROBOT_PLATFORM = detect_robot_platform()
# Set the appropriate constants based on the detected platform
if ROBOT_PLATFORM == "LIBERO":
constants = LIBERO_CONSTANTS
elif ROBOT_PLATFORM == "ALOHA":
constants = ALOHA_CONSTANTS
elif ROBOT_PLATFORM == "BRIDGE":
constants = BRIDGE_CONSTANTS
# Assign constants to global variables
NUM_ACTIONS_CHUNK = constants["NUM_ACTIONS_CHUNK"]
ACTION_DIM = constants["ACTION_DIM"]
ACTION_PROPRIO_NORMALIZATION_TYPE = constants["ACTION_PROPRIO_NORMALIZATION_TYPE"]
ACTION_MASK = constants["ACTION_MASK"]
# Print which robot platform constants are being used (for debugging)
print(f"Using {ROBOT_PLATFORM} constants:")
print(f" NUM_ACTIONS_CHUNK = {NUM_ACTIONS_CHUNK}")
print(f" ACTION_DIM = {ACTION_DIM}")
print(f" ACTION_MASK = {ACTION_MASK}")
print(f" ACTION_PROPRIO_NORMALIZATION_TYPE = {ACTION_PROPRIO_NORMALIZATION_TYPE}")
print("If needed, manually set the correct constants in `sft/constants.py`!")