1.背景
项目上一直使用darknet yolov5做目标检测。
最近给半导体部门提供C++ 推理库,还得支持TensorRT。
2.问题现象
测试下来发现batch推理和单张推理结果不一致。
比如72张芯粒样本,里面有20张是不良品,单张推理结果是正确的,但batch推理结果却只能有9张不良品。和batch size也无关。
3.解决方案
经过反复测试,发现传入约80%的图片能正确推理成功(比如batch size=64,传入40张图片,其余为0)。因为项目紧急,本来想先提供这个临时方案的。
后来又专门花了点时间研究了下,查找网上类似问题,发现了解决方案如下:
增加一个同步处理即可。
原理如下:
这句话的作用就是让data拷贝到GPU结束后,CPU线程再继续。之前没有这句话,应该是没拷贝全到显存。
各位如有别的看法,欢迎到评论区一起讨论~