DAV首页
数字音视工程网

微信公众号

数字音视工程网

手机DAV

null
null
null
卓华,
null
null
null
null
null
null
null

我的位置:

share

开源AI模型生产平台YMIR加速视觉模型开发与迭代 | 云天励飞未来工厂技术总监胡文泽主讲回顾

来源:云天励飞        编辑:VI菲    2022-06-07 11:17:45     加入收藏

5月25日,智东西公开课联合云天励飞策划的「开源AI模型生产平台YMIR公开课」顺利完结直播。公开课由YMIR核心开发成员、云天励飞未来工厂技术总监胡文泽主讲,主题为《开源AI模型生产平台YMIR加速视觉模型开发与迭代》。

  前言

  5月25日,智东西公开课联合云天励飞策划的「开源AI模型生产平台YMIR公开课」顺利完结直播。公开课由YMIR核心开发成员、云天励飞未来工厂技术总监胡文泽主讲,主题为《开源AI模型生产平台YMIR加速视觉模型开发与迭代》。

  胡文泽博士首先快速介绍了AI应用开发的背景,之后比较了AI模型开发与软件开发的不同,并重点解读了以数据为中心的开发方式。最后,他还深入讲解YMIR系统的设计理念和项目实践。

  本次公开课分为主讲和Q&A两个环节,以下则是主讲回顾:

  智东西公开课的各位同学晚上好,下面由我来做主题为《开源AI模型生产平台YMIR加速视觉模型开发与迭代》的直播讲解。我叫胡文泽,是这个项目的核心开发成员,同时也是云天励飞未来工厂部门的技术总监,负责部门的日常运作。

  正式开始之前,我再来做下简单的自我介绍,我是胡文泽,博士毕业于加州大学洛杉矶分校,在云天励飞主要负责未来工厂部门,做一些面向公司未来的项目。我早期曾经在公司参与做过一个门禁机的产品,当时同学们比较打趣,直接把我的照片放到了门禁机的 ID罩上,所以我可能不是公司见客户最多的人,但是是客户见过最多的公司的人。

  言归正传,下面来看下公开课的内容大纲。首先是背景介绍;然后会对AI模型开发与软件开发进行比较;之后引出 AI模型开发的两种具体开发模式,并通过几个例子来说明,以数据为中心的开发模式是一个更符合规模化模型开发的方法;之后会介绍YMIR训练系统,特别是它的设计理念和产品特点;最后用一个乐高检测的案例,系统的给大家展示怎样使用YMIR系统降低模型训练的门槛,并提高模型开发的效率。上述内容可以总结为以下5部分:

  1、背景介绍

  2、AI模型开发VS软件开发

  3、AI模型开发模式

  4、YMIR系统设计理念

  5、YMIR实践

  背景介绍

  随着深度学习技术的快速发展,大量的人工智能技术进入到了快速落地和普及的阶段。几年前,谈起人工智能或者计算机视觉,大家可能知道的都是最典型的应用,比如人脸识别。

  但是现在只以计算机视觉里的目标检测任务为例,都能列举出许多已经落地或正在尝试落地的应用,如上图所示。在精准农业方面,可以用目标检测技术来粗略的估计、识别并计算果树上的果子数量,从而对整个产量做大概的估计;在现代制造方面,可以用目标检测技术做装备关键零件的检查,确保整个装配质量是合格的;在商标检测方面,商标检测是一个非常成熟的技术,典型的应用像在互联网数据中检测商标的分布,能够为各个厂家在营销上提供一些基础数据;在路政巡检方面,路政巡检也是目前正在落地的一类项目,过去可能都是用人工巡查道路,检查道路里的病害,现在可以很智能、很方便的用公交车或出租车上搭载的摄像头检查道路的一些问题,自动对各种病害进行评估和排序,从而自动生成工单,大大节约了路政巡检的成本。除了上面提到的一些应用外,目标检测还可用在电网巡检、手术导航、车辆定损、污染检测等方面。

  总而言之,以计算机视觉技术为代表的AI技术,不再是花拳绣腿,而是能够在各个行业里开始应用,而且是规模化的应用。那自然而然带来了一个问题,如何能够规模化生产或开发这些模型?

  AI模型开发VS软件开发

  在思考这个问题是,我们很容易拿 AI模型开发行业与软件行业作比较。那我们先看看软件行业的变迁哈。如上图所示,左边是1998年的谷歌,在Susan(Susan Wojcicki, 现任YouTube的CEO)家的车库里的样子。随着软件产业发展到2019年,目前都是现代化、大型的、集团化的作业。从车库到软件集团,软件产业已经经历了一次产业化的革命。那AI作为一个即将要经历大规模产业化落地的行业,怎么能够完成革命,实现大规模生产?这是一个很现实和严肃的问题。类比于前面提到的1998年的谷歌,我们的现状就是那时的状况。

  上面提到AI模型开发可以与软件开发进行类比,但仔细分析一下,其实AI模型在广义上就是一个计算机软件。什么叫软件?从最基础的指令层面上看,软件是一系列特定顺序的计算机数据和指令,从而实现用户想要的一些计算,达到用户期望的功能。常规的软件通常是人工编写这些算法,通过一行一行的代码组织这些数据和指令,实现用户想要的功能。比如经常写的if-else语句等,用这样的控制语句来可以实现各种各样的算法。

  AI模型在执行时也是组织数据和指令,但是不是通过这些控制流或一句句语言实现的,更多的是通过参数和权重来实现数据和指令的组织。比如现在很热门的Transformer结构,一个位置的新特征是怎样计算的?并不是直接从某个位置把特征拷贝过来,而是根据上一次这个位置的Key和 Query相关性计算Attention Map,然后再按 Attention Map把不同位置的数据,按照不同的权重相加,才能得到一个新的Token。这是通过模型参数和实时计算完成数据的变化,从而实现指令和数据的组织。所以 ,AI模型的灵魂不在于一行行代码,因此你的模型是PyTorch实现的,还是TensorFlow实现的,还是其他方式实现的,并不重要。它的灵魂在于模型权重。

  如果AI模型也是一种软件,那能否照搬传统软件的开发经验开发AI模型呢?我们答案是可行也不可行。虽然两者有相似性,但还是有很多的不同点。

  下面简单看下传统软件的开发。如上图所示,传统软件开发流程可以总结为左边的四步:首先产品经理做一个需求分析、需求说明;然后软件架构师做问题的分解,把大的系统分解成各个模块,即分层解耦,模块式实现。模块化、中台等概念都是在分层解耦过程中出现的。这些模块有些可以直接复用以前的,即使不能复用,也能够把多个模块分给多个团队并行开发,从而实现大规模开发,提高效率。这种开发性质导致了上图右边的系统架构图的样式。中间这幅图是YMIR开源系统的架构,右边是Linux kernel diagram的架构,可以看到一块一块的框图。

  再看 AI模型开发,从流程上就有一些不同。不同点有哪些呢?首先,在做完需求分析之后,AI模型开发有一个很重要的点,是收集大量的数据和标注,进而严格定义这个问题到底是什么,期望的输入是什么,期望的输出是什么,不再是传统意义上需求分析文档或产品设计文档里的几句自然语言。

  其次,架构师做问题分解和模块化实现部分也变了,因为我们发现很多深度学习模型是端到端的解决问题,而不再是按分层解耦的方式解决问题。而且通过端到端用数值优化方法解决这个问题,往往比过去模块化方法实现这些问题的效果要更好。所以现在的工作变成了模型结构的选型。还是以目标检测问题为例,变成了选用FasterRCNN还是YOLO作为整体模型结构解决这个问题,而不再是怎么把问题分解成特征提取、特征变换、特征组合等小模块。

  最后,在模型训练部分,目前我们大部分工作时间都花在模型训练上,调了一些参数,即俗称炼丹。大量在职的算法工程师在学校学习时,或者在各个机构培训时,也是类似的情况。在学习AI开发时,通常发现数据集已经有了,而我们只学习了这些网络模型以及怎样调权重,精力也都花在调超参数上。这带来的影响就是在实际工作当中,平常是怎么学的,实际工作中也怎么干,大量时间投入到了调超参和尝试新的网络结构,去或跟踪最新的论文这事儿上。

  AI模型开发的模式

  在外人看来,这项工作还很有价值。因为这项工作是在码代码,类似于软件工程师,也是在每天码代码。这种开发模式叫做以模型为中心的开发模式,是由于行业演变、客观现实构成的一个模式。但实际上会发现,也是今天要提出的一个重点,即如果时间和精力都放在了数据的定义和高质量数据上,往往能够得到更好的模型开发效率。

  下面用两个例子来论证,以数据为中心的模型开发效率远高于以模型为中心的开发效率。第一个例子是一个虚拟实验,如上图左下角所示,橙色条框是2021年6月发表的一篇论文。该论文提出了一种新的方法,在COCO数据集不同的数据量情况下,检测精度比2020年10月蓝色条框的方法效果要好。如果看具体的数据,AP50 基本提升了0.4~6个点不等。橙色条框论文当时的效果是 state of the art。这两篇论文都是由国际上非常知名的研究机构提出,即大量的一流工程师和研究人员花了8个月的时间,模型的精度才提升了0.4~6个点不等。

  同时拿这个数据表去做另外一组实验。如上图下半部分所示,如果从横轴看,不改变方法,而是改变数据量,想办法在一个实际项目中增加训练数据,可以看到从左向右每增加一次数据,精度都提升10个点以上。而很多项目里增加的这些数据,并不需要花八个月,也不需要国际一流的研究人员或者研究环境,反而效率比研发新方法要高。

  无独有偶,不光是我们发现了这个问题。如上图所示的表格中,是吴恩达老师在一次讲座里提到他们做的一些实际项目,比如 Steel defect detection,即铁板卷的缺陷检测,发现用一个比较标准的方法和超参数,能够训练出76.2%的精度。然后,他找同学花两周时间想办法改进算法,结果并没有得到实质性的性能提升,但让另一个同学花两周时间从数据上想办法,会发现精度一下提升了16.9,这是非常显著的提升。他不只做了这一类实验,包括太阳能电池板和或其他表面缺陷检测的问题,都发现了这个情况,即想办法调参数、改模型得到的收益,远远低于想办法改数据并提高数据质量得到的效益。也就是后者的收益远大于前者,而且更快。通过这个例子可以看到,在实际的模型开发中,这种做法是更有效的手段。

  过去大多数的软件工程师 、算法工程师都是以模型为中心,死磕各种参数。但是在实际项目开发当中,我们倡导应该积极向以数据为中心的开发模式转变。这也引出了今天要介绍的YMIR平台。为什么要做这个平台,就是想快速地实现以数据为中心的模型开发方式。

  我们把相关的想法和以前的同事、朋友讨论之后,发现大家不谋而合。随后我们把这个系统的想法以及设计理念写成一篇论文,并发表在NeurIPS Data Centric AI Workshop上。同时,我们也把这个平台开发出来,并进行开源,目标是让有类似想法的同事和朋友能够有一个共同的平台做开发,不需要再重复造轮子。

  YMIR系统设计理念

  YMIR本身是一个模型训练平台。相信很多朋友和同学应该已经见过很多种模型训练平台。我总结了现有大多数模型训练平台的特点,基本上是导入数据,然后做数据标注、模型训练,然后最多会再做模型部署,并把它放到云里。但是,实际上,如果大家在企业里真真正正做模型开发应该都知道,至少我工作的时间里,还没有见到任何一个项目里的模型是这么简单的,即训练一次就结束了,实际上都要经过大量的迭代。这也引出了YMIR平台的一个特点,即我们是以数据迭代为中心的思想快速做模型的迭代。这里还加入了数据挖掘的技术,在大量的未标注的数据集中快速寻找有价值的、但未标注的数据,并把这些数据进行标注,然后加入训练集,进而快速提升模型的精度。

  这套方式其实并不是我们发明的,在学术界叫做主动学习,相信有不少同学都听说过。这种主动学习的技术,指的是通过数据挖掘提升有效数据量,随之提升模型的精度,我们把这个系统真真正正实现了。以前也见过、讨论过很多次做主动学习的系统,但这次是真真正正把它做出来,对我们来说是一个很鼓舞很兴奋的事情。

  除了做数据挖掘和快速模型迭代的特点之外,YMIR平台还有什么特点?YMIR平台能够适应规模化开发,在设计时就把规模化开发放在脑子里,并支持多个模型或多个项目,在同一个数据集上进行并行开发,最终将这些数据都沉淀在同一个平台里。大家可以互相、便捷的使用其他项目里的一些数据和标注,甚至一些模型来帮助你的项目开发。就像代码开发里的 Git一样,使得我们的数据和模型都能够沉淀到YMIR平台里,把传统所说的数据资源真真正正变成立等可取的、高价值的数据资产。

  同时,为了进一步降低YMIR平台的使用门槛,我们把各个模型开发的各个步骤抽象成一些标准的操作,形成了一个标准的流程。大家不需要懂什么叫主动学习,什么叫数据挖掘,只需要按照我们的界面指导来串流程,跟着流程就能够把模型开发出来。

  YMIR实践

  前面讲解了以数据为中心的模型开发,以及YMIR系统的特点。下面给大家演示下YMIR系统是怎么工作的。

  上图右边放了一张图,有一大堆乐高。大家在做乐高时,会发现拼装并不是最难的,或者拼装是很有意思的,但最麻烦的是在一大堆乐高零件里,找到说明书上下一步拼装的零件在哪。周末我就遇到了这个头疼的问题,想到能否用YMIR系统做一个乐高零件的检测的模型。所以,按照刚才讲的AI开发流程,做了一个模型开发作为今天的例子。

  首先是系统安装。YMIR系统安装很简单,只需要到YMIR的Github地址“https://github.com/IndustryEssentials/ymir”,点“安装”按钮,就能够跳到安装的指导。安装YMIR系统只需要有一台带GPU的电脑,安装一些必须的Docker,比如Docker和Docker-Compose以及NVIDIA DockerDriver。然后克隆我们的代码,基本上就可以一步启动了,即“bashymir.sh start”。之后会提供一系列的指导,让你做一些必要的设置,比如初始账户管理员、初始账户等,很快就可以安装成功。

  由于这台电脑是苹果M1芯片的,目前还没来得及集成支持M1芯片GPU的PyTorch,就不演示具体的步骤这一步,我们后面假设系统已经安装成功。下面要根据数据来定义这个问题,可能有这个痛点或者有这个想法的不止我一个人,网上有一个公开的数据集,有一系列图像,大概是由13种乐高的零件图片组成。我简单把它分成训练集、测试集和挖掘集。训练集放了100张图像。由于想快速的做演示,测试集只放了10张图像。这两个都是已经标注好的图像,如上图右边所示。挖掘集放了1181张。挖掘集,通常是未标注的数据,为了演示节约时间,提前也已经把它们标注好了。

  有了这些数据集,可以开始工作了,下面演示具体的过程。安装好YMIR系统之后,安装界面会提示你把前端放在哪个端口,通过浏览器上打开 IP地址和端口就能进入这个界面,可能会有用户注册的流程,我就不再演示用户注册了。

  注册完之后就可以登录,之后进入到我们的界面。进入界面后,除了一个主页,还有一个项目管理、标签管理和系统配置。标签管理和系统配置,后边会再详细介绍。在“主页”这个界面,不仅可以看到我们已经做过或要做的项目,还可以看到一个公共数据集,即大家在YMIR平台上能够共享的数据集。以及作为个人开发的一些模型与活跃度统计,这与GithubContribution Activity墙类似。

  进入到这个界面后,如果想做一个模型,可以创建一个项目,比如名字叫“lego_detection_demo”,那要训练哪些类别呢?如上图所示,数据集的类别并没有写名字,直接用编号来代替这些类别的名字,来对数据进行标注,在“训练类别”里直接输要检测类别“0、1、2、3......13”,然后可以创建项目。有了这个项目,就像打开了文件夹一样,接下来可以开始导入数据。

  我们可以先给要导入的数据起一个名称,比如“lego_training set”。导入数据有好多种方式:一种是公共数据集。在首页里的右上部分,可以直接把数据集拷贝到自己的文件夹里,或者是复制已经导入的数据集;还支持网络的远程导入以及本地导入。这里选择本地导入,导入的数据集有一定的格式要求,采用的是Pascal Voc格式,是一个比较通用的格式,然后点击数据上传。

  上传完毕之后,点击“导入”,系统会自动新建了一个lego_training数据集。这时再导入另外一个测试集,步骤与上面的类似。导完数据集之后,可以看到数据集的大小,以及数据集里有什么标签,什么时候导入。数据集右边的显示是可以对数据集做各种操作,点击“训练”就可以做模型训练了。

  YMIR系统会自动把训练集指定为刚才所点“训练”那一行的数据集,即lego_training,然后会用real_test,即10张的测试集做测试。你会发现选定lego_training数据集之后,会把样本的比例做一个简单的展示。这也是YMIR友好性的体现,会帮你自动展示数据集样本的分布情况。如果发现标签分布非常不均衡,通常是会出问题的,这也是模型训练一个常见的问题,即inbalance dataset的问题。如果发现数据分布不均衡,尽量调整你的数据集,使得各个标签的数量能够在同一个数量级范围内。之后我们要训练哪些目标,在项目设置里已经设置过了,系统会自动的填上。

  随后我们会选择用哪个算法进行训练,这里选择Yolov4。后面会再介绍下如果有新的模型,或新的方法该怎么办。然后要选用几个GPU,当前我们有7个GPU,选择其中的1个GPU,然后点击训练。对于一些比较高级的用户,也可以调一些对应的参数,这里不再赘述这些参数了。点“训练”之后,模型训练就开始了,可以看到数据集自动的跳到模型训练tag里,显示模型训练已经开始了。

  在模型训练同时,YMIR系统还有一些比较友善的功能。比如每个数据集,都支持点开这个数据集的详情页,可以看到数据集的名字、图片数量、来源、创建时间等各种信息,同时还可以查看每一张数据以及它的标注。如果遇到的数据集样本标签比较多,还可以一键关闭所有的标签,然后逐个去看它的标签,并展示它的标签和标注。不知道大家是否遇到过处理大数据集的情况,我并不想每一张数据都去看标签,那可以怎么办?我们有一个“随机图像”的按钮,可以随机的在数据集里抽样,去看有哪些这些图像以及标注。我也建议在真正训练一个模型之前,要认真观察你的数据集,确保没有太明显的问题。

  在训练过程中,还可以观察模型的一些基础的训练状态。YMIR系统引入了TensorBoard来观察各种模型内部的各种Graphmatrix。由于模型训练时间比较长,这个模型正常训练一般需要七、八个小时,就不再具体展示模型的训练过程。

  这里以一个用一个已经训练好的模型为例。模型训练完之后,“精度均值(mAP)”界面会显示它的精度是90.12。对于最普通的问题,如果mAP是90.12应该已经很高。由于虽然乐高检测是一个相对比较简单的问题,但因为要检测目标都是刚体,不变性主要存在于视角上。对于这类问题,“90.12”并不是一个满意的结果,那该怎么办呢?这就进入到YMIR系统非常关键的一个环节,通过模型迭代挖掘有意义的数据,然后训练新的模型实现更好的效果。这就用到了首页上面的面板,开始用以数据为中心的方式开发模型。

  先按“迭代数据准备”按钮,将测试集以及要挖掘的数据集给指定好,训练集是已经指定好的。在挖掘策略部分,对于超大规模的数据集,像云天励飞内部有时可能会用到百万级或千万级的数据集,建议用分块挖掘,一般情况下,建议用去重挖掘。把基本的设置完成之后,还有要准备一个初始迭代模型,就是刚才训练的模型。初始迭代模型确定之后,你会发现“开始迭代”按钮变蓝了,这意味着前续条件都满足,可以点击“开始迭代”。在这个过程中,会发现把迭代流程都清晰的展示了出来,大家可以按照这个流程做模型开发。

  接着准备挖掘数据集,挖掘数据集要用到是原始的1181张图片的数据集。如果大家有更复杂的条件,可以在这个界面做数据合并、数据排除、数据随机采样等操作,这些操作留给了大家很高的自由度。这个过程主要是在做模型挖掘集的复制,挖掘集并不是严格复制,是一个虚拟的point-level复制。

  设置完之后,点下一步就可以开始做数据挖掘。点“数据挖掘”按钮,会发现根据项目的设置,挖掘集以及用来挖掘的模型都已经填好,你需要选择挖掘镜像,选择想挖掘多少张数据,这里示例例如挖掘20张样本。在“是否产生新标注”部分,如挖掘的数据是已经标注过的,可以选择“否”;如果是没有标注过的,还可以利用挖掘模型对数据产生预标注,从而提高后面标注的效率。在“GPU个数”部分选“1”,即用1个GPU,然后点击“挖掘”按钮,几分钟之后就能挖掘完成。

  挖掘完成之后,会显示出“下一步”的按钮,表示这时可以看具体挖掘了哪些数据。如果对挖掘的这些数据满意,可以点击“下一步”;如果对这些数据不满意,还可以重新挖掘并更改其他参数。我们默认是“下一步”,并把这些数据送去标注。点击“数据标注”,会自动的标注刚才挖掘的20张数据,标注人员部分选择自己,例如填写“tony.mir@gmail.com”,标注目标是上面提到的14类:“0、1、2......13”。在是否保留原标注部分,选择“是”,然后点击“标注”,系统会生成一个标注的任务送给标注分系统。

  这里提一下,因为YMIR的核心功能在于数据和模型训练,所以还会有另外一个系统叫LabelFree。这里是把标注任务送到LabelFree这个新系统中,可以看到新系统又增加了一个新任务,就是刚才要标注乐高图片的任务,点击“标注”按钮就可以开始标注。

  在标注的操作过程中,需要画下乐高零件的目标框就可以开始标注了。每一张标注完成之后点“提交”,然后标注下一张。标注完成之后,会提示标注完毕,标注进度变成了100%,然后再回到YMIR系统里。隔一段时间YMIR会去LabelFree系统查询,看这个任务标注的进度情况如何。如果标注完成,会把结果拿回来,也可以在“数据集”里,看得到标注结果。如果对标注结果满意,可以点击“下一步”;如果不满意,可以打回重标,点击“重新标注”,给LabelFree系统再发一个标注任务。

  如果满意标注的数据,点击“下一步”更新训练集。这步主要是把标注完的数据和最早的训练数据做合并,即最开始训练数据集只有100张图片,现在又挖掘并标注了20张图片,形成120张图片的数据集。对于这个流程,之所以留给大家手动的按钮,是希望大家如果有时想用它来做一些特殊操作,比如可能要再引入一些数据,或者再排除一些数据等,都可以在这部分实现。

  数据合成完成之后,点击“下一步”进入模型训练的步骤。在模型训练部分用到的是上面合并的120张图片的数据集。其他内容还是像上面提到的训练界面一样,会自动展示这个数据集的标签分布,然后选择训练镜像,同时还可以选择初始的预训练模型,这个模型可以用系统内部你已经训练出来的模型,作为一个初始点做下一个模型训练。与上面讲过的类似,在“GPU个数”部分选“1”,即选一个GPU,然后点击“训练”,等待训练完成。

  训练完成之后,这时可以看到模型页面,已经显示出训练出来的模型。由于这个项目的测试集只有10张,训练精度会有一些随机误差,第一个模型训练出来时mAP是87%,第二个模型训练出来后mAP是90%,比第一个模型还是有提升的。这也表明通过添加挖掘数据,能够得到模型精度的提升。那多加点数据能否取得更好的效果呢?

  点击“下一步”,表示这一轮迭代就结束了,可以开启下一轮迭代。在开始下一轮迭代之前还有一个列表。这个列表让大家能够看到每次迭代的整体情况,例如第一次迭代模型的一些关键结果和步骤已经展示出来了。

  本次迭代完成之后,可以点击“开启下一次迭代”。从这步已经开始进入到了一个无限循环的状态,即你想循环多少次,就可以循环多少次的模型迭代。这里面的具体步骤和上面提到的类似,在准备挖掘数据部分,用的还是刚才的数据,但会自动选择排除已经挖掘的数据,然后点击“确定”,经过数据挖掘、数据标注、更新训练集、模型训练等步骤,再去迭代。

  迭代了几次之后,会产生几个模型,同时模型通过不断添加数据,精度也在不停的提升,这些可以在模型列表里有一个很好的体现。我一共做了4次迭代,挖掘数据集的图像数量在不停减少,每次数据挖掘完成之后都会减少20张数据,并把它添加到了训练集里。在训练集数量部分可以看到,训练集的数量从120到140再到160、180,每次都在增加训练集的数据,与之相对应的是模型精度也在不断增加,从刚开始的90.94,第二次迭代到了95.88,然后是96.41、 96.6。同时YMIR系统产品和UI非常友好,类似于炒股,可以看到每次迭代后精度增长的趋势提示。通过这个过程,大家可以看到通过不停的挖掘数据、添加数据,能够快速提升模型的精度。

  训练完模型之后,还想知道模型的性能究竟如何,YMIR系统还有一个模型验证的功能。点击选择最终训练完成后对应的模型镜像,然后可以上传一些乐高的图片,来看看最终的检测结果。我提前准备选择了一张真实拍摄的图片,并选择一个合适的阈值,点击“模型验证”,这时系统在启动另外Docker,同时把模型加载进来,对这个图像进行计算,最后把结果显示出来。结果显示出来了之后,检测结果还是比较准确的。

  与上图正确的数据标注做对比,可以看到模型显示的预测结果是4号的Lego,置信度是99.31,上图显示4号是一个1x1Brick,正确 ;还有一个3号,是置信度是98.23,上图显示3号是一个1x2 Brick,也没有问题 ;印象中比较容易犯错的应该是5号,是一个2x2 Plate ,显示置信度是86.77,5号是一个白色的Plate ,是一个薄片,比较容易和一个2x2 Brick 相混淆, Brick 和Plate 比较容易混淆,特别是背面时,虽然结果预测5号是 Plate ,但是它究竟是Plate 还是 Brick ,还需要实际去验证。或者也可以看它的 detection的score,相比起其他的乐高零件都是90+以上的分数,5号的分数相对低一些,也说明5号确实是一个比较容易混淆的类,其他的零件我相信也大概率没有太多问题。到此模型训练就完成了。模型训练完成之后,可以就把模型下载下来,真正放到项目中应用。到此为止,已经讲解完整个YMIR系统的一些主要的功能。

  下面再介绍下另外的配置和管理功能。在完成这些任务之前,要让YMIR系统知道你要训练哪些目标,这里有一个标签空间的维护和管理页面。目前对于我们使用数据集的0~13标签我已经打好了,也可以选择手动添加标签或批量的添加标签,以及在上面讲到的项目设置时,“训练类别”部分也可以手动的添加标签,比方写一个“new Label”,然后回车,它会提示这个标签在标签管理页没有添加,是否添加。选择“添加”,之后在标签管理界面可以看到新的标签,大家用时可能要注意下。

  另外系统配置部分有一个镜像列表。本次的乐高检测用到的是Yolov4算法,这是在YMIR里一个默认的镜像算法。那可否不用Yolov4,用一些其他更好的算法呢。?可以手动的添加镜像,但这个镜像并不是随意添加的,需要满足一些规则,选要满足并开发好适配YMIR的接口镜像,之后通过Docker hub把镜像拉回来。大家想用的镜像,包括今天用的Yolov4都可以在Docker hub中找到。

  如果是自己开发的项目、镜像,想给大家用,也可以告诉我们,我们可以帮你添加到Docker hub中;如果只想自己用,可以直接把镜像的地址,填到创建镜像的“镜像”选项中,填一些必要的描述,就可以把镜像拉回来,拉回来之后就可以用你自己的算法做模型开发。但系统配置这一页应该只有管理员能用,一般第一个用户默认是管理员,其他用户可以通过第一个用户添加作为管理员。

  以上是YMIR系统乐高检测案例的全部内容。

  添加挖米匠微信,可获取直播回放链接,并加入YMIR交流群。

免责声明:本文来源于云天励飞,本文仅代表作者个人观点,本站不作任何保证和承诺,若有任何疑问,请与本文作者联系或有侵权行为联系本站删除。
扫一扫关注数字音视工程网公众号

相关阅读related

赛普,

评论comment

 
验证码:
您还能输入500