训练脚本执行
训练主要涉及“run_dcnet.py”脚本(训练脚本位于安装目录下的“tools/train”文件夹中。),注意Python版本为3.7.5,训练时默认使用混合精度模式。
文件名 |
python3 run_dcnet.py --save_path <save path> --data_path <dataset path> --data_name <eval dataset name> --learn_name <train dataset name> --warmup <warmup epochs> --epochs <training epochs> --metric <metric type> --batch_size <batch size> --valid_batch_size <valid batch size> --start_epoch <start epoch> --lr <learning rate> --use_amp <whether use amp> --apex_mode <apex mode> --scale <scale> --ftopk <fuzzy topk> --param_list <param list> --use_drop <use drop> --drop_prop <drop prop> --nlist <coarse centroid num> --niter <iterations> --nprobes <nprobes> --percents <fuzzy percentages> --gpu <gpu id> --seed <seed> --log_interval <log interval> --eval <whether to eval> --ai_center <trained model path> |
---|---|
参数名称 |
<save path>:指定存储路径,默认为空,必须指定。 <dataset path>:所有数据的路径,包含训练集和验证集,必须指定。 <eval dataset name>:验证集名称 (包含base,query和gt),必须指定。 <train dataset name>:训练集名称 (如learn10m.npy的名称是learn10m),必须指定。 <warmup epochs>:学习率调整策略,warmup的epoch数,默认3。 <training epochs>:训练epoch数,默认20。 <metric type>:距离计算方式,IP/L2, 默认IP。 <batch size>:训练batch size,默认2048。 <valid batch size>:评估batch size,默认10000。 <start epoch>:用于resume pytorch模型,初始epoch,默认0。 <learning rate>:初始学习率,默认0.0005, 必须指定。 <whether use amp>:是否使用混合精度训练,默认False, 推荐True,如使用则必须指定。 <apex mode>:混合精度模式,O1/O2, 默认O2。 <scale>:混合精度训练scale,默认1024。 <fuzzy topk>:训练参数,默认10。 <param list>:模型结构定义,默认[256, 512, 1024, 2048, 8192, 16384],第一个输入元素是数据维度,默认256维,最后一个输出元素是nlist个数,默认nlist=16384。 <use drop>:训练策略,默认False,推荐使用True。 <drop prop>:使用drop时的比例,默认0.05。 <coarse centroid num>:L1簇聚类中心个数,默认16384。 <iterations>:训练参数,默认128。 <nprobes>:检索评估,默认[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 16, 20, 32]。 <percents>:底库的冗余比例,建议使用[0.8, 1.0, 1.25, 1.50],必须指定。 <gpu id>:选择一个训练资源ID,默认为0,如果没有GPU则使用CPU,设置-1,必须指定。 <seed>:默认1。 <log interval>:训练阶段log间隔数,默认500。 <eval>: 用于模型评估,可直接加载模型评估不同验证集跳过训练,默认为False,如使用则设置为True。 <ai_center>: 用于模型评估,输入模型路径。 |
用法 |
执行此命令,用户可以进行IVFast的训练测试,使用范例: 1) 模型训练: python3 run_dcnet.py --save_path ./save_path/ --data_path /data1/AscendFaissTestData/ --data_name "webfaceLPS" --learn_name learn10m --warmup 3 --epochs 20 --lr 1e-4 --param_list 256 512 1024 2048 8192 16384 --use_drop True --drop_prop 0.05 --percents 0.0 0.8 1.0 1.25 1.50 --use_amp True --gpu 3 2) 模型评估: python3 run_dcnet.py --save_path ./save_path/ --data_path /data1/AscendFaissTestData/ --data_name "webfaceST" --learn_name learn10m --eval True --ai_center ./save_path/ivfast.npy --gpu 3 --percents 0.0 0.8 1.0 1.25 1.50 |

- 模型训练时,在“save_path”中会保存训练log,模型权重weights,以及中间生成的结果等。最终在IVFast-index中使用的AI聚类模型为“/save_path/ivfast.npy”。
- 模型评估时,可以直接加载已经训练好的“ivfast.npy”,不同验证集以及不同冗余比例,做泛化性评估,决定使用或不使用。
- 为了提升训练效率,模型训练默认使用混合精度O2模式 (use_amp = True),由于GPU没有混合精度异常处理机制,如果在训练中出现loss = NaN,建议缩小学习率,如5e-4->1e-4, 或者关闭混合精度机制(训练时间会变长)。