项目开发流程简述怎么写(项目的开发流程概述分享)

1、数据处理-AI的粮食加工

人工智能项目研发的首要阶段就是数据处理,既然是数据处理,那么需要有数据才能处理。数据作为人工智能项目的首要材料之一,是不可或缺的,怎么获得良好的数据,是处理好数据的第一步,没有质量保证的数据,无论如何处理,也很难达到数据处理结果的要求。

项目开发流程简述怎么写

数据的要求一般是根据项目最终的要求而定的,比如拿图像视觉方向的项目来说,模型所需要的当然就是图像数据了,那么什么样的图像数据才算是比较好的数据,有利于模型的学习呢?一般来说图像数据对于现实物体的还原度越高越好,一般可以从图像的色彩三要素和图像像素的值来判断。

数据的还原度从根本上影响了模型最终输出的效果,但是如果拿到的原始数据质量就不是很好的时候,就只能想办法对原始数据做一些处理,以期望数据的质量更好一些。但是话说回来,数据处理只是治标不治本,也就是说如果数据的质量真的不怎么好,那么无论如何处理也是很难达到使用的效果的。

所以最好的办法就是采集和使用场景匹配度最高的数据,比如让工作人员到现场实地采集数据。这个做法是非常有必要的,不要光看现在顶会论文上的哪些指标,人家是在做学术研究的,大家使用的数据集都是一样的,比如coco,voc等等,只有使用同样的数据集才能分出大家谁的模型比较好,比如最近比较火热的YOLOX也是在COCO数据集做的测试,和以前各版本的YOLO做的比较。

比如说最近的某某模型增加了Attention后,发现accuracy、flops、mAp都提升了不少,又一次SOTA了,等过了一段时间作者针对不同的任务对模型又做了一些Fine tune,结果比以前还更好。但实际上这些学术界看似超越之前的研究成果在实际工程应用中却没有想象中的那么美好,因为时间工程中,不可能出现两个不同的项目使用同样的数据集的情况。

在实际工程中,在采集数据的过程中,稍微不注意的一些细节就将模型的优势抵消了。比如采集数据的时候,是从互联网上爬下来的数据,那么数据的质量可能就不会太好,如果实际工作环境是室内或室外固定的场景,那么最好是到实地去采集不同时间、日期、天气情况下的数据,如果采集到好的数据资源,那么就算使用一个一般的模型,也能得到较好的结果。反之,如果训练数据和实际应用场景的数据差异过大,那么就算使用当前的SOTA模型,也很难达到预期的效果。

当然,再好的数据,采集回来后还是要做处理的,最直接的就是打标签,标签的设置确定了模型最终要学习的目标是什么。如果采集的数据数量不够,那么还需要做一些相应的数据增强来扩充数据量。


2、模型设计-AI的灵魂熔炉

如果数据是材料,那么模型就是容器,好的材料配上好的丹炉,才有产出好的丹药的可能。模型的发展是深度学习技术发展中较为重要的一环,无论是早期的卷积神经网络模型LeNet,还是后来的AlexNet,以及后面陆续出现的VggNet、GoogLeNet、SqueezeNet、ResNet、DenseNet、DarkNet、MobileNet、ShuffleNet、EfficientNet,又或者是这两年异军突起的Transformer模型,以及CNN和Transformer的结合体,都有一个共同特点,那就是这些模型的发展都朝着一个共同的目标前进,这个目标就是更高的mAp值、更高的训练效率、更快的推理速度、更大的平台适应性。

可以从模型的发展历程中看出,深度学习的知识体系更新迭代非常之快,想要保持在技术知识上的前沿性,就需要不断的学习新知识。如果在企业工作,那么还需要将这些新的知识融入到工程应用当中,产生一定的实际价值。

如果单从神经网络模型的发展来看,似乎想要在行业中出头,只能依靠不断的学习新知识,但是很明显,这样的成本太高,一般的企业从业人员不可能每天都有很充裕的时间来学习的,所以工程界和学术界对于新技术的关注度还是有些差异的,毕竟一个纯粹的学术研究,一个是落地的实际应用。

在学术界,模型的轻微提升,就可以发表一篇论文,甚至可以发表在顶会期刊上面,因为学术研究的就是在固定条件下的模型性能和效率。而工程界的条件不可能像学术界那样固定,每个具体的项目要求都不一样的,而且不同项目的数据也是大相径庭,这样就会造成同样的模型,在不同条件下会出现不同的结果,由于工程界实际项目的变量太多,将学术界影响结果的不确定性条件扩大了,需要解决的问题自然也就增加了。

在学术界做研究的时候,有部分条件是人为固定的,只需要在模型的设计训练上提高效果即可,而到了工程界就变成了所有的条件都具有了不确定性,比如设备、数据、平台、外部环境等这些变量对于最终结果的影响,一点都不亚于模型对于结果的影响。所以在工程界,当影响结果的这些变量在发生变化的时候,会出现使用较弱的模型效果却超出较好模型效果的情况,其原因就是模型上提升不足以抵消其他变量带来的负面影响。

好的丹炉虽具有炼出好丹药的可能,但是如果丹炉放置的位置不好,经常刮风下雨、伴随地震海啸,那么这个丹炉的优势就不如放在一个稳定地面上的丹炉的效果了,更不用说所使用的材料出了问题了。当然学术界和工程界是互相促进发展的,学术界的技术研究为工程界实际应用做技术方向指导,而工程界反过来监督验证学术界的研究成果是否有效。


3、训练优化-AI的学习成长

