男子汽车助手

该博客通常专门用于车牌识别。 但是,通过执行此任务,我们得出了一个有趣的解决方案,可以轻松地将其应用于非常广泛的计算机视觉任务。 现在,我们将讨论这一点:如何创建不会让您失望的识别系统。 如果失败了,您可以告诉她错误出在哪里,重新培训并拥有比以前更可靠的解决方案。 欢迎来到猫!



怎么了


想象一下,您面临的任务是:在照片中找到披萨,并确定它是哪种披萨。

让我们简要地介绍一下我们经常走的标准路线。 怎么了 了解如何做...没有必要。

步骤1:拿起基地



步骤2:为了识别的可靠性,可以注意到有披萨,背景是什么(因此我们将在识别过程中加入分段神经网络,但这通常是值得的):



步骤3:我们将其转换为“规范化形式”,并使用另一个卷积神经网络进行分类:



太好了! 现在我们有一个培训基地。 平均而言,训练基地的大小可以是几千张图像。

我们采用2个卷积网络,例如Unet和VGG。 首先对输入图像进行训练,然后对图像进行归一化并训练VGG进行分类。 它的效果很好,我们将其转移给客户并考虑诚实赚钱。

不是那样的!


不幸的是,几乎没有。 在实施过程中会出现几个严重的问题:

  1. 输入数据的可变性。 我们研究了一个例子,实际上,所有结果都不同。 是的,仅在操作过程中出现了问题。
  2. 很多时候,识别准确性仍然不足。 我想要99.5%,但在美好的一天,它会从60%升至90%。 但是,他们通常希望自动化解决方案,该解决方案本身就是行之有效的,甚至比人们还要好!
  3. 此类任务通常被外包,这意味着合同已经关闭,合同已签署且企业所有者必须决定是投资于修订版还是完全放弃决策。
  4. 是的,如果您没有参与创建或具有同等资格水平的专家的邀请,它就像任何复杂系统一样,随着时间的流逝会开始退化。

结果,对于许多用手触摸了所有机制的人来说,很明显,一切都应该以完全不同的方式发生。 像这样:



数据被发送到我们的服务器(通过http POST或使用Python API),GPU服务器将“尽可能”识别数据,并立即返回结果。 在此过程中,将相同的识别结果与图像一起添加到存档中。 然后,一个人控制所有数据或其中的随机部分,对其进行纠正。 校正后的结果将放入第二个存档。 然后,当方便的时候(例如在晚上),将使用该人纠正的数据重新训练所有用于识别的卷积神经网络。

这样的识别电路,人工监督和进一步的培训解决了上面列出的许多问题。 此外,在需要高精度的解决方案中,可以使用经过人工验证的输出。 似乎使用这种经过人工验证的数据的成本太高,但是我们将进一步证明,这样做几乎总是具有经济意义的。

真实的例子


我们已经实现了所描述的原理并将其成功地应用于一些实际任务。 其中之一是从平板电脑上获取的铁路枢纽集装箱图像识别数字。 这非常方便-将平板电脑对准容器,获取识别的号码,然后在平板电脑程序中对其进行操作。

一个典型的快照示例:



在图片中,这个数字几乎是完美的,只有很多视觉噪音。 但是拍摄时会出现刺眼的阴影,下雪,意外的字体布局,严重的倾斜或透视。

因此,看起来像一组网页,所有“魔术”都发生在该网页上:

1)将文件上传到服务器(当然,不能从html页面完成,而可以使用Python或任何其他编程语言来完成):


2)服务器返回识别结果:


3)这是操作人员的页面,负责监视识别的成功并在必要时更正结果。 有两个阶段:搜索符号组的区域,对其进行识别。 如果操作员发现错误,则可以更正所有这一切。


4)这是一个简单的页面,您可以在其中开始每个识别阶段的训练,并通过运行查看当前的损失。


极简主义,但效果很好!

从计划使用上述方法(或我们的经验和识别器服务器)的公司的角度来看,这会如何?

  1. 选择了最新的神经网络。 如果一切都基于现有的调试解决方案,则可以在一周内启动服务器并配置标记。
  2. 服务器上组织了一个数据流(最好是无限的),标记了几百个帧。
  3. 培训开始。 如果一切都“合适”,则结果是成功识别的60-70%,这极大地有助于进一步打标。
  4. 然后开始呈现所有可能情况,检查识别结果,编辑,重新训练的系统工作。 如您所知,将系统嵌入业务流程变得越来越具有成本效益。

