最近跟转模型结果不一样斗争了很久很久.争对尝试,总结几个我们可以去查问题的方向吧.
1.模型是否正确
转后的模型每一层网络结构是否一样,输入与输出的特征图维度是不是一样.
pytorch
print(model)
python caffe
for layer_name, blob in net.blobs.items():
print(layer_name + '\t' + str(blob.data.shape))
2.同样的输入,预处理与后处理相同,不同模型(pytorch,caffe)验证结果
(1)这种情况下我们保证所有的输入/预处理/后处理一致,确定是不是模型转换中出现的问题.
(2)怎么验证:每一种处理直到输入到模型,都做可视化输出,一一核对输出是否一致,不一致就改一致.
opencv imread/resize
PIL open/resize
3.查pytorch转caffe的一些坑,找思路
(1)这个地方就是网络层内部实现差异对比了,即使是一个向上取整/向下取整等的不一致;
(2)即使是没有参数的,我们都需要去比对.
maxpool
ceil_mode参数设置
前人已经做过很多这方面的了,没思路时在网上查查,或者沉下心来,看代码,一步一步对比是否一致.