YOLO目标检测 [转换版] (杨建华) (Z-Library)
Author: Unknown Author
科学
No Description
📄 File Format:
PDF
💾 File Size:
19.0 MB
364
Views
77
Downloads
0.00
Total Donations
📄 Text Preview (First 20 pages)
ℹ️
Registered users can read the full content for free
Register as a Gaohf Library member to read the complete e-book online for free and enjoy a better reading experience.
📄 Page
1
(This page has no text content)
📄 Page
2
1
📄 Page
3
2
📄 Page
4
3
📄 Page
5
4 内容提要 本书主要介绍基于视觉的YOLO框架的技术原理和代码实现,并讲解目标检测 领域中的诸多基础概念和基本原理,在YOLO框架的基础上介绍流行目标检测框 架。 本书分为4个部分,共13章。第1部分介绍目标检测领域的发展简史、主流的 目标检测框架和该领域常用的数据集。第2部分详细讲解从YOLOv1到YOLOv4这四代 YOLO框架的网络结构、检测原理和训练策略,以及搭建和训练的YOLO框架的代码 实现。第3部分介绍两个较新的YOLO框架—YOLOX和YOLOv7,着重讲解其设计理 念、网络结构和检测原理。第4部分介绍DETR、YOLOF和FCOS在内的流行目标检测 框架和相应的代码实现。 本书侧重目标检测的基础知识,包含丰富的实践内容,是目标检测领域的入 门书,适合对目标检测领域感兴趣的初学者、算法工程师、软件工程师等人员学 习和阅读。
📄 Page
6
5 谨以此书献给我已去世的父亲,感谢您在我生命的前二十五年中给予的教 育、指导和鼓励,是您将我从一个无知的少年引上了人生的正途,让我成为一个 完整的人。同时,也献给我的母亲,感谢您的陪伴和悉心呵护,是您让我能够在 这个复杂的世界中健康茁壮地成长,始终保持对身边的人和世界的热爱。 ——杨建华
📄 Page
7
6 前言 我本人很喜欢物理学家费曼先生,尤其是他的科学精神,我的治学过程受他 的启发很大。当我涉足一个新的知识领域时,只有当我能够完全推导出这个知识 领域的知识框架时,才会认为自己已经学会并掌握了这个知识。 在我第一次投入目标检测领域时,首要建立的就是这一领域的知识体系。然 而,我发现如此热门的领域竟然连一本较为系统的、理论与实践相结合的入门书 都没有。虽然能够在网上搜索到很多带有“目标检测”字眼的技术图书,可是读 上几章就发现前半部分充斥着太多机器学习和深度学习的基础概念和公式,等熬 过阅读这些基础内容的时间,充满期待地去读后半部分时,却又觉得干货太少, 大多时候只停留在对某个流行的目标检测框架已开源代码的讲解,以大量篇幅介 绍怎么训练开源代码,怎么测试开源代码,又怎么在自己的数据集上使用开源代 码。当我想了解设计一个目标检测网络的方法、制作训练所需的正样本的原理及 其实现方法、损失函数的原理、一个目标检测框架的逻辑的时候,我就迷失在了 这些文字的汪洋大海里。 相反,在很多技术大牛的博客文章和一些技术论坛中,我逐步掌握了一些工 作的技术内核,学习了他们搭建网络的技术路线、制作正负样本的数学原理、各 种损失函数的效果和目标检测框架的内在逻辑等知识。在有了这些技术基础后, 通过不断地模仿和思考,我也逐渐写出了一套自己的目标检测项目代码,这对我 日后去阅读新的目标检测论文、开展前沿工作、上手开源代码都带来了很大的帮 助。这不仅让我掌握了一些微观上的操作细节,也让我对目标检测领域有了宏观 上的把握。 但是,当我再回顾自己这段学习的心路历程时,还是觉得这样的学习方式, 诸如选择适合初学者的论文、选择通俗易懂又全面的科普文章等,具有太多的偶 然性。如果迟迟没有找到合适的文章,那就不能理解什么是YOLO检测器,什么又 是Detection with Transformers框架。同时,大多数开源代码的上手难度较高, “九曲十八弯”的嵌套封装往往让初学者刚上手就迷失在了一次又一次的代码跳
📄 Page
8
7 转里,更不用说要将一堆堆零散的知识串联成一个可以印刻在大脑里的认知框 架。 在我写下这段文字时,深度学习仍旧是以实践为主,它的重要分支—目标检 测也依旧是以实践为主的研究领域,但很多相关图书往往只停留在基础知识的讲 解上,所使用的代码也是网上现成的开源代码,这对于初学者来说通常是不友好 的。 在某个闲暇的傍晚,我仰靠在实验室工位的椅子上,思索着刚看完的论文, 正被其中云山雾绕般的复杂理论所困扰,那一刻,灿烂的夕阳照亮了灰白的天花 板,一切都被温暖的橘色所笼罩,焕发出鲜活的色彩。我坐直身子,凝视着窗外 远处被柔和的夕阳所点缀的大楼,心旷神怡。忽然间,我萌生了写一系列我所认 可的目标检测科普文章的念头,其中既包括对经典论文的解读,又包括原理层面 的讲解,最重要的是提供一套可复现的代码,让读者能够从编写代码的角度进一 步加深对目标检测的理解,最终将那些我所认为的偶然性都变成必然性。 于是,我开始在知乎上写相关的文章。那时候,我对YOLO很感兴趣,这也是 目标检测领域最热门的目标检测架构,因而我选择通过写YOLO相关的科普文章来 讲解我所了解的目标检测领域的基础知识。 渐渐地,随着自己对YOLO的认识、对目标检测领域认识的不断加深,我写的 科普文章越来越多,内容也越来越详细。同时,随着我代码功底的提升,与科普 文章配套的代码实现也越来越丰富。我对自己的科普工作有3点要求:相关论文必 须读透、科普内容必须翔实、代码实现必须亲自动手。尤其是第三点,在我看 来,是很多科普文章所缺乏的,这些文章最多就是放上已有的开源代码来补充内 容。或许,正是因为很多读者能够在我的科普文章中既习得了感兴趣的技术原 理,又获得了一份可以运行的、可读性较高的代码,理论与实践相结合,避免了 纸上谈兵,所以读者对我的一些文章给出了积极评价和赞赏。 在这两年时间中,我坚持跟进目标检测领域的技术发展,在业余时间里动手 实现每一个感兴趣的模块甚至是整个网络架构,配合自己的代码做深度的论文讲 解,因此我写出的科普文章越来越多,还创建了以YOLO为核心的目标检测入门知
📄 Page
9
8 乎专栏。尽管在如今这个讲究“快”的时代,一点一点学习基础知识可能不如直 接在现有工作的基础上做一些“增量式改进”来得实在,但我还是坚持自己的理 念,继续进行这方面的科普工作。 如今,在人民邮电出版社编辑的赏识下,我有幸能够将这些年来的科普文章 汇总成一本技术图书,对我来说,这是对我科普工作的一大肯定。我很希望本书 能够填补该领域中入门图书的空白,为初学者提供一个较好的入门资料。同时, 也由衷地希望这本书能够抛砖引玉,引来更多的专业人士拨冗探讨,引导后人。 那么,回到这本书所要涉猎的技术领域:什么是目标检测(object detection)? 在计算机视觉领域中,目标检测是一个十分基础的计算机视觉问题,是图像 分类(image classification)这个相对简单且更基础的任务的诸多下游任务中的 一个重要分支。在图像分类任务(如图0-1所示)中,我们设计一个分类器 (classifier)模型,期望这个分类器能够识别出给定图像的类别,例如输入一张 有关猫的图像,我们希望分类器能够判别出输入图像中的目标是一只猫,如图0-1 所示。 图0-1 图像分类任务 不过,尽管能够识别出“猫”这一类别,但对于其所处的空间位置却几乎是 不知道的。因此,图像分类任务有着明显的局限性。不同于图像分类任务,在目 标检测任务中,我们需要设计一个检测器(detector)模型,期望这个检测器能够 识别出图像中我们所感兴趣的目标,这里对于“识别”的定义既包括识别出每个 目标的类别,又要定位出每个目标在图像中的位置。例如,输入一张图像,如图
📄 Page
10
9 0-2所示,我们希望检测器能够识别出图像中的“猫”和“电视机”,并采用边界 框的形式来标记目标在图像中所处的空间位置。 图0-2 目标检测任务 乍一看,这样的任务对人类来说是一件易如反掌的事情,多数人几乎不需要 经过相关的培训和训练,即可识别和定位出现于我们视野中的物体。然而,就是 这么一个对人类来说再简单不过的任务,对计算机而言,却是十分困难的。 直到21世纪初,随着深度学习中的卷积神经网络(convolutional neural network,CNN)技术的兴起,目标检测才得到了长足的发展。尽管在此之前,已经 出现了一批基于传统人工视觉特征(如HOG特征)的方法,然而目标检测在真正意 义上的突破还是从深度学习时代开始的。 目标检测发展至今,可以说是百家争鸣,百花齐放,不同的算法有着不同的 特色和优势,倘若我们一一讲来,这将会是一本长篇且有趣的综述类图书。但同 时也会使这本书变得厚重无比,成为长期放于书架、与尘土作伴的“大部头”。 这并不是我的初衷。 不论是哪一个科学领域,总会有几个代表性的工作时常被人提起。在目标检 测领域中,YOLO(You Only Look Once)便是这样的工作之一。YOLO是一个具有里 程碑意义的存在,以在GPU上的实时检测速度和简洁的网络架构两大特点而一鸣惊 人,打破了R-CNN系列工作的神话,结束了基于two-stage方法的检测框架的统治 时代,掀开了基于深度学习的目标检测领域的新篇章,创建了新的目标检测范 式,为这一领域注入了新鲜的、更具有潜在研究价值的新模式。在后续许多出色 的工作中,我们都能够看到YOLO的影子。
📄 Page
11
10 时至今日,YOLO网络已从最开始的YOLOv1发展出YOLOv2、YOLOv3和YOLOv4等 多个版本。在GitHub上,由非YOLO官方团队实现的YOLOv5也备受研究者的青睐, 以及由旷视科技公司发布的YOLOX再度将YOLO工作推向了新的高峰。2022年,美团 公司发布的工业部署友好型的YOLOv6和YOLOv4的作者团队新推出了YOLOv7,再一 次刷新了YOLO系列的性能上限。随着这些优秀的研究者们不断致力于优化和改善 YOLO框架,YOLO几乎成了目标检测任务的代名词,是当前目标检测社区较活跃, 也是较受欢迎的工作。或许终有一天,YOLO将被这个时代所抛弃,但在目标检测 发展史中,YOLO所筑下的里程碑将永远屹立。 正因如此,我斗胆选择以YOLO为核心,写下这本以“入门目标检测”为宗旨 的技术图书。本书可能是第一本以实践为出发点来讲解YOLO网络的教程类图书, 也是一本对初学者较友好的目标检测入门书。同时,请允许我以这么一本基础书 来为各位读者抛砖引玉。 本书的组织结构 本书包含四大部分,共13章。以下是本书各章内容的简要介绍。 第1部分是“背景知识”,涉及第1章、第2章的内容。 ●第1章,“目标检测架构浅析”。详略得当地介绍了自深度学习时代以来 的目标检测的发展简史,以简略的笔墨向读者铺开这一技术发展的画卷。在这一 章中,作者列出了若干经典的目标检测框架,如R-CNN系列和YOLO系列,讲述了当 前目标检测领域的两大技术流派:两阶段和单阶段。同时,介绍了当前流行的目 标检测架构,包含主干网络、颈部网络和检测头三大部分,这为以后的改进和优 化工作提供了较为清晰的路线和准则。目标检测发展得已较为成熟,由于篇幅有 限,作者无法将每一部分的所有工作都罗列出来,因此只能挑选其中极具代表性 的工作进行介绍。在了解了相关原理后,建议读者顺藤摸瓜地去了解更多的相关 工作,丰富知识体系。 ●第2章,“常用的数据集”。介绍了目标检测领域常用的两大数据集: PASCAL VOC数据集和MS COCO数据集,其中,MS COCO数据集是最具挑战性的、当
📄 Page
12
11 下诸多论文中必不可少的重要数据集之一。了解这些数据集的基本情况,是入门 目标检测领域的基本功之一,有助于读者开展后续工程或学术方面的工作。 第2部分是“学习YOLO框架”,涉及第3章~第8章的内容。 ●第3章,“YOLOv1”。详细讲解经典的YOLOv1工作,包括网络结构、检测 原理、训练中的标签分配策略、训练模型的策略以及前向推理的细节。通过本章 的学习,读者将正式迈过目标检测领域的门槛,对目标检测任务建立基本的认 识,掌握基于YOLO框架的检测技术路线,这有助于开展后续的学习和研究工作。 ●第4章,“搭建YOLOv1网络”。在第3章所学习的YOLO相关知识的基础上, 通过对YOLOv1的网络结构做适当的改进,着手编写相关的网络结构的代码。本章 的代码实现环节将有助于提升读者对目标检测框架的认识,使其对如何基于现有 的深度学习框架搭建目标检测网络有一定的基本了解。 ●第5章,“训练YOLOv1网络”。本章进一步编写YOLOv1的项目代码,在第4 章的基础上,本章主要编写读取数据、预处理数据、搭建模型、实现标签匹配、 实现训练和测试代码以及可视化检测结果等诸多代码实现内容。通过学习本章, 读者将对如何搭建一个目标检测框架并实现训练和测试等必要的功能有一个较为 清晰的认识。这些认识也将对读者日后开展深入研究、快速掌握其他开源代码的 架构起着很大的作用。 ●第6章,“YOLOv2”。介绍了自YOLOv1之后的新一代YOLOv2网络,着重介 绍了YOLOv2所采用的各种改进和优化方式,有助于读者了解包括批归一化层、先 验框、多尺度训练等在内的关键技术。这些技术都是当前主流的目标检测框架中 不可或缺的部分。同时,还对YOLOv2做了一次复现,有助于读者从代码实现的角 度进一步加深对YOLOv2的认识,同时巩固搭建目标检测项目的代码能力。 ●第7章,“YOLOv3”。介绍了YOLOv3检测框架的技术原理和细节。自 YOLOv3开始,YOLO系列工作的整体面貌就基本确定下来:强大的主干网络和多尺 度检测架构。这两点在后续的每一代YOLO检测器中都能清晰展现。同时,也讲解 了YOLOv3的代码实现,完成对复现的YOLOv3的训练和测试。
📄 Page
13
12 ●第8章,“YOLOv4”。介绍了YOLOv4检测框架的技术原理和细节,着重介 绍了相较于YOLOv3的诸多改进。同时,也讲解了复现YOLOv4的相关代码实现,进 一步引导读者从实现的角度加深对YOLOv4的认识和理解,帮助读者巩固和强化对 一个完整的目标检测项目代码的认知和实现能力。 第3部分是“较新的YOLO框架”,涉及第9章、第10章的内容。 ●第9章,“YOLOX”。介绍了新一代的YOLO框架,讲解了YOLOX对YOLOv3的 改进以及新型的动态标签分配,并动手实现了一款较为简单的YOLOX检测器。 ●第10章,“YOLOv7”。介绍了YOLOv7检测框架的技术原理,主要介绍了 YOLOv7所提出的高效网络架构的实现细节,并动手实现了一款较为简单的YOLOv7 检测器。 第4部分是“其他流行的目标检测框架”,涉及第11章、第12章和第13章的内 容。 ●第11章,“DETR”。介绍了掀起Transformer在计算机视觉领域中的研究 浪潮的DETR,讲解了DETR的网络结构,并通过讲解相关的开源代码来展现DETR的 技术细节。 ●第12章,“YOLOF”。介绍了新型的单级目标检测网络,讲解了YOLOF独特 的网络结构特点和所提出的标签匹配,并通过代码实现的方式复现了YOLOF,进一 步增强读者的代码能力。 ●第13章,“FCOS”。介绍了掀起无先验框检测架构研究浪潮的FCOS检测 器,填补了前文对于无先验框技术框架的空白,加深了读者对无先验框检测架构 的理解和认识。FCOS是这一架构的经典之作,也是常用的基线模型,同时,无先 验框技术框架也是当下十分受欢迎的框架。 本书特色 1.较为全面的YOLO系列内容解读
📄 Page
14
13 本书以YOLO系列为核心,围绕这一流行的通用目标检测框架来开展本书的技 术讲解、代码实现和入门知识科普等工作。本书翔实地讲解了自YOLOv1到YOLOv4 的发展状况和相关技术细节。尽管在本书成稿时,YOLOv4已经算是“古董”了, 但即便是这样一个“古董”,最新的YOLO检测器也没跳出YOLOv4的技术框架,无 非是在每一个模块中采用了最新的技术,但其基本架构是一模一样的。因此,在 学习YOLOv4后,就能在宏观上对YOLO框架的发展有足够清晰的认识,同时在微观 上了解和掌握相关的技术细节,为日后读者自学更新的YOLO检测器做足了相关知 识储备,也为后续的改进和优化夯实了基础。书中也提供了大量图片以帮助读者 更加直观地理解YOLO系列。 2.作者编写的开源代码 完整、可复现的开源代码是本书最大的亮点。本书不仅详细地讲解了YOLO系 列所涉及的理论知识,更是在此基础上编写了大量的相关代码。正所谓“纸上得 来终觉浅,绝知此事要躬行”,只有通过阅读代码、编写代码和调试代码,才能 对YOLO具备更加全面的认识,而这些认识又会为入门目标检测领域提供大量的正 反馈。本书的绝大多数代码是由作者亲手编写,部分实现也借鉴了现有的开源代 码,而非简单地借用或套用已开源的YOLO项目代码作为范例,或者投机取巧地解 读YOLO开源项目。每一次代码实现环节都对应一份完整的目标检测项目代码,而 非零散的代码块,其目的是让读者能够一次又一次地建立起对完整的目标检测项 目的认识。本书的诸多经验和认识都是建立在作者编写的大量丰富代码的基础 上,使得读者既能够在阅读此书时对YOLO建立起一个感性认识,同时又能够通过 阅读、模仿、编写和调试代码建立起对YOLO的理性认识。 3.经典工作的解读和代码实现 除YOLO之外,本书还讲解了流行的目标检测框架(如DETR、YOLOF和FCOS), 同时,也提供了由作者编写的完整的项目代码,以便读者阅读、复现和调试。通 过学习这些YOLO之外的工作,有助于读者将从YOLO项目中学到的知识横向地泛化 到其他检测框架中,进一步加深对目标检测的认识,同时还能够纵向地摸清、看
📄 Page
15
14 清目标检测领域的发展趋势,掌握更多的技术概念,为后续的“践行”做足准 备。 本书读者对象 本书主要面向具有一定神经网络基础知识、了解深度学习的基本概念、想要 踏踏实实地夯实目标检测基础知识的初学者。同时,对于在工作中对YOLO框架有 一定涉猎,但缺乏对相关技术的了解和掌握,并打算学习相关技术、掌握基础概 念的算法工程师和软件工程师也同样适用。 本书采用自底向上、由浅入深、理论与实践相结合的讲解方式,帮助读者建 立起较为扎实的目标检测知识体系,有助于开展后续的研究工作。 阅读本书需具备的基础知识 由于本书不会去讲解过多的机器学习和深度学习的基本概念,因此希望读者 在阅读此书时,已经具备了一些机器学习、神经网络、深度学习和计算机视觉领 域相关的基础知识。同时,我们也希望读者具备Python语言、NumPy库和PyTorch 深度学习框架使用基础,以及对流行的计算机开源库OpenCV的基本操作有所了解 和使用经验。 另外,为了能够顺利调试本书提供的开源代码,还需要读者对Ubuntu操作系 统具有一些操作经验。尽管本书的大多数代码也能在Windows系统下正常运行,但 不排除极个别的操作只能在Ubuntu系统下运行。同时,读者最好拥有一块性能不 低于GTX 1060型号的显卡,其显存容量不低于3GB,并且具备安装CUDA、cuDNN和 Anaconda3的能力,这些硬件和软件是运行本书代码的必要条件。 致谢 感谢我的导师李瑞峰对我这些年的博士课题研究的支持和指导,感谢我的父 亲和母亲的支持,也感谢我所在实验室的师兄、师弟和师妹的支持。没有你们的 支持,就不会有这本书,是你们给予了我创作的动机、勇气和决心,是你们的支 持赋予了我工作的最大意义。
📄 Page
16
15 感谢人民邮电出版社的傅道坤编辑在本书的创作过程中提供指导、审阅书稿 并反馈大量积极的修改建议,感谢人民邮电出版社的单瑞婷编辑在本书的审阅和 校对阶段所付出的努力和不辞辛劳的帮助,也感谢人民邮电出版社的陈聪聪编辑 的赏识以及杨海玲编辑提供的帮助和支持。 感谢人民邮电出版社的工作人员为科技图书的普及做出的贡献。
📄 Page
17
16 第1部分 背景知识 第1章 目标检测架构浅析 通常,在正式迈入一个技术领域之前,往往先从宏观的、感性的层面来认识 和了解它的发展脉络是很有益处的,因此,在正式开始学习YOLO(1)(2)(3)系列工作 之前,不妨先从宏观的角度来了解一下什么是“目标检测”,了解它的发展简 史、主流框架以及部分经典工作。拥有这些必要的宏观层面的认识对于开展后续 的学习也是极其有益的。本章将从目标检测发展简史和当前主流的目标检测网络 框架两大方面来讲一讲这一领域的发展技术路线。 1.1 目标检测发展简史 在深度学习时代到来之前,研究者们对目标检测的研究路线基本可以划分为 两个阶段,先从图像中提取人工视觉特征(如HOG),再将这些视觉特征输入一个 分类器(如支持向量机)中,最终输出检测结果。 以现在的技术眼光来看,这种做法十分粗糙,但是已经基本能够满足那时实 时检测的需求,并且已经在一些实际场景的业务中有所应用,但那主要得益于人 体结构本身不算太复杂、特点鲜明,尤其是行走中的人的模式几乎相同,鲜有 “奇行种”。不过,想做出一个可靠的通用目标检测器,识别更多、更复杂的物 体,则存在很大的困难,在作者看来,造成这种困难的最根本的原因是我们难以 用一套精准的语言或数学方程来定义世间万物。显然,要检测的物体种类越多, 模型要学会的特征就越多,仅靠人的先验所设计出的特征算子似乎无法满足任务 需求了。 直到2014年,一道希望之光照射进来,拨开了重重迷雾。 2014年,著名的R-CNN(4)问世,不仅大幅提升了当时的基准数据集PASCAL VOC(5) 的mAP指标,同时也吹响了深度学习进军基于视觉的目标检测(object detection)领域的号角。从整体上来看,R-CNN的思路是先使用一个搜索算法从图 像中提取出若干感兴趣区域(region of interest,RoI),然后使用一个卷积神经
📄 Page
18
17 网络(convolutional neural network,CNN)分别处理每一个感兴趣区域,提取特 征,最后用一个支持向量机来完成最终的分类,如图1-1所示。 图1-1 R-CNN检测流程 通常,搜索算法会先给出约2000个感兴趣区域,然后交给后续的CNN去分别提 取每一个感兴趣区域的特征,不难想象,这一过程会十分耗时。为了解决这一问 题,在R-CNN工作的基础上,先后诞生了Fast R-CNN(6)和Faster R-CNN(7)这两个 工作,如图1-2所示,迭代改进了R-CNN这一检测框架的各种弊端,不断完善R-CNN “先提取,后识别”的检测范式。这一检测范式后被称为“两阶段”(two-stage) 检测,即先提取出可能包含目标的区域,再依次对每个区域进行识别,最后经过 处理得到最终的检测结果。 图1-2 R-CNN家族图谱
📄 Page
19
18 而在2015年,又一个革命性的工作—YOLO(You Only Look Once)(8)问世。不 同于R-CNN的两阶段检测范式,YOLO的作者团队认为,提取候选区域(定位)和逐 一识别(分类)完全可由一个单独的网络来同时完成,无须分成两个阶段,不需 要对每一个特征区域进行依次分类,从而能够减少处理过程中的大量冗余操作, 如图1-3所示。 图1-3 YOLOv1检测流程 显然,在这一技术理念下,YOLO只需对输入图像处理一次,即可获得最终的 检测结果,因而YOLO在检测速度上具有天然的优势。YOLO所采用的这种端到端的 检测方式将定位和分类耦合在一起,同步完成,因此,这类工作被称为“单阶 段”(one-stage)检测。显然,相较于以R-CNN为代表的两阶段检测范式,YOLO这 类单阶段检测框架理应更加高效、简洁。 在这样的设计理念下,YOLO凭借着其在TITAN X型号的GPU上以每秒处理超过 40张图像的检测速度(即40 FPS)超越了当时所有的通用目标检测器。尽管YOLO 的检测性能要略逊于当时最新的Faster R-CNN检测器,但其显著的速度优势使其 成为一个可以满足实时检测需求的通用目标检测器,许多研究者看到了这一检测 器背后所蕴含的性能潜力和研究价值。此后,YOLO以其在检测速度和模型架构上 的显著优势一鸣惊人,掀开了目标检测领域的新篇章。 也正是在YOLO框架大火之后,目标检测领域正式诞生了以下两大流派: ●以R-CNN为代表的two-stage流派; ●以YOLO为首的one-stage流派。
📄 Page
20
19 通常情况下,two-stage框架往往检测精度较高而检测速度却较慢,one- stage框架则恰恰相反,往往检测精度较低但检测速度较快。在很多计算机视觉任 务中,精度和速度总是矛盾的,因而促使研究者尝试从二者的矛盾中寻求一个较 为平衡的解决方案。随着后续研究者们的不断思考、探索和尝试,如今的one- stage检测框架几乎兼具了性能和速度两方面的优势,实现了极为出色的性能上的 平衡。 纵观科学发展史,“大道至简”和“奥卡姆剃刀”原理往往是有效的。也许 正因如此,广大研究者和工程师才更加青睐one-stage框架,投入更多的科研精力 和资源去优化这一框架,使其得到了长足的发展。这一点从每年发表在计算机视 觉顶级会议的目标检测工作中可见一斑,one-stage框架相关工作占据了很大的比 重,如SSD(9)、RetinaNet(10)和FCOS(11)等。近来,这一套框架又由方兴未艾的基 于Transformer(12)的DETR系列(13)(14)做了一次大幅度的革新。可以认为,目标检 测的one-stage框架以其更简洁、更具潜力等优势已经成为这一领域的主流框架。 因此,在入门目标检测领域时,学习one-stage框架相关工作是更为契合主流 的选择。 注意: 尽管基于深度学习的方法成为了这一领域的主流,但我们不难发现,基于深 度学习的方法仍旧延续着传统方法的工作框架,即先提取特征,再进行分类和定 位。只不过这两部分现在都被神经网络代替了,无须人工设计。因此,虽然传统 计算机视觉方法在许多方面被基于深度学习的方法所超越,但其思想仍值得我们 借鉴和思考。 1.2 目标检测网络框架概述 从深度学习时代开始,目标检测网络的框架也逐渐地被确定了下来。一个常 见的目标检测网络往往可以分为三大部分:主干网络(backbone network)、颈部 网络(neck network)和检测头(detection head),如图1-4所示。
The above is a preview of the first 20 pages. Register to read the complete e-book.