Small object fast detection
Link:
最近一段的工作,主要是限定部分类别(类别不要太多)的快速检测,总算有点结果了。
用于替代自己之前上一版DL检测模型,当时预期的目标是:
- 比老版更快,720p分辨率上要 > 35FPS (1080Ti上)
- 能够保持和老版一致的小目标检测能力 > 16x16像素
- 保持检测精度 0.5 overlap F1 > 0.7
- 更好的泛化
- 更加方便的训练
- 更加灵活的架构
新版都达到了预期目标:
- 速度上: 1280x720分辨率,单纯前向推理,300FPS,硬件是1080Ti,加上后续处理获得Rect是60FPS,后续处理都是Python的for循环,拖慢了速度,换成向量化操作应该会更快点。我不确定Pytorch的forward是不是完全同步执行的,如果不是,那么300FPS+的指标就不再可靠。
- 小目标检测能力上:使用的红绿灯数据,目前都是1n x n像素的大量检出,窄的目标我看了下,有5、6像素宽,也是超出之前的预期目标了。
- 精度上:我测试了两个私有的数据集(1. 红绿灯、2. 行人车辆,分别是针对两个任务不同的网络结构,但是基本类似),F1 > 0.8, 公有数据集有一个Udacity的训练了,但是测试代码感觉有问题,虽然也 0.8+但是没有什么说服力。
- 泛化没有实际测试的数据,只是单纯跑了几个完全无关的视频,视频的曝光都不一致,结果在感官上是超出预期的,但是应该是有比较显著的下降。
- 训练已经比之前更加方便了,两天内我已经测了三个不同的数据集,基本都是简单调整一下就可以开始收敛。
- 架构灵活性目前也没有问题了,可以随时替换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