模型训练是最考验算法工程师的实战经验的,比如选择什么样的主干模型,进行怎么样的微调,以及选择什么样的损失函数和优化方法,是否进行多阶段训练,或者对图像数据进行多尺度训练等。此外还包括进行多大batch的采样,如何提高训练的速度,而这些都和具体的设备类型相关。

一般来说,有经验的训练人员,在训练模型的时候,不会一开始就输入大量的数据,而是做小批量的数据的训练,目的是先通过小批量数据来检验模型的好坏,然后再根据检验情况进行下一步的操作。很少会出现直接一上来就使用大批量的数据训练模型的情况,因为这样的做法有点像豪赌,一旦模型出现了问题,那么前面辛辛苦苦花费的大量时间将会毫无成果,一切都要重新再来,这种大量的试错时间成本在真实项目开发当中是有可能造成项目延期的。

一般模型训练开始之前先使用少量的数据快速的训练出一个过拟合的结果,用来验证模型是否合适。在实际工作中过拟合往往是不好的表现,但是我们可以使用它来做一些有意义的事情,比如用过拟合来验证模型是否合理,过拟合往往意味着参数过大,或者数据过少,导致模型测试的时候泛化能力太差,但是却能够告诉我们,模型本身是没有问题的,问题就在于训练过度,或者数据集过少。既然都过拟合了,说明模型的参数是足够多的,而且也得到了正确的结果,这正是我们想要的,至于过拟合,可以通过增加更多的数据来解决。

如果模型有问题,那么想要得到一个过拟合的结果都是不可能的。如果在前期先训练一个过拟合模型,那么将能够大大的加强我们工程当中的容错率,哪怕训练出了问题,再调整模型也不会浪费太多的时间,甚至可以再来一次,训练一个新的模型,因为过拟合模型的训练本来就花不了太长时间。

如果太过自信,模型训练一开始就把全部数据加载进去,那么模型的训练有可能会是几个星期甚至更长的时间,然而一旦出现错误,那么浪费的时间就太长了,有可能会导致项目的工期延误。最好的办法就是使用少量数据训练过拟合的结果来不断测测试模型的正确性,当确定模型没有问题了,再加载大批量的数据训练。


4、评估验证-AI的监理指导

模型评估是和模型训练伴随而行的,可以说训练一开始,评估也随之开始。训练和评估如同部队上的司令员和政委,一个负责攻城掠地,一个负责监督指导。可以对比一下电视剧《亮剑》里的李云龙和赵刚,李云龙的职务是团长,负责指挥前线士兵冲锋陷阵,赵刚的职务是政委,负责后勤和监督政策的执行。在剧里李云龙和赵刚经常吵架,因为李云龙的目标是如何打胜仗,而赵刚的目标不光要打胜仗,还要负责部队整体的思想工作,监督政策的执行,防止一些冒险的做法。

对比模型训练和模型评估,两者的关系也是如此。模型训练只负责如何把模型训练好,至于要训练到什么程度才算合适,需要模型评估说了算。所以在开始一项任务的时候,模型训练和模型评估是同时进行的,正常情况下,模型训练一次,则评估一次,但是我们认为模型训练的前几次是不需要评估的,因为模型训练的前期,参数还没有学习到正确的数值。

根据经验,一般模型在训练到一定的次数之后,再启动模型验证部分,相比模型训练一开始就启动模型评估,这样的操作可以在保证模型有效评估的前提下加快模型训练速度,因为模型在训练到后期的时候,只凭经验是很难确定模型是否已经训练到合适的程度的。有了评估验证的过程,就可以根据验证的结果来判断模型是否需要继续训练了。

如果没有模型评估,那么模型训练就只能凭运气了,有时候模型训练结束后,可能模型并没有训练到位,这种情况还比较容易处理,可以接着继续训练。但是如果模型训练过度了,就不太好处理了,一般来说模型训练过度之后的副作用就是过拟合,过拟合情况相信大家都比较清楚,模型过拟合之后会导致泛化能力大大的降低,这肯定不是我们想要看到的。

模型评估一般可以通过验证集和训练集的损失或精度的差距来做判断,看模型训练是否已经到位,需要停止训练。模型训练只管训练是否有效,是否是否能够持续快速的降低模型输出与目标直接的差距。模型评估要监督模型训练何时应该停止,不需要继续训练。


5、测试调整-AI的战前试炼

模型测试是项目交付前的最后一次试验,测试的目的就是和项目方给出的指标做对比,比如精度、速度等指标。所以作为项目交付前的最后一次测试实验,一定要按照项目方提出的指标要求做测试,测试的数据最好是从项目方实际的工作场景中采集,如果条件不允许,那么测试数据一定要最大可能的接近项目方实际工作场景的数据,只有这样才有可能在项目交付后不会出现算法指标上的问题。

测试数据不仅从质量上要接近真实场景的数据,而且在数量上也要达到一定的量级,测试的结果才会更加接近真实场景下的结果。根据大数定律,在试验不变的条件下,重复试验多次,随机事件的频率近似于它的概率。偶然中包含着某种必然。所以当数据的数量达到一定的量级,也就意味着测试的结果也会越多,最终所有测试结果的期望也就越接近真实结果。

在实际场景下的大规模数据测试中,如果出现测试结果和项目方给出的指标相差太远,当然这里所说的是模型测试出来的指标比项目方给出的指标要低。那么就需要对模型或者样本数据做调整之后再训练,或者重新训练模型。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1727195746@qq.com 举报,一经查实,本站将立刻删除。
(0)

相关推荐

发表评论

登录后才能评论