系统地学习目标检测可以遵从下面的学习路线:
1.学习经典工作。经典工作包括RCNN系列(RCNN、Fast RCNN、Faster RCNN),宏观上可以学习到什么是目标检测、目标检测是做什么的,微观上可以学习到诸如Region Proposal Network(后续one-stage工作的基础)、Anchor box等基础技术。这个系列后来被划定为“two-stage”工作,检测精度好、速度要慢一些。随后,再学习早期的YOLO系列工作(YOLOv1、YOLOv2),宏观上可以学习到什么是one-stage目标检测方法、如何进行端到端的训练和推理,同时,学习SSD,可以初次接触到多级检测方法——使用更多的特征图去检测不同大小的物体。最后,学习FPN、YOLOv3以及RetinaNet(Focal loss),掌握当下主流检测框架“分而治之”方法。学习玩这些经典工作,最好能从中挑选出一至两个工作,进行复现,那么,目标检测就入门了。
2.学习最新工作。完成了经典工作的学习后,掌握了目标检测的基本概念,即可找近两年内的工作,考虑到笔者写下这段文字的时候是2022年初,Transformer在CV领域仍发挥着很大的作用,那么就可以先看ECCV 2020的DeTR,掌握如何将Transformer应用在目标检测领域中。如何对这个系列的工作感兴趣,且手里的资源足够充足,那么可以继续跟进DeTR后续的诸多改进版本,如Deformable DeTR、Anchor DeTR等等。同时,也可以再学习基于Transformer的backbone工作,如ViT、SwinTR等,都是具有里程碑意义的工作。
如果对DeTR不太感兴趣,也可以看一些其他工作,如受DeTR启发的Sparse RCNN、NMS-free的OneNet、探索C5尺度的检测性能上限的YOLOF,还有动态label assignment的OTA等等。
如果工作需求偏向于实际应用,那么在有了经典工作的基础后,可以上手YOLOv5、YOLOX这几个集大成者的工作。
总而言之,入门阶段,学习经典工作是必要的,因为后续的诸多工作都是默认读者已经有一定的相关基础了,所以,很多技术要点就不会写得详细了,这对于初学者来说并不友好。
最后,诚意推荐我自己的YOLO入门专栏,带领初学者手把手实现性能更好的YOLO检测器:
简单说一下本专栏的脉络:
YOLOv1原理讲解->YOLOv1模型搭建->VOC数据集准备->数据预处理->数据增强->训练模型->制作训练正样本->损失函数->测试模型与检测结果的可视化->计算mAP->COCO数据集准备->COCO-val验证集和AP计算方法。
这一部分可以让我们能够对目标检测有个基本而初步的认识,对于YOLO系列的思想有了基本了解和认识,并且能够在当下的主流数据集COCO上完成测试,最重要的,是我们能够掌握数据预处理的基本方法,这对于开展今后的学术工作是很重要的。
很多时候,每当我们进入一个新的领域,首先最需要解决的问题包括三点:
1.确定常用的数据预处理方法;
2.确定该领域的benchmark;
3.确定评价指标及其计算方法。
完成这一部分后,相信读者能够对以上三点有个基本的掌握,并且能够搭建出来一个我们自己的YOLOv1检测模型。倘若实际需求较为简单,那么这样的一个模型足以满足。
本部分的核心项目代码:
这一部分的最后,我们会介绍一个增强版的YOLOv1检测器,性能很强大。
YOLOv2原理讲解->anchor box讲解->kmeans获取anchor box->YOLOv2模型搭建->训练模型->基于anchor box的正样本匹配->损失函数->测试模型与检测结果的可视化->计算mAP。
这一部分可以让我们对anchor box、anchor box based方法的原理有一个初步的认识,以及基于anchor box的正样本匹配的基本原理有一个初步的了解和认识。
本部分的核心项目代码:
这一部分的最后,我们会介绍一个增强版的YOLOv2检测器,性能很强大呦。
FPN解读->YOLOv3原理讲解->Y
OLOv3中的正样本匹配方法->测试模型与检测结果的可视化->计算mAP。
YOLOv3这一部分内容最少,主要也是因为YOLOv3本身就没有太多改进的地方,主要是增添了FPN模块,换了更大的backbone。完成这一部分,读者基本就是入门了,如果代码全程都手敲下来和调试,相信读者会收获不少。
本部分的核心项目代码:
主要是以上三部分,后续会根据更新内容不断做调整。
最后说明一下,为了配合这个专栏,以前的项目代码我会重新做调整,将v1、v2、v3都单独分开,不再合成一个项目发布了。所有模型我都会重新训练一遍,也许会和之前的结果有些出入,但无关紧要。
这一部分的最后,我们会介绍一个更好的YOLOv3检测器。
笔者近来也尝试实现了一版YOLOv4,不过,性能没有达到官方的YOLOv4的性能,具体原因仍待详查,短时间内可能无法将由笔者实现的YOLOv4的性能提升到官方的水准了。但作为一个入门的素材还是十分足够的,读者可以从这个项目里学习到有关马赛克增强的数据预处理知识,进一步入门目标检测领域。
笔者近来也尝试实现了一版YOLOF,不过,同上面的 YOLOv4一样,性能也没达到官方的baseline水准。这个项目的trick有点多,目前仍在一一尝试中。同样,笔者认为将这一版YOLOF作为入门的素材是绰绰有余的,读者可以从这个项目里学习到更多的有关数据预处理的方式(比如最短边为800,最长边不超过1333),以及一个结构更加简洁的、训练时长更短的(仅在COCO上训练12epoch,即所谓的“1x”训练策略)的目标检测模型。
希望这一“实在”的专栏能够给读者们带来更佳的体验吧~
最后,对此专栏感兴趣的可以私聊我加入微信群,针对本教程有任何问题,都可以在群里提问,笔者会及时做出解答的。
目标检测可以先从成熟框架开始上手,比如mmdetection和detectron2。
如果基础稍弱一点的话,也可以先上手torchvision的detection部分,代码比较clean,没有特别的封装。