在Mars Digital Technologies实习。 我们如何在M&M's应用深度学习



大家好!

每年,约有200名学生和毕业生加入俄罗斯火星,作为培训生或领导力计划的参与者。 Dmitry Korzhimanov于今年夏天完成了在火星IT中心的实习。 在我们的博客中,德米特里(Dmitry)谈论了他在实习期间从事的项目。


从第三年开始,许多公司都为学生提供实习机会。 因此,我和许多从三年级毕业的同学一样,开始寻找暑假的实习机会。 在莫斯科国立大学机械学院,学生喜欢IT和银行业务,这并不奇怪,因为那里到处都存在着相当数量的数学问题。 我考虑在不同公司实习,并选择了Mars,因为我对有机会从事实际生产中的IT项目感兴趣。 此外,火星是一家国际公司,这意味着来自世界各地的团队在这项工作中处于领先地位。

通过技术和语言测试,以及与未来导师的面试后,我收到了一份录取通知书,然后,我成为了下一代技术团队的实习生。 该部门由来自世界各地的5人组成,主要从事在公司的各种生产和销售周期中引入机器学习技术。

老实说,我不是机器学习算法的专家,在实习期间,我对我将要做什么以及如何实现项目没有完全的了解。 是的,我有良好的数学背景,甚至知道什么是随机森林,但是那才是我的知识结局。 在火星中,有很多与计算机视觉有关的任务,我们的团队成功地解决了这些问题。 原来,在实习的前两周,我弄清楚了神经网络的排列方式,什么是OpenCV,存在哪些度量标准,如何与PyTorch和TensorFlow一起使用,还有很多其他事情。 每天结束时,我的头都忙得不可开交,因为必须大量吸收信息,而某些算法的想法也很平凡。 幸运的是,目前有很多真正有用的资源,例如Neurohive,Medium和相同的Habr(我对在这里写关于机器学习主题的文章的所有人深表谢意,没有你,沉浸于这个主题将是一件困难得多的任务)。 由于有了这些资源,您可以以很高的速度学习特定的主题。 我仍然看课的Coursera并没有被搁置。

深入研究了一些深度学习的基础知识并精通一点之后,我被邀请参加该项目。 我们必须实施一个程序来测量照片中的物体。 当然,会出现一个问题:快速消费品公司为什么需要这样做? 但是,答案很简单:在工厂中维护原材料和产品尺寸的统计数据。 例如,玛氏(Mars)生产M&M,而我想很多人都尝试过用花生做M&M。 但是,为了使每个糖果不要太大也不能太小,花生也应具有一定的大小。

如您所知,世界上没有理想,各方都来到了质量完全不同的工厂。 因此,一个特殊的人必须手动(!)从一批坚果中进行选择并编译有关它们的统计信息。 自然,在某个时候,该公司意识到该过程效率很低,并且自动化它会很好。 实际上,这项任务非常简单,所需要做的就是教导模型以找到螺母或其他物体,例如在A4纸上,以及在其上打印的已知尺寸的界标,以使像素变为真实单位。 听起来很琐碎,但实际上通常开始出现困难。 我被指示从事与识别这一具有里程碑意义的部分以及将像素转换为毫米有关的部分的实现。

大型公司非常重视维护自己的企业形象,这在我的项目中发挥了作用。 作为将在世界各地工厂印在纸上的准则或参考点,选择了一个带有字母“ M”的圆圈,该圆圈代表公司的特征。

为了解决我的问题,我立即开始寻找实现卷积神经网络的良好示例,这些示例可以快速清晰地找到照片中的对象。 在查看了各种选项之后,我选择了Faster R-CNN实现之一,并研究了其功能和体系结构。 下一步是训练模型;为此,生成了约100张照片,其中包含参考点的随机位置,并相应地绘制了描述它的正方形。 在这一点上,reportlab软件包对我有很大帮助。 这是一组专门设计用于生成带有自定义对象排列方式的文档的工具。

为了增强效果,选择了蛋白包,其功能令人印象深刻。 在Github上,您可以阅读有关它的更多信息,包括与替代库的比较。 我试图使转换尽可能多样化,以便不存在所谓的“黑匣子”。 旋转,缩放,更改对比度,添加噪点和其他标准技术。 不幸的是,旋转工具存在一个问题,这对我来说是必需的,因为没人能保证照片中字母M的正确方向,并且模型应该能够识别其位置的不同选项。

不管我如何尝试发现错误,专辑包中的函数都会顽固地继续进行错误的边界框转换,将其替换为错误的键。 结果,我决定使用没有问题的经典imgaug软件包。

在经历了多个时代的网络训练之后,我对模型将在实际示例中产生的结果产生了兴趣。 在打印了一张带有参考点的纸并拍照后,我开始测试神经网络。 是的,她确实学会了如何找到所需的东西,但是她做得还远远不够完美。 网络显示的那些边界对于高质量的对象测量来说太不准确了,这里开始寻找理想配置的参数拟合过程相当不愉快。 我更改了学习步骤,试图更改网络的体系结构,完成它,更改了增强设置,但平均IoU并未超过0.85。

Faster R-CNN的结果



las,我的经验不足给我带来了麻烦。 由于没有全神贯注于寻找更简单的工具,因此我非常热​​衷于尝试使用神经网络,但是无论如何尝试,都无法给出令人满意的结果。 在此过程中,事实证明该产品根本不使用彩色打印机,而我的所有努力似乎都是徒劳的。 但是后来我的同事告诉我,您可以使用常见的黑色圆圈和OpenCV软件包中的Hough变换进行检测。 我可以对初始版本使用相同的简单解决方案,但是,我没有对计算机视觉的经典工具给予应有的关注。 在使用了一些参数之后,我终于得到了想要的东西,问题得以解决。 下一步是使用Flask包创建一个API,然后在Azure服务器上发布该程序,但这是一个完全不同的故事。

霍夫变换的最终结果



除了计算机视觉的任务外,该公司还面临其他机器学习领域的任务-从处理推文以监视特定产品的感知到开发程序以帮助兽医更有效地治疗动物。 对我来说,令人惊喜的是这项工作的研究部分。 通常,这些任务听起来很简单,但是如何找到高质量的解决方案却并不为人所知。 为此,您必须研究机器学习领域的文章和当前方法。 例如,我必须了解贝叶斯机器学习方法,该方法在解决医学问题方面非常流行。 因此,我得以研究描述这些方法应用的医学文章,并帮助团队选择正确的开发载体。

目前,我正在完成实习。 由于新学年即将到来,所以我在9月转为兼职工作,这不是问题。 此外,该公司还有机会在家工作,事实证明,这种做法在这里很普遍。 现在我们的团队正在完成我在文章中描述的项目,并且正在向与计算机视觉有关的新项目过渡。 确实有很多任务,而且它们都是完全不同的,因此您不会感到无聊。

火星的实习现已开放,您可以了解更多信息并在以下网站申请。

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


All Articles