工程经验记录yolo框下移引发的思考
事件叙述:
缘起:yolo检测框,在项目开始之前由于在一些场景下观察到yolo的框在大车检测的时候,回归的位置不好,一些车辆的尾部会被漏掉,特别是车牌部分,恰好被框在外面的时候,在后续就无法进行车牌检测与识别等操作,因此为了临时解决,将yolo的框进行了1/15的下移操作;
改观:首先车牌的问题在很早的时候就解决掉了,方法是在进行车牌检测+识别时对yolo框进行下移,其他模块不进行该操作(因此这里需要注意,在车牌识别的模块(不仅仅是这个模块,其他类似的操作)在设计接口的时候,一定不要设计成单张图片传入的形式,而是要传入原图+rect的形式,这样在做后续操作的时候就会更灵活),车牌检测与识别的部分在训练的时候也需要进行下移,这样可以保证在工程中可以达到训练时的效果;
后续发酵:后面面临着yolo模型的优化与更新,这时问题就显露出来了,因为前序模块的训练全都是基于老的yolo出来的图片进行训练的,如果yolo进行了更新,那么其得出的框的分布就会有分布上的改变,如果后续模块在训练的时候没有针对这里做专门的扩增等操作的话,在替换模型之后很可能后续模块的效果就会变差;
建议解决方法:
1、在训练的时候考虑各种随机增益与数据扩充(最好是在线增益),摆脱对于前序模块的依赖;
2、使用多个yolo模型输出的结果结合起来对于后续模型进行训练(有滞后性);
3、基础模块的训练一定要先行。