见到了一个非常elegant的项目代码结构,来自https://github.com/michuanhaohao/reid-strong-baseline.git
~
|- utils
|- logger.py: 初始化logger,有正对多卡训练的代码
|- iotools.py 关于读写的工具库,例如mkdir_if_missing
|- tests
|- lr_scheduler_test.py 测试了lr_scheduler
|- tools
|-train.py: 训练的主体代码
|- data
|- build.py: make_data_loader(): 构造dataloader对象
|- tranforms
|- build.py: 根据train和test,Compose构造不同的transforms
|- transforms.py: 自定义transform,随机擦除
|- datasets
|- __init__.py 使用工厂模式,对外统一了接口init_dataset,根据传入name去选择。其中存放了一个字典,键是name,值是对象。
|- base.py: 基类,所有数据集都会用到的一些基础类别
|- cuhk03.py 特定数据集,只起到存放数据的作用,不继承pytorch的dataset类
|- dataset_loader.py 继承pytorch的dataset类,重写__getitem__方法
|- samplers
|- triplet_sampler.py 定义数据集的sampler
|- collate_batch.py 根据train和test,改变dataloader的行为(非常elegant)
|- modeling
|- backbones
|- resnet.py 定义backbone
|- senet.py 定义backbone
|- __init__.py
|- baseline.py 定义实际使用的baseline,在已有模型的基础上进行结构修改。定义了前向传递,加载参数的过程
|- solver 训练器(求解器)
|- build.py 构造optimizer, 其中有一个利用getattr函数构造optimizer的过程,十分elegant
|- lr_scheduler.py 定义了lr_scheduler
|- layers 构造不同的损失函数,使用了工厂模式
|- center_loss.py
|- engine
|- trainer.py 使用ignite库,似乎是一个很高级优雅灵活的训练库(后面可以再研究)
|- inference.py 使用ignite库,似乎是一个很高级优雅灵活的训练库(后面可以再研究)
# 以上所有文件夹里都有__init__.py