Yolov5是目标检测中比较经典的模型,学习对其后处理进行解码是非常有必要的。在这里我们仅使用核
函数对Yolov5推理的结果进行解码并恢复成框,掌握后处理所解决的问题,以及对于性能的考虑
经验之谈:
1.
对于后处理的代码研究,可以把
PyTorch
的数据通过转换成
numpy
后,
tobytes
再写到文件,然后再到
c++
中读取的方式,能够快速进行问题研究和排查,此时不需要
tensorRT
推理也可以做后处理研究。这也叫变量控制法
2.
fast_nms_kernel
会在极端情况少框,但是这个极端情况一般不会出现,实测几乎没有影响
3.
fast
nms
在
cuda
实现上比较简单,高效,不用排序
yolov5的输出tensor(n x 85)
其中85是cx, cy, width, height, objness, classification * 80
CPU解码重点:
1.
避免多余的计算,需要知道有些数学运算需要的时间远超过很多
if
,减少他们的次数就是性能的关键
2.
nms
的实现是可以优化的,例如
remove flag
并且预先分配内存,
reserve
对输出分配内存