一、简述
使用YOLO完成航拍视频任务识别时,会遇到识别框不稳定问题。
这是由于在连续帧处理时,YOLO不会记忆上一帧的识别结果,可能上一帧算法认为此处是一辆车,下一帧由于光照等变化,此处置信度下降,低于阈值,算法又不认为此处是车,下一帧置信度上升,算法又认为是车,因此造成了识别框闪烁问题,当同一视场下目标较多时,闪烁问题会更加明显。
二、思路
希望增加一个前后帧关联的策略,让前一帧的识别结果可以关联到后一帧,这里提供一个小思路,将前一帧超过一定阈值的置信度乘以一个系数叠加到下一帧对应的网格位置,相当于如果前一帧你认为是车,那么下一帧有更大概率这地方仍然存在车。
三、代码
在YOLO的nms函数前添加如下代码:
global temp_prediction
global first_frame
if not first_frame:
pre_predic = temp_prediction
else:
pre_predic = 0 #对上一帧的预测结果做读取
temp_prediction = prediction[..., 4] #对本帧的预测结果做缓存
prediction[..., 4] += pre_predic * 0.5
#对本帧的预测结果叠加一个上一帧的权重,目前权重设置为0.5,取决于不同任务,建议设置值在0.05~0.5之间
四、结果
增加前后帧记忆代码段前:
before
增加前后帧记忆代码段后:
after