还有谁呢?


闭环主题并不新鲜。 许多公司提供一种或另一种类型的数据处理系统。 但是可以以完全不同的方式构建工作范式:

  • Nvidia Digits是包装在直观GUI中的一些相当不错且功能强大的模型,用户需要在其中附加照片和JSON。 最主要的优点是-具备最少的编程和管理知识,可以为您提供良好的解决方案。 减号-此解决方案可能远非最佳方案(例如,不可能通过SSD很好地搜索车号)。 并且要了解如何优化解决方案,用户没有足够的知识。 如果他有足够的知识,则不需要DIGITS。 第二点是-您需要拥有自己的设备来配置和部署所有组件。
  • 标记服务,例如Mechanical Turk,Toloka,Supervise.ly。 前两个为您提供标记工具,以及可以标记数据的人员。 后者提供了很好的工具,但没有人。 通过服务,您可以使人工劳动自动化,但是您需要成为设置任务的专家。
  • 已接受培训并提供固定解决方案的公司(Microsoft,Google,Amazon)。 在此处(https://habr.com/post/312714/)了解更多有关它们的信息。 他们的决定不灵活,并非总是“幕后”,这将是您所需要的最佳决定。 通常,几乎总是无济于事。
  • 专门处理您的数据的公司,例如ScaleAPI(https://www.scaleapi.com/)。 他们有一个很棒的API,对于客户来说这将是一个黑匣子。 输入数据-输出结果。 内部很可能有所有最好的自动化解决方案,但这对您来说并不重要。 就一帧而言,这是非常昂贵的解决方案,但是如果您的数据确实有价值,为什么呢?
  • 拥有工具可以自己动手完成几乎整个周期的公司。 例如, IBM的PowerAI 。 几乎就像DIGITS,但您只需要标记数据集。 另外,没有人能优化神经网络和解决方案。 但是已经解决了很多情况。 生成的神经网络模型已部署到您,并将获得http访问权限。 这里与Digits有相同的缺点-您需要了解该怎么做。 您的情况可能“不收敛”,或者只是需要一种不同寻常的识别方法。 通常,如果您有一个相当标准的任务且需要对可分离的对象进行分类,则该解决方案是完美的。
  • 可以用他们的工具完全解决您的问题的公司。 这样的公司并不多。 实际上,我只会将CrowdFlower引用给他们。 在这里,他们会花合理的钱来安排涂鸦者,分配经理,部署服务器,并在其中启动模型。 而且,如果花更多的钱,他们将能够更改或优化他们针对您任务的决策。
    大型公司与他们合作-ebay,oracle,tesco,adobe。 从他们的开放性来看,他们成功地与小公司互动。
    例如,这与EPAM进行的定制开发有何不同? 这里一切准备就绪的事实。 99%的解决方案不是书面的,而是由现成的模块组装而成的:数据标记,网络选择,培训,开发。 按订单开发的公司没有这样的速度,解决方案开发的动力以及完成的基础架构。 我们认为CrowdFlower所确定的趋势和方法是正确的。

这可以做什么工作?


也许有70%的任务以这种方式自动化。 最合适的任务是对包含文本的区域进行多种识别。 例如,我们已经谈论过的汽车牌照,火车号码( 这是两年前的例子 ),集装箱上的铭文。



工厂认可了许多象征性的技术信息,以说明产品及其质量。

尽管必须在此处创建非常复杂的识别解决方案,但这种方法在识别货架和价格标签上的产品时会很有帮助。



但是,您可以从技术信息中逃脱任务。 检测汽车,盘羊,驼鹿和海狗的任何语义,无论是实例分割,都将完全落入此方法。



一个非常有希望的方向是保持语音和文本聊天机器人与人之间的通信。 会有一种非常不寻常的标记方式:上下文,短语类型及其“填充”。 但是原理是相同的:我们以自动模式工作,一个人控制理解和回答的正确性。 如果客户的语气不满意或不满意,您可以寻求操作员的帮助。 随着数据的积累,我们会重新培训。

如何使用视频?


如果您或公司内部已经开发了必要的能力(在离线和在线上都具有一些机器学习经验,使用Zoo框架方面的经验),那么解决简单的计算机视觉问题就不会有困难:分割,分类,文本识别和其他

但是对于视频来说,一切都不那么顺利。 您如何标记这些无休止的数据量? 例如,可能发现每隔几秒钟就会有一个(或几个)对象出现在框架中,需要标记出来。 结果,所有这些都可以变成逐帧查看,并且占用了太多资源,以至于在启动解决方案后甚至不必谈论人的额外控制。 但这可以克服,如果您以正确的方式呈现视频以突出显示感兴趣区域的帧。

例如,我们遇到了巨大的视频系列,其中有必要强调一个特定的对象-铁路平台的耦合。 这确实不容易。 事实证明,一切并没有那么可怕,如果您将显示器放得更宽,选择帧速率(例如10FPS),然后在一个图像上放置256帧,即 一幅图像25.6s:



它可能看起来很吓人。 但实际上,点击进入单个框架大约需要15秒钟,然后选择汽车联轴器在框架上的中心。 甚至一两个人在一两天内都可以标记至少10个小时的视频。 获得3万多个示例进行培训。 另外,在这种情况下,平台在镜头前的通过并不是一个固定的过程(应该注意的是很少见),即使在几乎实时的情况下校正识别机,补充训练基础也是相当现实的! 而且,如果在大多数情况下都能正确识别,那么几分钟后就可以克服一个小时的视频。 然后,通常,忽视人的全部控制权在经济上是无利可图的。

如果需要将视频标记为“是/否”,而不是对象的本地化,则仍然更加容易。 毕竟,事件通常会“卡在一起”,并且只需轻扫一下鼠标,一次即可标记多达16帧。

通常,唯一的事情是您必须在视频分析中使用两个阶段:搜索“感兴趣的帧或区域”,然后通过其他算法处理每个这样的帧(或帧序列)。

机器人经济


如何优化处理视觉数据的成本? 一种或另一种方式,绝对需要一个人来控制数据识别。 如果此控制是选择性的,则成本可以忽略不计。 但是,如果我们谈论的是全面控制,那么有多少好处呢? 事实证明,如果一个人在没有机器帮助的情况下执行相同任务,这几乎总是有意义的。

让我们从一开始就拿一个不是最好的例子:在图像中搜索披萨,标记和类型选择(实际上还有许多其他特征)。 虽然,这项任务并不像看起来那样复杂。 实际上存在对特许经营网络产品外观的控制。

假设使用GPU服务器进行识别需要0.5 s的机器时间,一个人将一个帧完全标记大约10 s(根据许多参数选择匹萨的类型及其质量),并检查计算机是否能正确检测所有内容,则需要2 s。 当然,呈现这些数据的便利性将面临挑战,但是这种时间与我们的实践相当。

我们需要更多投入来支付手动布局和租赁GPU服务器的费用。 通常,您不必依赖完整的服务器负载。 让我们有可能实现每天加载100,000帧(将占用一个GPU的处理能力的60%),每月服务器租金估计为60,000卢布。 事实证明,在GPU上分析一帧时需要花费2美分。 手工分析的成本为30,000r,需要40个小时的工作时间,每帧成本26科比。



而且,如果您随后删除总控制权,则每1000帧价格将接近20卢布。 如果输入数据很多,则可以优化识别算法,进行数据传输并获得更高的效率。

在实践中,随着识别系统的学习而卸货还具有另一个重要意义-它使扩展产品规模变得更加容易。 数据量的显着增加使您可以更好地训练识别服务器,从而提高准确性。 而且,参与数据处理过程的员工数量将与数据量不成比例地增加,这将从组织的角度极大地简化公司的发展。

通常,您必须手动输入的文字和轮廓越多,使用自动识别就越有利可图。

一切都会改变吗?


当然,不是全部。 但是现在业务的某些领域并不像以前那样疯狂。

是否想在没有人陪同的情况下提供离线服务? 远程种植操作员并进行监控
在每个客户的相机上? 结果会比在位的人还差一点。 是的,运营商几乎需要更多。 如果您每5次卸载操作员一次? 这可以是一家没有接待处的美容院,并且在工厂和安全系统中没有控制权。 不需要100%的准确性-您可以将操作员完全排除在链条之外。

可以为现有服务组织相当复杂的会计系统以提高其效率:控制乘客,车辆,服务时间,存在“绕过”售票处的风险等。

如果任务是在计算机视觉的当前开发水平上并且不需要全新的解决方案,那么这将不需要在开发上进行大量投资。

Source: https://habr.com/ru/post/zh-CN413087/


All Articles