YOLOv4 发布不到 2 个月,一个名叫 YOLOv5 的目标检测框架横空出世,但它真的够格继承 YOLO 之名并沿用社区公认的版本号吗?工程师 Ritesh Kanjee 近日在 Medium 上通过事实与社区观点对此给出了否定答案,并批评了这种「欺世盗名」的行为。
2020 年 4 月 23 日,YOLOv4 发布……2020 年 6 月 10 日,YOLOv5 又来了……是不是超厉害?这不正表明我们的研究和科技发展速度超快吗?毕竟这个广受欢迎的目标检测框架的新一代 v4 版本刚发布不久,下一代 v5 版本就横空出世了。YOLOv5 真的这么厉害以至于自成一代?还是说仅仅是个噱头?本文将尽可能客观地研究其中一些相关证据,看看 YOLOv5 究竟是否名副其实?来自:https://github.com/ultralytics/yolov5好的,说回 YOLOv5。Ultralytics 的创始人兼 CEO Glenn Jocher 在 GitHub 上发布了 YOLOv5 的一个开源实现。据 Ultralytics 的 GitHub 页面称,这是当前所有已知 YOLO 实现中的当前最佳(SOTA)。项目地址:https://github.com/ultralytics/yolov5他们公布的结果表明,YOLOv5 的表现要优于谷歌开源的目标检测框架 EfficientDet,但本文作者 Ritesh Kanjee 却发现了一件怪事:尽管 YOLOv5 的开发者没有明确地将其与 YOLOv4 进行比较,但他们却声称 YOLOv5 能在 Tesla P100 上实现 140 FPS 的快速检测;相较而言,YOLOv4 的基准结果是在 50 FPS 速度下得到的,参阅:https://blog.roboflow.ai/yolov5-is-hereState-of-the-Art来自:https://blog.roboflow.ai/yolov5-is-here/不仅如此,他们还提到「YOLOv5 的大小仅有 27 MB。」对比一下:使用 darknet 架构的 YOLOv4 有 244 MB。这说明 YOLOv5 实在特别小,比 YOLOv4 小近 90%。这也太疯狂了!而在准确度指标上,「YOLOv5 与 YOLOv4 相当」。因此总结起来,YOLOv5 宣称自己速度非常快,有非常轻量级的模型大小,同时在准确度方面又与 YOLOv4 基准相当。类比想想,如果 PlayStation 或 Xbox 发布了一款新的游戏机,它和之前的游戏机的图形性能一样,但载入时间更快且体型更小,这能算得上是新一代游戏机吗?最多只能算是当前一代游戏机的轻量级版本吧,比如 PS4 Slim 或 Xbox One S?你能否宣称一种已开源的技术是自己的,甚至你都不算是最初的创建者?这肯定很有争议。使用同样的框架然后进行一些修改,这是否能让你有权使用这个品牌并写入自己的版本号?YOLO v5 就是这个情况。这大概取决于该框架的原始创建者。你可能听说了,YOLO 的原始创建者 Joseph Redmon 已在 2020 年 2 月宣布退出计算机视觉研究领域,因为他认为自己的智力成果 YOLO 造成了一些不好的社会影响。他表示:「我热爱自己的作品,但我已经无法忽视它在军事领域的应用以及给个人隐私带来的风险。」Redmon 曾与 Ali Faradi 合作为 YOLO 迭代了三代版本。不久之后的 2020 年 4 月,YOLOv4 问世,但没有任何原始作者参与其中,开发团队变成了 Bochkovskiy et. al.。这篇论文得到了发表并经过了同行评议,其 GitHub 代码上传到了 AlexeyAB/darknet 代码库,一切看起来都还不错,而且其所带来的技术升级也很棒,得到了计算机视觉社区的接受和认可。这是否就意味着如果 Bochkovskiy et. al. 可以这样操作,那么其他任何人都可以在 YOLO 框架的基础上进行一些改进,然后就宣称新增一代版本吗?这正是实际所发生的事情。Ultralytics 的创始人兼 CEO Glenn Jocher 像投掷炸弹一样放出了 YOLOv5。所以你肯定会有疑问:这个 YOLOv5 够不够格?还是说是个噱头甚至骗局?先不着急说结论,我们来分析一下事实证据。首先说明一点:在本文写就之时,Ultralytics 尚未发布经过同行评议的 YOLOv5 论文。这已经说明了一点:他们没有节操。是的,写论文确实需要时间,而且毕竟 Ultralytics 是一家企业嘛,又不是研究机构。但是,如果论文都还没发出来,我们能信任这个实现吗?Bochkovskiy et. al. 在发布 YOLOv4 时就不是只有亮眼的结果,还一并发表了论文。其次,为了确定 YOLOv5 是否够格,我们来看看相关社区对这个所谓的「下一代」模型的反应,包括他们的分析和评估。我们去谷歌搜一下 YOLOv5 的相关问题,然后找到 Kaggle 等信息来源。来自:https://www.kaggle.com/c/global-wheat-detection/discussion/158371我们可以看到一条来自用户 Mr. Hurtik 的评论:「YOLOv5 其实就是 YOLOv3 换了个名字。图表看起来是不错,但会误导人。」然后他提供了一个指向 YOLOv4 的作者 AlexeyAB 的代码库的链接:GitHub.com/AlexeyAB/darknet/issue/5920。在这个 GitHub 页面中(现已关闭),有两个宣称 YOLOv5 已经问世的链接。这两个链接分别指向 Ultralytics YOLOv5 代码库和前面提到过的 Roboflow 博客。然后还有另一个链接是 Y-Combinator 上对以上两个信息源的讨论:https://news.ycombinator.com/item?id=23478151读一读里面的社区讨论,可以看到很多人都对 YOLOv5 持怀疑态度,甚至还有直斥其为「bullshit」的言论。人们说 YOLOv5 根本没有与 YOLOv4 进行同等条件下的对比研究,换句话说想更新换代却连基本的比较都没做。用户 Anthiras 表示不相信 Roboflow 的 YOLOv5 文章,因为小 90% 的模型却能提供相近的准确度,这不怎么可能。而 YOLOv5 代码库本身又表现出了与 YOLOv4 相当的性能。Joshvm 猜测说:「我认为 YOLOv5 没有给出有信息的说明。但顺便说一句,如果你之前看过那些问题,你就知道 AlexeyAB 的分叉基本上已经解决这些问题了,因此会有版本冲突。Ultralytics 可能原本打算将其命名为 YOLOv4。这个软件库已经开发有一段时间了。」回到 AlexeyAB 的 GitHub 讨论,可以看到 Alexey 的评论说 roboflow.ai 博客的比较结果是无效的。他继续解释说延迟不应该以 32 的批大小来测量,而是应该使用等于 1 的批大小。因此,延迟是一个完整的数据处理循环的时间,不能少于处理整个数据批的时间,根据批大小的不同,其用时可能高达 1 秒。批大小越大,延迟越高。在宣称 YOLOv5 很小(27MB)方面,Alexey 继续进行了驳斥:他们比较的是在 Microsoft COCO 上 26–36% AP 的准确度非常低的 Ultralytics 版小 YOLOv5 (27 MB)与在 Microsoft COCO 上 41-43% AP 的准确度非常高的大 YOLOv4(245MB)。在速度方面,YOLOv5 宣称能达到 140 FPS。Alexey 同样说:「他们比较的是非常小且准确度低很多的 ultralytics-YOLOv5 与非常准确且较大的 YOLOv4 的速度。他们没有提供比较的大部分关键细节:到底使用了 YOLOv5 的哪个版本:s\l\x?使用了怎样的训练和测试方案?YOLOv4 与 ultralytics-YOLOv5 使用了多大的测试批大小?他们没有使用同等设置在广受认可的 Microsoft COCO 数据集上进行测试,他们也没有在 Microsoft COCO CodaLab 评估服务器上测试,这样可以减少人为操纵实验结果的可能性。」因此,可以看出来 Ultralytics 这个所谓的 YOLOv5 实现看起来并不好。但看问题要全面,不能只说一方的看法。我们再看看 Ultralytics 的 Glenn Jocher 以及 Roboflow.ai 的人是怎么说的。现在我们已经听到了社区的斥责声,你可能会想 YOLOv5 确实可疑,不值得信任…… 但也不要着急就下结论。在那之前我们先看看被告的反驳证词。Ultralytics 的 Glenn Jocher 写了一篇短文回应有关 YOLOv5 的发布和命名问题:https://github.com/ultralytics/yolov5/issues/2。他回应的核心是他们是打算写一篇论文来展示他们的结果和训练方法,但他们的资源非常有限,而且需要保持收支平衡才能保证业务稳定。确实如此,这段时间很艰难,某些公司也只能推出 beta 版产品…… 呃,就当这是真的吧。他继续谈到了他们的模型,说 YOLOv5 实现并不是静态不变的,现在也并没有完全完成。发布未完成的模型其实没啥,但是他们却宣称 YOLOv5 比 YOLOv4 更好。这是不应该的,他应该说清楚这个项目仍在开发之中,而且不仅要在代码库的文本中说清(这个他们说了),而且也要在比较、评估和代码等地方说清楚。而且他们也不应该在 YOLOv 后面加个 5,这很容易让人混淆,因为这意味着这比其前代版本更好。命名惯例的保持和遵守其实是非常以及极其重要的。Glenn 说 YOLOv5 是这项工作的内部命名代号,而且这里所使用的名字对他们而言是无关紧要的…… 呃,使用 YOLOv5 作为内部命名其实没啥。毕竟是内部,你想怎样命名都可以,Project XYZ、YOLO、KOLO、POLO、ZOLO…… 随便选。但你在发布项目的时候,命名就不能随心所欲了。它应该直观易懂,应该符合实际,不应该靠加个 v5 来欺骗诱导人们相信你是当前 YOLO 模型的 SOTA。至于 RoboFlow,尽管没必要批评他们推广 YOLOv5 的事情,但他们居然相信这是真的,还是太天真了点。建议他们下次评估模型时尽职一点,要用适当的方式来对比模型。那以后他们已在博客上发布一篇文章《对 YOLOv5 相关争议的回应》:https://blog.roboflow.ai/yolov4-versus-yolov5。这篇文章很长,他们在文中承认了自己的错误并重新对 YOLOv4 和 YOLOv5 进行全面深入的比较,其结果已在前文讨论过。另外他们其实也该撤掉那篇推广 YOLOv5 的文章《YOLOv5 来了:140 FPS 的当前最佳目标检测器》,至少也该换个标题,说清 Ultralytics 这个模型实现的真实情况。基于以上事实,我们知道 YOLOv4 仍旧是 YOLO 进化之路上的 SOTA。尽管可以基于他人的研究成果进一步开发(当然在合理许可下),但使用 YOLOv5 作为模型名称的做法实在为计算机视觉社区所不齿。YOLOv5 比 YOLOv4 差,而且并不是官方的。——来自 Karol Majek
原文链接:https://medium.com/swlh/yolov5-controversy-is-yolov5-real-20e048bebb08