Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion internnav/configs/trainer/il.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ class IlCfg(BaseModel, extra='allow'):
save_filter_frozen_weights: Optional[bool] = None
load_from_ckpt: Optional[bool]
ckpt_to_load: Optional[str]
load_from_pretrain: Optional[bool]
dataset_r2r_root_dir: Optional[str] = None
dataset_3dgs_root_dir: Optional[str] = None
dataset_grutopia10_root_dir: Optional[str] = None
Expand Down
138 changes: 6 additions & 132 deletions internnav/model/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,18 +8,17 @@

from .basemodel.cma.cma_clip_policy import CMA_CLIP_Net, CMACLIPModelConfig
from .basemodel.cma.cma_policy import CMAModelConfig, CMANet
from .basemodel.rdp.rdp_policy import RDPNet, RDPModelConfig
from .basemodel.internvla_n1.internvla_n1_policy import (
InternVLAN1ModelConfig,
InternVLAN1Net,
)
from .basemodel.navdp.navdp_policy import NavDPModelConfig, NavDPNet

from .basemodel.seq2seq.seq2seq_policy import Seq2SeqNet, Seq2SeqModelConfig

from .basemodel.internvla_n1.internvla_n1_policy import InternVLAN1Net, InternVLAN1ModelConfig

from .basemodel.rdp.rdp_policy import RDPModelConfig, RDPNet
from .basemodel.seq2seq.seq2seq_policy import Seq2SeqModelConfig, Seq2SeqNet
from .utils.misc import set_cuda, set_random_seed, wrap_model
from .utils.save import load_checkpoint



def get_policy(policy_name):
if policy_name == 'CMA_CLIP_Policy':
return CMA_CLIP_Net
Expand Down Expand Up @@ -52,128 +51,3 @@ def get_config(policy_name):
return NavDPModelConfig
else:
raise ValueError(f'Policy {policy_name} not found')


def initialize_policy(
config,
device=None,
action_stats=None,
) -> None:
from internnav.utils.common_log_util import common_logger as logger # 延迟导入

load_from_ckpt = config.il.load_from_ckpt
load_from_pretrain = config.il.load_from_pretrain

default_gpu, n_gpu, device = set_cuda(config, device)
if default_gpu:
logger.info(
'device: {} n_gpu: {}, distributed training: {}'.format(device, n_gpu, bool(config.local_rank != -1))
)

seed = config.seed
if config.ddp.use:
seed += config.local_rank
set_random_seed(seed)

# if default_gpu:
# save_training_meta(config)

observation_space = spaces.Box(
low=0.0,
high=1.0,
shape=(256, 256, 1),
dtype=np.float32,
)

policy = get_policy(config.model.policy_name)

self_policy = policy(
config=config.model,
observation_space=observation_space,
)

if load_from_pretrain:
new_ckpt_weights = {}
model_config = config.model
self_policy.load_state_dict(new_ckpt_weights, strict=False)

start_epoch = 0
if load_from_ckpt:
ckpt_path = config.il.ckpt_to_load
ckpt_dict = load_checkpoint(ckpt_path, map_location='cpu')
if 'state_dict' in ckpt_dict:
state_dict = ckpt_dict['state_dict']
else:
state_dict = ckpt_dict
if 'epoch' in ckpt_dict:
start_epoch = ckpt_dict['epoch']
new_state_dict = {}
# Iterate through the state dictionary items
for k, v in state_dict.items():
new_key = k.replace('module.', '')
if config.model.policy_name != 'RDP_Policy':
new_key = new_key.replace('net.', '') # this is for cma policy
new_state_dict[new_key] = v
del state_dict[k] # Remove the old key with 'module.'

incompatible_keys, _ = self_policy.load_state_dict(new_state_dict, strict=False)
if len(incompatible_keys) > 0:
logger.warning(f'Incompatible keys: {incompatible_keys}')
logger.info(f'Loaded weights from checkpoint: {ckpt_path}')

params = sum(param.numel() for param in self_policy.parameters())
params_t = sum(p.numel() for p in self_policy.parameters() if p.requires_grad)
logger.info(f'Agent parameters: {params / 1e6:.2f}M. Trainable: {params_t / 1e6:.2f}M')
logger.info('Finished setting up policy.')

if len(config.torch_gpu_ids) == 1:
config.ddp.use = False
if config.ddp.use:
if config.ddp.use_dp:
# Data parallel
self_policy = wrap_model(
self_policy,
config.torch_gpu_ids,
config.local_rank,
logger,
config.world_size,
use_dp=config.ddp.use_dp,
)
else:
# Distributed data parallel
self_policy = wrap_model(
self_policy,
torch.device(f'cuda:{config.local_rank}'),
config.local_rank,
logger,
config.world_size,
use_dp=config.ddp.use_dp,
)
else:
self_policy.to(device)

