很多人都会遇到这么一个问题:同样的模型,由于预处理的方式不一样,导致预测结果不同。这其实不值得惊讶,因为你模型用什么方式训练的,你就应该用什么方式去预测。但是大家思考过没有,有时候你的预处理方式由于语言和平台的差异,并不能保证100%的一致性。那么此时,这些微小的差异会带来什么样的误差呢?无外乎两种可能:

  • 没有结果,结果完全一团糟;
  • 有结果,但是结果不同,有的好有的坏。

但现实其实并没有这么简单。我可以这么说,由于预处理的不同,你的结果可能更快,但是也有可能变得更好. 当然这个更好并不是相对于它的表现,而是相对于正常情况下的表现。

我曾经用同一个模型,用python和c++分别实现。但是我发现,预测结果出入很大,这原因肯定来自于我C++预处理的方式与python不一致。但是我惊讶的发现,C++的预处理中,一些在python里面漏检的物体,居然能够被检测出来。

94b11f6b-aabb-4c2b-a61c-16e90f5f1fe7-image.png
43e641e1-1f59-4d19-9d34-d208212b4e51-image.png

第一张图,是python的正常预测结果,但是你会发现,存在一个漏检,而在第二张图中,由于预处理的差异(或者说是错误),居然导致漏检能够被找回!!

这背后蕴含的道理是什么呢?来不及思考,我得先把C++预处理错误的原因找出来。。