首页 > 编程知识 正文

内部控制整体框架阶段的目标不包括(开源自动化测试框架)

时间:2023-05-03 07:55:28 阅读:96978 作者:3989

Jqddm起源于奥菲寺

量子报道|微信官方账号QbitAI

在目标检测和目标识别领域,一把新的锤子正在到来。

无人车公司mndmf未来会生产,基于MXNet的原生API。为了性能好、速度快、使用方便,可以使用4张卡片,这正好创下了COCO单模型算法的新纪录。

mndmf首席科学家兴奋的赖斯也详细介绍了这一点:

为什么还要再造一次锤子?

实际上是我们在开始这个项目之前多次问自己的一个问题。

如果你注意的话,罗斯在制作RCNN和Fast RCNN的两三年里,每年都会参加ImageNet的比赛。其实一开始我很疑惑,为什么要这么做,尤其是基本的方法都很赤裸裸,不可能得到好的排名。

后来,当我有机会抓住明凯问这个问题时,明凯给了我答案,罗斯其实并不在乎这个排名。罗斯很关心借此机会向大家宣传他更好的锤子。

其实和很多人想的不一样,模特花里胡哨,好成绩是好工作的体现。

相反,它简单可靠。越多的论文愿意用这个方法作为基线,这个方法就会越经典。

其实对我自己来说,从读博士开始,我就愿意做这样的基线,这样的锤子。

当年,HOG LR超越了大部分论文的Tracking,参与了MXNet项目,然后用五行代码做了领域适配的AdaBN。

虽然他们受到了包括审稿人在内的许多人的质疑,但起初,时间证明了这些工作的价值。

今天,我们在目标检测和识别领域发现了同样的问题。虽然开源代码和框架很多,但目前还有很大的改进空间。

一方面,尽管现有的开源框架有各种各样的标题,但由于各种原因,再现真实SOTA的结果仍然不是一件容易的事情。

另一方面,一些性能好的开源代码(如SNIP、SNIPER)很难扩展和维护。因此,许多论文仍然在非常低的基线上进行改进,即使性能有所提高,也很难解释该方法的有效性。

我们设置了SimpleDet来为实例识别提供更好的基线和锤子。

如果问同学需要什么样的目标检测识别框架,相信性能好、速度快、好用的三个关键词就能覆盖99%的要求。让我们逐一展开,看看SimpleDet在这些方面的优势以及与其他开源框架的区别。

什么叫性能好?

在SimpleDet中,最值得关注的算法之一就是我们的TridentNet(不了解TridentNet的同学欢迎戳:王乃彦:TridentNet:一种应对目标检测中尺度变化的新思路)。

我们公布了每种设置下的模型和训练代码。这也是COCO单模型已知的最高算法。

除了干净的模型(testdev mAP=42.7),我们还为所有包提供了一个设置(testdev mAP=48.4),包括Sync BN、多尺度训练/测试、可变形conv和更柔和的NMS。

虽然这些都是很多论文和比赛中常见的技巧,但是直接正确的打开所有的方法还是很困难的。

我们在SimpleDet中提供了一套开箱即用的解决方案,希望降低重现SOTA的门槛,从而提升下一个全领域的基线水平。

此外,为了便于进一步开发,我们还提供了一些经典的模型和算法,如Mask(fast)RCNN、FPN、RetinaNet、CascadeRCNN等。

该算法的结果已经过验证,可以达到论文和现有开源代码的结果。后续我们会进一步补充一些经典重要的工作,欢迎大家积极贡献。

什么叫速度快?

首先,针对速度的问题,我们的一个独特之处就是FP16的训练。FP16不仅可以节省一半的视频内存,而且在支持TensorCore的最新Volta和Turing GPUs上,速度提升了一倍甚至更多。

如下图左图所示,可以从1080Ti的30img/s提升到75img/s,表现出非常显著的提升。其次,对于资源不同的学生,对速度的要求也不同。我们关注三个典型用户:

