zjjMaiMai / TinyHITNet

HITNet: Hierarchical Iterative Tile Refinement Network for Real-time Stereo Matching
152 stars 21 forks source link

关于模型预训练权重的一些提问 #25

Open alcholiclg opened 10 months ago

alcholiclg commented 10 months ago

您好,非常感谢您对于这项优秀的复现工作的开源,它带来了很大的帮助,看了一下您的归属地是深圳,冒昧用中文来尝试一下提问。如果有幸可以得到您百忙中的帮助,真的非常感谢~ 在经过一些由于库和数据变动导致的bug的调整后我复现出了接近您readme中公布的模型指标精度,由于希望在kitti和sceneflow上复现论文的精度,我尝试自己转换了一下https://github.com/google-research/google-research/tree/master/hitnet提供的.pb到pytorch的权重格式,但是遇到了各种困难无法实现这个目的,过程大概如下:

  1. 通过官方和非官方的仓库下载到了各种版本的pb和onnx文件
  2. 使用mmdnn库(微软)转换pb->pytorch:算子命名问题导致失败,看提示应该是pb中对于某些operator的命名不符合要求,但因为不熟悉tensorflow感觉逐步修改起来可能比较麻烦。
  3. 使用onnx2torch库转换onnx->pytorch:库不支持argmin算子的转换,除非自定义实现。
  4. 直接参数对应转换pb->pth:1.算子命名和结构不同。2.算子的操作细节不同,比如pad。3.不够熟悉tensorflow,不确定转换后是否可以用,也很难把层与层很好的对应起来。

因此主要想向您提出两个问题:1. 能否请教一下您当时转换权重的过程和细节,不知道能否按照您的方法来高效的完成转换?2. 对于我尝试过的策略和遇到的问题,不知道您是否有一些建议?

zjjMaiMai commented 10 months ago

您好,非常感谢您对于这项优秀的复现工作的开源,它带来了很大的帮助,看了一下您的归属地是深圳,冒昧用中文来尝试一下提问。如果有幸可以得到您百忙中的帮助,真的非常感谢~ 在经过一些由于库和数据变动导致的bug的调整后我复现出了接近您readme中公布的模型指标精度,由于希望在kitti和sceneflow上复现论文的精度,我尝试自己转换了一下https://github.com/google-research/google-research/tree/master/hitnet提供的.pb到pytorch的权重格式,但是遇到了各种困难无法实现这个目的,过程大概如下:

  1. 通过官方和非官方的仓库下载到了各种版本的pb和onnx文件
  2. 使用mmdnn库(微软)转换pb->pytorch:算子命名问题导致失败,看提示应该是pb中对于某些operator的命名不符合要求,但因为不熟悉tensorflow感觉逐步修改起来可能比较麻烦。
  3. 使用onnx2torch库转换onnx->pytorch:库不支持argmin算子的转换,除非自定义实现。
  4. 直接参数对应转换pb->pth:1.算子命名和结构不同。2.算子的操作细节不同,比如pad。3.不够熟悉tensorflow,不确定转换后是否可以用,也很难把层与层很好的对应起来。

因此主要想向您提出两个问题:1. 能否请教一下您当时转换权重的过程和细节,不知道能否按照您的方法来高效的完成转换?2. 对于我尝试过的策略和遇到的问题,不知道您是否有一些建议?

我采用了手工转换的方式,也就是你提到的4.这个方案,但正如你所说,这是一个繁琐的工作。 按照我的经验,你需要写一些单元测试,来保证每一层的正确性,而且你需要了解 tensorflow & pytorch 在卷积上实现细节,比如 padding。 我建议你尝试逐层转换 hitnet_xl_sf_finalpass 的权重,且检查是否能与我转换的结果对齐,继而推广至其他的模型。

zjjMaiMai commented 10 months ago

https://github.com/zjjMaiMai/TinyHITNet/issues/17 也许这个 issues 能够对你有帮助。