2025.7.12学习日记【实际上是12+13号的,周末在爽玩HSR今晚留下来😋】

1.训练集微调-1

在这一部分我将先介绍training文件夹本身包含的的.py文件以及config文件夹中.yaml文件

1.1 launch.py

在VGGT的官方提供的训练代码launch.py中,流程十分简单,解析命令行参数,撰写API,传入训练器训练

  • 命令行解析:主要使用argparse模块,将默认文件配置文件设置为default.yaml
  • 撰写API:这一名称出自Hydra官方文档的参考手册部分,使用方法为initialize()+compose(),模板如下:
with initialize(version_base=None,config_path='YourPath'):
    cfg = compose(config_name='YouYamlFile')

实际实现的效果等同于装饰器@hydra.main(version_base=None,config_path='YourPath',config_name='YourYamlFile')

  • 传入训练器:主要使用重星号**将cfg解析为关键字参数传入Trainer训练器,执行Trainer类的run()方法

1.2 trainer.py

官方提供的训练代码trainer.py中定义了训练器类Trainer,注明了DDP,初始化,检查点,训练,指标记录5类功能
如果仅需在特定数据集上进行微调,需要关注的在_init_方法(line143),与_setup_dataloaders_方法(line270)

  • setup_dataloaders():
    在该方法中需要关注self.data_conf.get数据成员,这个数据成员实例化自Python的一个类。
    在Hydra的参考手册中提及到了如下内容,该内容中编写了一个基类及其子类同时又编写了一个config.yaml文件和mysql.yaml文件
    image
    image
    image
    编写完毕后直接使用hydra.utils.instantiate()方法,传入cfg(DictConf对象),即可。
    同理self.train_dataset = instantiate(self.data_conf.train, _recursive_=False)直接调用了instantiate()方法将train(DictConf)传入,以此来实例化数据集
    【注1】:DictConf与Python原生的数据集不同,可以直接使用key.value的形式来直接获取键值
    【注2】:现在还未实践,如果将Default ListsConfig Value同时配置到config.yaml中使用cfg.defaults是否是default_dataset
  • setup_ddp_ditributed_training():
    在VGGT的官方训练代码中注释到 #wrap the model with ddp,说明模型被分布式训练所包装,如果是多卡,其实这个参数不用改动,但如果是单卡需要去了解这里的详细工作流程。
    【注】:遗憾的是,主播现在单卡和多卡都还没有试成功😥

1.3 default.yaml

  • 默认列表与配置值
    在default.yaml中包括了Default ListConfig Value,在Hydra的参考文档中提到,可以将两者配置到一起。
    default.yaml文件中将Default List和Config Value配置在一起,Default List指向了default.dataset.yaml文件,Config Value配置了model等参数设置
    参考文档链接(跳转标题Composition order of primary config):
    https://hydra.cc/docs/tutorials/basic/your_first_app/defaults/#composition-order-of-primary-config
  • 非递归实例化
    在hydra的官方文档中,介绍到了非递归实例化的操https://hydra.cc/docs/advanced/instantiate_objects/overview/
    在演示示例一共创建了三个类Trainer,Dataset,Optimizer。其中Trainer类接收Dataset类和Optimizer类的OmegaConf字典,让内部自己去实现实例化
    现在回到VGGT的default.yaml中,在train.py中实例化了DynamicTorchDataset,传入了四个参数,其中dataset是ComposedDataset的实例,dataset_config是是列表,作者想同时加入vkitti数据集但事实上未加入,所以实际上列表类只有一个Co3dDataset的实例。
    image
    禁止递归实例化结构:image
    Trainer实例化解读:
    由于在创建实例时采用了非递归的形式,所以直接创建时,传入的参数基本上是字典(DictConf)与基本数据类型,创建完毕后类的数据成员如下,均为OmegaConf对象或者基本数据类型对象,完成实例化后才是对应的类对象
    image
    这里想稍微解释下那个data_conf这个数据成员,这个数据成员的类型其实是字典。分别指向两片不同的空间,用以完成train与val的实例化,在没有实例化前,存储的OmegaConf对象,在完成实例化后,指向对应的Class对象
    image

【注】:请注意分清参数数据成员的区别,

2.训练集微调-2

这一部分将介绍data文件夹下的部分.py文件以及dataset文件夹下的文件

2.1 dynamic_dataloader.py

在dynamic_dataloader.py定义了DynamicTorchDataset,DynamicBatchSampler,DynamicDistributedSampler三个类。DynamicTorchDataset由抽象基类ABC实现,其余两个类扩展了pytorch中的相应类的功能

  • DynamiTorchDataset:继承自抽象基类ABC,但这里的抽象基类并没有使用@abstractmethod装饰的抽象方法,其实可以直接实例化
    【注】:使用抽象基类的步骤与规则
    1.导入ABC类和abstractmethod方法 // 2.创建继承自ABC的抽象基类 // 3.在需要子类实现的方法上添加@abstractmethod装饰器 // 4.创建抽象基类的子类,实现所有的抽象方法
    image
posted @ 2025-07-14 00:18  BingUw  阅读(187)  评论(2)    收藏  举报