初级用户:这类用户由于实验室资源的限制,或者单纯因为个人兴趣,只能负担不到4个GPU。

对于这类用户来说,能够以尽可能多的资源再现结果是第一要务。核心问题是使用大batchsize和BN batchsize。

在此设置下,SimpleDet就地提供一个。

BN[1] (To be announced),结合上MXNet本身提供的memonger功能,再加上FP16,极限状态下训练的单卡batchsize可以达到8到16。

虽然损失了一定的速度,但是在两到四卡上就能达到正常八卡训练的batchsize。

俊秀的大炮:这类用户应该占据绝大多数,可以独占一台8卡机器进行训练。这类用户对于速度会有着更高的需求,可以在入门用户的基础上关掉memonger这种对速度有一些影响的组件,以得到更好的训练速度。

土豪用户:手里有多台8卡机器,希望充分利用机器快速迭代模型。针对这部分用户,依托于MXNet优秀的分布式设计以及阿里云更进一步优化的Perseus通信框架,如下右图所示,我们在4机32卡的情况下可以做到线性加速(没有资源进行更大的测试了,更强大的土豪可以赞助点机器)。

这对于打比赛或者对模型迭代速度有很高要求的应用来说,无疑是个福音。

我们希望每一类用户都能各取所需,在SimpleDet中找到最适合自己资源的setting,极大化产出。

什么叫做好用?

虽然每个用户心里都会有一个好用的定义(心疼产品经理1s…),除了前面的性能和速度之外,我们认为是否容易拓展和方便清晰调参也会是两个重要的因素。

我们针对一些常见需求,进行了高度模块化的设计,一个核心思想便是尽量抽象和隔离核心操作,使各种不同算法尽量复用,在这些核心操作之上拓展而无需修改。

例如,我们抽象出了一整套干净通用的配置系统,除了可以配置所有常见参数之外,还将常用的预处理和数据扩充操作也都抽象出来。

针对这些常见的变更,用户不需要修改核心代码即可完成调优。

再比如,修改一个detection算法可能会遇到最复杂的逻辑就是在于data loader和pre-process,但是往往一个欠佳的实现会导致loader的效率大幅度下降,从而成为整个训练中的瓶颈,使得GPU利用率降低。

在SimpleDet中,我们提取出了一个通用的多线程loader框架,并抽象出了在预处理中常见的操作。后续新算法的拓展可以很容易在这些通用工具的基础上同时保持简洁性和效率。

更多的设计欢迎大家直接阅读源码,我们也给出了一个简单的对Faster RCNN和TridentNet代码结构的分析供大家参考。

以上便是SimpleDet的一个简要介绍,欢迎大家积极试用,提出宝贵意见。也欢迎大家一起来捉bug,贡献新的算法和feature,共同把SimpleDet打造成一套目标检测与物体识别的前沿试验平台。

最后,例行保留项目。开源出来的项目只是我们在进行的Deep Learning项目中的冰山一角,Deep Learning也只是我们进行的无人驾驶卡车全技术栈中的一环,在mndmf有着大量有趣而又有挑战的项目有待开展。

想不想试试用自己的代码驱动一辆40吨的大卡车在高速上以80km/h的速度飞奔?

想不想试试用自己的代码控制一辆近20米长的卡车以5cm的精度停在吊车下呢?

欢!迎!加!入!图!森!未!来!常年招聘无人车算法工程师(包括实习生),覆盖感知、定位、地图、决策与控制全技术栈。

传送门

SimpleDet地址:

https://github.com/TuSimple/simpledet

TridentNet:处理目标检测中尺度变化新思路:

https://zhuanlan.zhihu.com/p/54334986

[1] Rota Bulò, Samuel, lcddxmg Porzi, and Peter Kontschieder. “In-place activated batchnorm for memory-optimized training of dnns.” Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018.

— 完 —

诚挚招聘

量子位正在招募编辑/记者,工作地点在北京中关村。期待有才气、有热情的同学加入我们!相关细节,请在量子位公众号(QbitAI)对话界面,回复“招聘”两个字。

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。