1. 模型对齐速查表复现对齐步骤预处理对齐模型权值对齐前向对齐target对齐反向对齐loss对齐后处理对齐box对齐2. 随机因素来源2.1 Python版本2.1 DataLoader[doc]3. 固定随机种子使用确定性算子condaenvconfig varssetCUBLAS_WORKSPACE_CONFIG:4096:8random.seed(seed)np.random.seed(seed)torch.manual_seed(seed)torch.backends.cudnn.deterministicTruetorch.use_deterministic_algorithms(True)[cublas]3.1 os.urandom()对齐代码参考II. 张量对齐需要对齐形状tensor.shape均值tensor.abs().mean()III. 模型权值转换权重转换得到MMDet模型的Pytorch权重.pth生成参数名对应列表根据列表将MMDet权重转换为native-torch模型权值Paddle教程参考代码defload_torch_model(file_name):weightstorch.load(file_name)state_dictweights[state dict]forkinstate_dict.keys():state_dict[k]state_dict[k].numpy()returnstate_dict参考资料Paddle冠冠老师权重对齐代码Debug_gfl/gfl_debug_tools/weight_convert.shIII. 前向运算对齐主要原则输入张量一致测试输出张量足够接近allcloseNote在前向对齐的时候可以将模型设置为eval模式先验证target张量是否已经对齐。IV. 反向传播对齐对齐速查表输入数据权重参数学习策略及超参数对齐目标对齐目标量中间输出值和梯度值。对齐步骤训练几次迭代对比paddle和torch的训练loss是否一致。若不一致打印中间参数与梯度输出并对比差异定位差异点并分析问题所在。用相同数据集学习策略超参数分别训练oaddle和torch模型对比训练log与可视化效果是否一致。可以使用模拟数据“假数据”进行训练看一下loss的变化情况使用序列化文件对齐的方法关于使用序列化文件进行反向传播对齐的步骤请参考《Paddle反向梯度排查方法文档 | 反向对齐核验》获得梯度信息可以使用register_hook()我们可以使用register_hook()钩子函数获得梯度信息