# 将卷积神经网络集成到企业级应用中

原文链接：[Integrating convolutional neural networks into enterprise applications](https://www.oreilly.com/ideas/integrating-convolutional-neural-networks-into-enterprise-applications?from=hackcv&hmsr=hackcv.com&utm_medium=hackcv.com&utm_source=hackcv.com)

要了解有关创建实时流图像分类系统的更多信息，请查看Josh Patterson和Kirit Basu的会议“ [实时图像分类：在实时流数据上使用卷积神经网络](https://conferences.oreilly.com/strata/strata-ny/public/schedule/detail/60981?intcmp=il-data-confreg-lp-stny17_20170905_new_site_integrating_convolutional_neural_networks_into_enterprise_applications_top_cta) ”，[在纽约市Strata数据会议上，9月25-28，2017年](https://conferences.oreilly.com/strata/strata-ny?intcmp=il-data-confreg-lp-stny17_20170905_new_site_integrating_convolutional_neural_networks_into_enterprise_applications_top_cta)。现已开放注册。

抛开建模任务不谈，将神经网络和卷积神经网络集成到已经落地的企业应用程序中本身就是一项挑战。除了我们更高级别的文章“ [解决计算机视觉的现实商业问题](https://www.oreilly.com/ideas/solving-real-world-business-problems-with-computer-vision) ”中提到的基础设施方面，我们还需要考虑许多任务：

- 我们想用什么样的卷积架构来解决这个计算机视觉问题？
- 我们应该在哪里训练模型？
- 模型需要哪些数据以及我们对训练数据有哪些类型的安全约束？
- 模型在经过训练后应该保存在哪里，以便应用程序可以使用模型进行预测？
- 我们如何在一段时间内发布模型的新版本，并确保我们有可靠的模型为应用程序提供预测？
- 当我们有20种不同的机器学习模型为多个应用程序提供服务时，我们如何应用上述这些项目？

深度学习具有不同的主要网络体系结构，例如用于图像数据的卷积神经网络和用于序列数据的循环神经网络。在这些主要架构中，我们发现了层（layer）和人工神经元（artificial neurons）可以组成许多的变体。一些流行的卷积神经网络架构（在[这里](https://adeshpande3.github.io/adeshpande3.github.io/The-9-Deep-Learning-Papers-You-Need-To-Know-About.html)进行了总结）包括：

- LeNet（由Yann Lecun开发）
  - CNN最早成功的架构之一
- AlexNet（由Krizhevsky开发，Sutskever，Hinton，2012）
  - 帮助CNN在计算机视觉中普及
  - 赢得ILSVRC 2012
- ZF Net（由Zeiler，Fergus开发）
  - 赢得了ILSVRC 2013
- GoogLeNet（由Szegedy开发，Google，也称为“Inception”网络）
  - 赢得了ILSVRC 2014
- VGGNet
  - 亚军：ILSVRC 2014
- RESNET
  - 赢得ILSVRC 2015

新型计算机视觉项目的一个常见做法是从上面的列表中选一个网络，并将其作为具有特定图像数据集的层架构的开始。另一种方法是使用所谓的“ [传输学习](https://blog.cloudera.com/blog/2017/06/deep-learning-on-apache-spark-and-hadoop-with-deeplearning4j/) ”来构建一组基本的图像特征，然后继续在特定领域的数据集上训练网络架构。当我们没有提供大量特定领域的训练图像时，转移学习会很有用，因此我们利用来自其他相关领域的数据来帮助构建我们的模型。

通常，模型集成的早期版本涉及到简单地将模型文件复制到运行应用程序所在的机器，并让代码直接将其加载到内存中。这可能适用于桌面端的一次性应用程序，但大多数F500 IT部门可能会放弃这种方法。从可管理性的角度来看，大多数企业IT人员都在从应用程序运用和部署模型的角度考虑上述限制，并且一些好的想法就是因为企业不可“部署”而快速死亡。

如果我们有20个不同的机器学习工作流，每个工作流在每个月生成一个新模型，我们将在硬盘驱动器上放置（12 x 20）240个不同版本的模型，这很快就会变成文件管理问题。我们如何跟踪每个工作流的文件组并保留最新的文件为集成到生产中？如果我们想回滚到以前的版本，由于在模型的最新版本中发现了训练数据的问题，该怎么办？我们如何在确保每个应用程序使用每个模型的“正确”版本的同时，跨多应用程序共享一个或多个模型？虽然这些问题从建模开始就存在，但随着我们在企业中在线上引入越多的模型，它们逐渐变得更难处理。该[市场预测](https://www.forbes.com/sites/louiscolumbus/2017/06/11/how-artificial-intelligence-is-revolutionizing-enterprise-software-in-2017/#7cc9d1424638)每个企业很快就会在网上发布很多模型，因此对于几乎所有管理整个世界数据的公司而言，这都是一个重要的问题。

这里的好消息是我们之前已经预料过这种情况，早在80年代和90年代，数据往往位于平面文件（flat files）中的硬盘驱动器上，而且（这些文件）的管理方式与今天的机器学习模型文件非常相似。随着时间的推移，这些文件被组织到RDBMS表中并集中在服务器上，这就是我们今天在许多组织的[Skymind](https://skymind.ai/)上看到的模式。他们需要一个中央模型服务器来管理模型（类似于RDBMS表）并允许通过REST调用查询模型 - 有点类似于当今JDBC接口上的SQL查询。

模型正在成为新的RDBMS表，实际上，模型服务器是新型的数据库服务器。

因此，总结一下我们对集成的看法，我们需要：

1. 选择一个与我们想要建模数据类似的CNN架构数据模型，因此我们需要知道它适合对这些类型的特征进行建模。
2. 拥有一个可以安全存储数据、构建和部署模型的系统。
3. 在许多潜在的不同应用程序中管理每个模型的正确版本的部署和调用。

现在让我们回顾上面提出的想法，通过完整的架构整合到企业的图像分类流中。

## 把它们放在一起

为了构建一个生产级的实时图像分类系统，我们需要类似于图1所示的图

![production-grade real-time image classification system](https://d3ansictanv2wj.cloudfront.net/Figure_1-70d25e3a8c54a06c9418f671c24c4a6f.png)图1.由Josh Patterson和Kirit Basu提供的图。

通常，我们在组织中有多个数据源，我们将其提取到存储系统中，例如Apache Hadoop集群（例如，用于存储的HDFS）。在流媒体计算机视觉系统中，我们需要：

- 一种从源获取图像+相关元数据到某种数据获取系统的方法
- 数据获取系统
- 用于从卷积模型提供预测的模型服务器
- 存储图像和图像分类的地方

当然，实际应用程序还有许多其他可移动部件。除了对图像中的对象进行分类之外，您可能还要从API或数据库中查找其他元数据。您可能需要处理意外情况，例如错误文件或丢失数据。或者，您可能不仅要将图像文件写入目标终端，还要使用图像元数据更新数据库或搜索索引，并通知用户新获取的文件。当然，你希望不编写任何代码，也可以大规模地运用。

在下图中，我们展示了一个基于[Skymind](https://skymind.ai/)和[StreamSets](https://streamsets.com/)技术产品的更具体的系统（披露：本文的作者在每个公司使用，Skitsind的Patterson和StreamSets的Basu）。

![more specific production-grade real-time image classification system](https://d3ansictanv2wj.cloudfront.net/Figure_2-bebcdd13f9db1cbb270e2ae05a5e6a5f.png)图2.图片由Josh Patterson和Kirit Basu提供。

图3是一个简单StreamSets管道的示例，它从文件目录中读取图像，调用Skymind模型服务器以识别图像中的对象，并将图像和相关元数据写入HDFS。

![simple StreamSets pipeline](https://d3ansictanv2wj.cloudfront.net/Figure_3-f7e1aafd8da5084ee8d7b084b392b9dc.png)图3.图片由Josh Patterson和Kirit Basu提供。

在本文中，我们讨论了如何在当今的企业中实现流式图像识别。流技术和模型预测服务的组合可以应用于构建许多类型的应用，例如欺诈检测和异常检测系统。若要进一步了解应用机器学习在流数据基础设施的情况下，参加我们会议[*的实时图像分类：实时使用卷积神经网络的数据流*](https://conferences.oreilly.com/strata/strata-ny/public/schedule/detail/60981?intcmp=il-data-confreg-lp-stny17_20170905_new_site_integrating_convolutional_neural_networks_into_enterprise_applications_body_text_end)在[纽约市，9月25日至28日地层数据会议， 2017年](https://conferences.oreilly.com/strata/strata-ny?intcmp=il-data-confreg-lp-stny17_20170905_new_site_integrating_convolutional_neural_networks_into_enterprise_applications_body_text_end)。

想要了解有关本文中提到的技术的更多信息，请发送电子邮件至Josh（[josh@skymind.io](mailto:josh@skymind.io)）或Kirit（[kirit@streamsets.com](mailto:kirit@streamsets.com)）。

**相关资源：**

Josh Patterson and Adam Gibson的“ [深度学习：从业者的方法](https://www.safaribooksonline.com/library/view/deep-learning/9781491924570/?utm_source=oreilly&utm_medium=newsite&utm_campaign=20170905_integrating_convolutional_neural_networks_enterprise_post_related_resource_deep_learning_practitioners_approach) ”