1. 前言 目的检测算法是业界最为人所熟知的AI算法之一,检测到需求检测的物体,并给他画上框取得它的坐标位置,是大多数人对它的印象,在人脸辨认、游戏、安防、自动驾驶等范畴有着十分普遍的应用,相较于其他图像算法,其具有以下三个特性:
图一. 目的检测的普遍应用
图二. 行人检测算法模型复用
Yolo算法家族,具有庞大的分支和生动的社区,自Yolov1 2016年发布以来,整个系列曾经有着6年的历史,目的检测范畴没有任何比它资历更老且如此生动的开源算法了。系列最火的开源算法项目Yolov5在github上的珍藏数量曾经超越30k,要知道目前最为火热的AI模型框架Pytorch的官方仓库珍藏数量也才50k,学习和运用Pytorch的人中,每五个人就有三个人在运用Yolov5算法。 表一. Yolo家族系列 接下来我将以最具代表性的Yolo算法——Yolov5为例,来谈谈其作为一种标记性的开源算法的利与弊。 2. Yolov5:为何能脱颖而出 2.1. 简单易用效果好 2020年2月21日,“Yolo之父”Joseph Redmon在Twitter上发文表示“自己将退出视觉算法范畴”以抗议AI在军事和个人隐私范畴的运用。当时,Yolov3是速度最快的目的检测算法之一,同时还具有极高的精度。以当时另一个以速度见长的模型RetinaNet为例作比较,见下表二: 表二. Yolov3与RetinaNet对比 两个月后,Alexey Bochkovskiy宣布自己从Joseph Redmon的手上接过Yolo的接力棒,发布了Yolo系列的正统续作Yolov4,再过两个月之后,由商业公司ultralytics开发的Yolov5 1.0正式退场。两个模型在精度和速度上难分伯仲,但是之后v5项目一步登天,简直把一切Yolo项目都甩在了身后,缘由何在?
由于v4为Yolo正统续作,所以被集成在了原Yolov3的项目仓库中,所以运用了原Yolo系列的模型定义措施。在结构相似的状况下,在v4中定义一个算法模型,需求在yaml文件中定义1279行配置,无论是书写还是学习都十分省事,而v5则仅需求48行,之后v4第二作者尝试运用v5的措施来定义算法模型,只用了53行。 图三. Yolov4的配置文件(上图)与Yolov5的配置文件(下图) 其次,正统Yolo之所以高效速度快,C++ cuda编写是缘由之一,但是在Python+神经网络框架(Pytorch,TensorFlow等)做AI的大环境下,这又成了最大的入门门槛,但是往常运用Python+Pytorch编写的Yolov5精度和速度都与运用C++编写的Yolov4相似,且由于Pytorch的特性,能够兼容转换到各种不同设备上,以至在算法落地部署时,还能够转换成C++部署时,C++编写反而成了担负。
以3个类(红细胞、白细胞、血小板)的数据集BCCD(blood cell count and detection dataset,血细胞计数与检测数据集,共364张图片,4888个目的框)为例。 Yolov4在默许配置下完成锻炼,破费了1300次迭代,共计3.5小时,Yolov5在默许配置下完成锻炼,破费200次迭代,共计14.46分钟。 更短的锻炼时间,能够极大的进步工作效率,在有限的时间内带来更多的调试机遇,进步了调优的容错率,并且上述测试中锻炼的两个模型,精度差别还不大。(以上测试结果均来自Roboflow CEO Joseph Nelson)
Yolov4集成在Yolo系列的老仓库“darknet”上,而darknet项目包含了Yolov1-v4、Yolov7等78个不同的算法模型配置,这些模型的配置、用法以及项目的运转方式等等引见和阐明被紊乱的塞在了一个阐明文档里,而这个文档不算子链接,就有接近900行,且没有目录和跳转。 从Redmon手中接手Yolo的Alexey Bochkovskiy就职于Apple公司,但darknet项目自身对他来说仅是一个个人维护的项目,Apple并没有为他提供额外的维护支持,所以darknet项目在指引和项目维护上的紊乱也成了理所当然。 Yolov5出自商业公司ultralytics,也是该公司独一的产品,所以Yolov5项目的管理、文档、社区推行杂乱无章,且Yolov5有着严谨的版本管理和更新计划,截至目前,已发行至6.2版本。从1.0版本,项目就提供了简约的接口和明晰的新手指引,项目根目录下有特地的运用教学代码,上手难度极低。 2.2. 社群生动 Yolov5的正式发行1.0版本至今6.2版本,共发布了9个大版本。 最初1.0版本的项目官方贡献名单中仅有v4二作Chien-Yao Wang一人,一个月后(20年7月),在听取了社区反响后,v5官方修复了1.0早期版本的众多bug,重写了算法结构,为其长期更新打下基础,正式发布2.0版本。 一个月之后(20年8月),v5官方将由社区用户制造的v5细致运用教程作为正式的官方运用教程,兼并了七位社区用户提供的功用代码,加上他们自己升级的新算法,发布了3.0版本。 同年10月,3.1版本兼并了11个社分辨支;21年1月,4.0版本兼并7个社分辨支,适配了最新的pytorch,提供多种框架的部署计划;21年4月,5.0版本兼并4个分支,适配了亚马逊、Youtube、wandb等等工具或资源,提供了精度更高的算法模型;21年10月,6.0版本兼并465个社分辨支,修复了大量bug,添加了逾20个社区增强,22年2月和8月又分别更新了6.1和6.2版本,修复了271个bug。 v5的大部分功用性更新均来自于社区成员的提供,社区至今曾经有各种提问、bug提交、增强倡议等6700多条,曾经处置的有6500条,而v5官方也听取了这些倡议,对自己的项目做出了更新。正是如此,Yolov5社区成为了最生动的Yolo社区,也成为了最好用的目的检测算法。 3. Yolov5:“短效止疼药” Yolov5简单易用好上手,社群又十分生动,大家用了都说好! 好吗? 3.1. 更新但不兼容 自发布以来,Yolov5的版本发布距离实践上是越来越长的,由于项目前期的易用性并不高,后续社区为项目补足了这部分缺陷,但随着易用性的可更新内容越来越少,项目的版本更新必须有实践算法提升才行,而算法提升才是最艰难的,所以后续的更新会越来越慢。 而由前面一切版本的算法更新来看,每一次算法上的更新,都不会中止旧版本兼容,1.0的模型没措施在2.0上跑,4.0的不能在5.0跑。而4.0的基本依赖相较3.0又做了升级,6.0相较5.0以至改了大致框架,这意味着假如我们需求长期运用Yolov5来完成落地场景,那么我们便需求长期运用某一个固定的版原本工作,但假如运用固定版本的话,那生动的开源社区和频繁更新的功用这两样红利不就等于没有了吗? 为什么我们不自己在某个版本上中止代码的更新呢? 3.2. 模块耦合严重 Yolov5是一个开源项目,但是其背地是一家应用该项目赚钱的商业公司,所以其代码实践上是做了一部分防盗的,例如项目中大量运用了字母缩写,例如:num class被缩写为nc,num layer缩写为nl,module缩写为m,使部分代码阅读起来十分痛苦,且项目中很少有注释,大部分数学公式的代码完成需求自己去猜测和揣摩其用处。 Yolov5项目最严重的问题是其模块耦合严重,改动某一个模块的代码常常需求牵动多个模块和底层依赖的版本,这也让自行在某个版本上中止代码更新变得艰难重重。 3.3. 好用但不利于展开 Yolov5项目上手快,操作简单,能够快速将自己的资源转换为算法模型输出,处置了很大一部分团队AI才干有无的问题,但是最近一年来,国内多家商业公司也开端入局开源实时目的检测这一范畴,例如:旷世的YoloR,美团的Yolov7,百度的PP-Yolo-E等,单纯运用Yolov5在未来可能很难跟上行业的展开节拍,它只能是处置才干有无问题的“短效止痛药”。 应用开源项目,能够降低开发成本,但算法模型不同于软件开发,每天都有海量的idea被发布,受制于开源项目迟缓的更新迭代,很可能让自己失去算法模型升级的中心发明力,在市场竞争中掉队。所以不应被动地等候开源算法官方的算法提升更新,更应该主动出击,持续运营和升级自己的算法,突破开源算法的桎梏。 4. 自研目的检测框架YoloCy 剖析研讨了Yolov5,YoloX,Yolov4,mmdetection等知名开源项目的优缺陷,长扬科技推出了自研目的检测框架YoloCy。 4.1. 模块化设计 YoloCy模块化解耦了算法模型和算法模型锻炼过程中的一切中心模块,提供统一接口,能够快速自定义和修正恣意模块内容,降低单模块的研发门槛和学习成本。 图四. 模块化算法流程 4.2. 三方模型快速集成 借助于模块化设计的优势,运用YoloCy能够快速地集成第三方开源的算法模型,并且能够将第三方开源的权重转换成YoloCy中的权重。以Yolov7算法为例,破费了两小时,便完成了v7在YoloCy中的复现和权重转换。 目前YoloCy曾经集成了上文表1中的一切算法模型,在此基础上,衍生和优化了数个自研的算法模型。网络复现的成本降低,让工程师能够快速实验自己的优化计划,考证算法迭代的结果,提升算法优化的容错率和算法产出的工作效率。 4.3. 最新优化快速集成 模块化让模块内添加新的措施变得快捷高效,在大多数状况下,只需求调整开源组件的接口与YoloCy对齐即可,而另一部分需求重写或复现的组件也仅需求在接口固定的状况下,修正内部即可,无需思索会对其他模块的影响。这意味着,我们能够快速高效地复刻科研界最新的研讨成果,并在我们自己的数据和设备上实验,以快速迭代我们的产品,提升中心竞争力。 4.4. 部署兼容 在YoloCy框架下,即便原算法模型不支持,作为迁移进来的第三方模型依然能够快速运转在YoloCy框架下兼容的部分部署平台,例如TensorRT,ONNX,MindSpore,RKNN等,这省去了为新的算法模型适配第三方平台所需求的大量人力和时间成本。同样,在YoloCy框架下需求为一切的模型适配新平台的时分,也只需中止一次适配,即可完成对YoloCy框架下一切模型的适配,大大降低研发成本。 4.5. 锻炼优化 在YoloCy中,我们实验并优化了数据处置与增强流程,优化了锻炼的Loss函数配置,在保障模型结构相同的前提下,最终以一半的锻炼迭代次数,取得了超越原版模型的效果。这意味着,运用YoloCy锻炼模型能够使锻炼时长减半,且最终模型精度更高。 表三. YoloCy相较Yolov5精度上的进步 Yolo系列算法作为目的检测范畴的常青树,从16年蓬勃展开至今离不开全球一个又一个睿智的头脑,辅佐无数的团队完成了目的检测才干的从无到有。 “人见利而不见害,鱼见食而不见钩。”Yolo身为开源项目的任务是“降低才干的运用门槛的同时,尽量拔高项目的上限”,这也是大部分开源项目能够蓬勃展开的生存之道。但一个成熟的团队,常常想要更多自主把控的权益,外部要素对自己的影响越小,团队的产品输出就会越稳定。 所以,从0到1的突破,运用开源算法成本最低收益最高,值得引荐,但是1到正无量的展开,一定要采长补短,慢慢构成自己的东西,才是耐久之道。 参考资料: 1. Roboflow CEO 关于v4与v5的测试博客:https://blog.roboflow.com/yolov4-versus-yolov5/#comparing-yolov4-and-yolov5s-model-storage-size 2. Yolov3 Paper:https://arxiv.org/pdf/1804.02767.pdf 3. Yolov4 Paper:https://arxiv.org/pdf/2004.10934.pdf 4. v4一、二作与v5作者的讨论:https://github.com/ultralytics/yolov5/issues/6 5. Yolov5 仓库地址:https://github.com/ultralytics/yolov5 6. Darknet仓库地址:https://github.com/AlexeyAB/darknet |