在之前的一篇总结里面提到对多尺度的思考:
Captain Jack:数据质量的重要性与多尺度的重新思考当时自己认为,网络可以传递小目标的信息进入后续的层次,即使从down sample带来的数据丢失的角度来说,可能缩小后的feature map直觉上看已经完全不能表示小目标了,但是因为不断的增加channel,小目标精确的位置信息依然会通过某一形式的编码传递到后续层次中。
如果如上面所说,网络有这个能力可以传递小目标的精确位置信息到后续层次,我们就可以直接在最后层feature map比较小的位置重新获得检测框。这样的好处是检测网络的运行速度非常接近于一般的分类网络,运行速度起码在GPU上可以非常快了。
当然,这样带来的结果就是检测任务需要相对简单,因为这些编码的传递都是网络负担的一部分。
新的训练结果的想法依然是上面想法的继续:
Captain Jack:Small object fast detection速度基本与分类网络一致,小目标的能力也基本具备。
但是在训练过程中,自己对这个想法又有了一些重新的认识:
行人车辆数据集的验证:
检测模型最先验证的数据集是行人和车辆,输入则是640x384 RGB。在这里的缩放依然是32倍,也就是最终的feature大小是20x12。由于feature比较小,python的循环占用时间也少了,完成Rects的获取后FPS在200FPS以上。最终测试集F1达到了0.8+,在这样的速度的前提下,这样的指标已经比较让人可以接受了,毕竟已经超出之前的预期。
红绿灯数据集的验证:
随后同事正在处理的红绿灯数据依然面对速度和精度都不足的情况,于是我要来数据集开始训练。简单分成两次训练来说明(实际每个分辨率都有多次训练和调整)。
网络传递微小目标的能力存疑
从上面训练过程来看,存在这样的一个推理:
对于这一推理的反面:
针对目标上下文的重要性
训练2中的现象:
目标的检测初期的错误识别都集中在树干、金属杆,之后上方一块黑色色块一类东西。初期的目标检测其实蛮印象派的。。。大概是个样子就认为是,后续会慢慢更加纠结细节,更加精准。
这一现象说明,网络不单单是针对目标本体的识别,也包括周边信息。尤其是周边信息有强相关性的目标,比如就是红绿灯这样的:路口位置、有灯有柱。
另一个可以支持这个想法的证据是,出现过这样的现象:车辆从行人红绿灯下经过,并没有遮挡目标本体,但是目标依然丢失。可能是车辆的经过影响了目标的周边信息,造成目标的丢失。
自己的猜想:
小目标,由于缺少目标本体的细节信息,如果只单纯的考虑目标的几十个像素,容易与其他物体混淆,加入周边信息才可能更好的判断,减少错误。而红绿灯的好处就是周边信息是强相关的。
所以,自己猜想,如果是类似这样的小目标,周边信息特征明显,是可以实现比较好的检测效果,即使目标本身已经不明显了,但是这必须是在训练中考虑到目标的周边信息。反之,很可能会容易出现误识别,因为模型缺少周边信息来确认这样一个小到根本看不清的物体到底属于不属于待检的目标。