optimizer = torch.optim.Adam(self_policy.parameters(), lr=float(config.il.lr))

lr_scheduler = None
if config.il.lr_schedule.use:
if config.il.lr_schedule.type == 'cosine':
lr_scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(
optimizer,
T_max=config.il.epochs,
eta_min=float(config.il.lr_schedule.min_lr),
)
elif config.il.lr_schedule.type == 'step':
lr_scheduler = torch.optim.lr_scheduler.MultiStepLR(
optimizer,
milestones=config.il.lr_schedule.decay_epochs,
gamma=float(config.il.lr_schedule.decay_factor),
)
elif config.il.lr_schedule.type == 'linear':
lr_scheduler = torch.optim.lr_scheduler.LinearLR(
optimizer,
start_factor=config.il.lr_schedule.warmup_factor,
end_factor=1.0,
total_iters=config.il.lr_schedule.warmup_epochs,
)

return self_policy, optimizer, lr_scheduler, start_epoch
5 changes: 2 additions & 3 deletions scripts/train/configs/challenge_train_kujiale_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,16 +39,15 @@
warmup_ratio=0.1,
save_filter_frozen_weights=True,
load_from_ckpt=False,
ckpt_to_load='checkpoints/r2r/fine_tuned/rdp/checkpoint-104150',
load_from_pretrain=True,
ckpt_to_load='',
dataset_r2r_root_dir='interiornav_data/raw_data/',
dataset_3dgs_root_dir='',
dataset_grutopia10_root_dir='',
lmdb_features_dir='r2r',
lerobot_features_dir='data/vln_pe/traj_data/interior',
camera_name='pano_camera_0',
report_to='wandb', # wandb, tensorboard, none
ddp_find_unused_parameters = True,
ddp_find_unused_parameters=True,
filter_failure=FilterFailure(
use=True,
min_rgb_nums=15,
Expand Down
3 changes: 1 addition & 2 deletions scripts/train/configs/challenge_train_mp3d_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,14 @@
save_filter_frozen_weights=True,
load_from_ckpt=False,
ckpt_to_load='',
load_from_pretrain=True,
dataset_r2r_root_dir='data/vln_pe/raw_data/r2r',
dataset_3dgs_root_dir='',
dataset_grutopia10_root_dir='',
lmdb_features_dir='r2r',
lerobot_features_dir='data/vln_pe/traj_data/r2r',
camera_name='pano_camera_0',
report_to='wandb', # wandb, tensorboard, none
ddp_find_unused_parameters = True,
ddp_find_unused_parameters=True,
filter_failure=FilterFailure(
use=True,
min_rgb_nums=15,
Expand Down
7 changes: 3 additions & 4 deletions scripts/train/configs/cma.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,13 @@
batch_size=2,
lr=1e-4,
num_workers=8,
weight_decay=1e-5,
warmup_ratio=0.05,
weight_decay=1e-5,
warmup_ratio=0.05,
use_iw=True,
inflection_weight_coef=3.2,
save_filter_frozen_weights=False,
load_from_ckpt=False,
ckpt_to_load='',
load_from_pretrain=False,
lmdb_map_size=1e12,
dataset_r2r_root_dir='data/vln_pe/raw_data/r2r',
dataset_3dgs_root_dir='',
Expand All @@ -46,7 +45,7 @@
lerobot_features_dir='data/vln_pe/traj_data/r2r',
camera_name='pano_camera_0',
report_to='wandb', # wandb, tensorboard, none
ddp_find_unused_parameters = True,
ddp_find_unused_parameters=True,
filter_failure=FilterFailure(
use=True,
min_rgb_nums=15,
Expand Down
7 changes: 3 additions & 4 deletions scripts/train/configs/cma_plus.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,13 @@
batch_size=2,
lr=1e-4,
num_workers=8,
weight_decay=1e-5,
warmup_ratio=0.05,
weight_decay=1e-5,
warmup_ratio=0.05,
use_iw=True,
inflection_weight_coef=3.2,
save_filter_frozen_weights=False,
load_from_ckpt=False,
ckpt_to_load='checkpoints/r2r/zero_shot/cma',
load_from_pretrain=False,
lmdb_map_size=1e12,
dataset_r2r_root_dir='data/vln_pe/raw_data/r2r',
dataset_3dgs_root_dir='',
Expand All @@ -46,7 +45,7 @@
lerobot_features_dir='data/vln_pe/traj_data/r2r',
camera_name='pano_camera_0',
report_to='wandb', # wandb, tensorboard, none
ddp_find_unused_parameters = True,
ddp_find_unused_parameters=True,
filter_failure=FilterFailure(
use=True,
min_rgb_nums=15,
Expand Down
10 changes: 4 additions & 6 deletions scripts/train/configs/navdp.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from internnav.configs.trainer.eval import EvalCfg
from internnav.configs.trainer.exp import ExpCfg
from internnav.configs.trainer.il import FilterFailure, IlCfg, Loss
import os

navdp_exp_cfg = ExpCfg(
name='navdp_train',
Expand All @@ -14,7 +13,7 @@
tensorboard_dir='checkpoints/%s/tensorboard',
checkpoint_folder='checkpoints/%s/ckpts',
log_dir='checkpoints/%s/logs',
local_rank= 0,
local_rank=0,
# device = None,
seed=0,
eval=EvalCfg(
Expand All @@ -41,7 +40,6 @@
save_filter_frozen_weights=False,
load_from_ckpt=False,
ckpt_to_load='',
load_from_pretrain=False,
lmdb_map_size=1e12,
dataset_r2r_root_dir='data/vln_pe/raw_data/r2r',
dataset_3dgs_root_dir='',
Expand All @@ -50,8 +48,8 @@
lerobot_features_dir='data/vln_pe/traj_data/r2r',
camera_name='pano_camera_0',
report_to='tensorboard', # wandb, tensorboard, none
dataset_navdp = 'data/datasets/navdp_dataset_lerobot.json',
root_dir = 'data/datasets/InternData-N1/vln_n1/traj_data',
dataset_navdp='data/datasets/navdp_dataset_lerobot.json',
root_dir='data/datasets/InternData-N1/vln_n1/traj_data',
image_size=224,
scene_scale=1.0,
preload=False,
Expand All @@ -66,7 +64,7 @@
dropout=0.1,
scratch=False,
finetune=False,
ddp_find_unused_parameters = True,
ddp_find_unused_parameters=True,
filter_failure=FilterFailure(
use=True,
min_rgb_nums=15,
Expand Down
3 changes: 1 addition & 2 deletions scripts/train/configs/rdp.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,15 +40,14 @@
save_filter_frozen_weights=True,
load_from_ckpt=False,
ckpt_to_load='',
load_from_pretrain=True,
dataset_r2r_root_dir='data/vln_pe/raw_data/r2r',
dataset_3dgs_root_dir='',
dataset_grutopia10_root_dir='',
lmdb_features_dir='r2r',
lerobot_features_dir='data/vln_pe/traj_data/r2r',
camera_name='pano_camera_0',
report_to='wandb', # wandb, tensorboard, none
ddp_find_unused_parameters = True,
ddp_find_unused_parameters=True,
filter_failure=FilterFailure(
use=True,
min_rgb_nums=15,
Expand Down
3 changes: 1 addition & 2 deletions scripts/train/configs/seq2seq.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
save_filter_frozen_weights=False,
load_from_ckpt=False,
ckpt_to_load='',
load_from_pretrain=True,
lmdb_map_size=1e12,
dataset_r2r_root_dir='data/vln_pe/raw_data/r2r',
dataset_3dgs_root_dir='',
Expand All @@ -46,7 +45,7 @@
lerobot_features_dir='data/vln_pe/traj_data/r2r',
camera_name='pano_camera_0',
report_to='wandb', # wandb, tensorboard, none
ddp_find_unused_parameters = True,
ddp_find_unused_parameters=True,
filter_failure=FilterFailure(
use=True,
min_rgb_nums=15,
Expand Down
3 changes: 1 addition & 2 deletions scripts/train/configs/seq2seq_plus.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@
save_filter_frozen_weights=False,
load_from_ckpt=False,
ckpt_to_load='checkpoints/r2r/zero_shot/seq2seq',
load_from_pretrain=True,
lmdb_map_size=1e12,
dataset_r2r_root_dir='data/vln_pe/raw_data/r2r',
dataset_3dgs_root_dir='',
Expand All @@ -46,7 +45,7 @@
lerobot_features_dir='data/vln_pe/traj_data/r2r',
camera_name='pano_camera_0',
report_to='wandb', # wandb, tensorboard, none
ddp_find_unused_parameters = True,
ddp_find_unused_parameters=True,
filter_failure=FilterFailure(
use=True,
min_rgb_nums=15,
Expand Down