Small object fast detection

Link:

最近一段的工作,主要是限定部分类别(类别不要太多)的快速检测,总算有点结果了。

用于替代自己之前上一版DL检测模型,当时预期的目标是:

  1. 比老版更快,720p分辨率上要 > 35FPS (1080Ti上)
  2. 能够保持和老版一致的小目标检测能力 > 16x16像素
  3. 保持检测精度 0.5 overlap F1 > 0.7
  4. 更好的泛化
  5. 更加方便的训练
  6. 更加灵活的架构

新版都达到了预期目标:

  1. 速度上: 1280x720分辨率,单纯前向推理,300FPS,硬件是1080Ti,加上后续处理获得Rect是60FPS,后续处理都是Python的for循环,拖慢了速度,换成向量化操作应该会更快点。我不确定Pytorch的forward是不是完全同步执行的,如果不是,那么300FPS+的指标就不再可靠。
  2. 小目标检测能力上:使用的红绿灯数据,目前都是1n x n像素的大量检出,窄的目标我看了下,有5、6像素宽,也是超出之前的预期目标了。
  3. 精度上:我测试了两个私有的数据集(1. 红绿灯、2. 行人车辆,分别是针对两个任务不同的网络结构,但是基本类似),F1 > 0.8, 公有数据集有一个Udacity的训练了,但是测试代码感觉有问题,虽然也 0.8+但是没有什么说服力。
  4. 泛化没有实际测试的数据,只是单纯跑了几个完全无关的视频,视频的曝光都不一致,结果在感官上是超出预期的,但是应该是有比较显著的下降。
  5. 训练已经比之前更加方便了,两天内我已经测了三个不同的数据集,基本都是简单调整一下就可以开始收敛。
  6. 架构灵活性目前也没有问题了,可以随时替换backbone,目前的都是torchvision自带的resnet18。老版本相对来说要麻烦不少。

运行速度
300Hz(forward), 60Hz(包括后处理) [后处理代码待优化]

小目标
1n x n像素的目标可大量检出

精度(F1 value of 0.5 overlap)
红绿灯数据集合 0.8+
行人、车辆集合 0.8+

这两天盯屏幕盯的眼睛疼……

结果视频,测试集,类别我懒得对了,应该就是 红、黄、绿、关。我没把原始结果去重,评测的时候我用Opencv的groupRectangle去重了,简单粗暴。

https://www.zhihu.com/video/1012712214515392512