来自: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。这个软件库已经开发有一段时间了。」
Bochkovskiy 的评估
回到 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 作为模型名称的做法实在为计算机视觉社区所不齿。