如何在15分钟内建立一个深度学习模型?

  • 如何在15分钟内建立一个深度学习模型?-图1
4回答·1.4万阅读
AI中国

2019年05月31日

谢邀!


如何利用CNNs建立计算机视觉模型?什么是现有的数据集?训练模型的方法有哪些?本文在尝试理解计算机视觉的最重要的概念的过程中,为现有的一些基本问题,提供了答案。

在机器学习中最热门的领域之一是计算机视觉,它具有广泛的应用前景和巨大的潜力。它的发展目的是:复制人类视觉的强大能力。但是如何通过算法来实现呢?

让我们来看看构建计算机视觉模型中,最重要的数据集以及方法。

现有的数据集

计算机视觉算法并不神奇。 他们需要数据才能工作,并且它们只会与你输入的数据的情况一样。这些是收集正确数据的不同来源,具体还是要取决于任务:

ImageNet是最庞大且最著名的数据集之一,它是一个现成的数据集,包含1400万幅图像,使用WordNet概念手工注释。在整个数据集中,100万幅图像包含边界框注释。

带有对象属性注释的ImageNet图像。图片来源

另一个著名的例子是Microsoft COCO(Common Objects in Contex,常见物体图像识别)的 DataSet,它包含了32.8万张图片,其中包括91种对象类型,这些对象类型很容易被识别,总共有250万个标记实例。

来自COCO数据集的带注释图像的示例

虽然没有太多可用的数据集,但有几个适合不同的任务,

研究人员运用了包含超过20万名人头像的CelebFaces Attributes数据集和超过300万图像的"卧室"室内场景识别数据集(15,620幅室内场景图像);和植物图像分析数据集(来自11个不同物种的100万幅植物图像)。

照片数据集,通过这些大量的数据,不断训练模型,使其结果不断优化。

一个总体战略

深度学习方法和技术已经深刻地改变了计算机视觉以及人工智能的其他领域,以至于在许多任务中,它的使用被认为是标准的。特别是,卷积神经网络(CNN)已经超越了使用传统计算机视觉技术的最先进的技术成果。

这四个步骤概述了使用CNN建立计算机视觉模型的一般方法:

  1. 创建由带注释的图像组成的数据集,或使用现有的数据集。注释可以是图像类别(用于分类问题)、边界框和类(用于对象检测问题)、或者是对图像中感兴趣的每个对象进行像素级分割(对于实例分割问题)。
  2. 从每个图像中提取与当前任务相关的特性。这是问题建模的关键点。例如,用于识别人脸的特征,基于面部标准的特征,明显不同于用于识别旅游景点或人体器官的特征。
  3. 训练一个基于特征分离的深度学习模型。训练意味着给机器学习模型提供许多图像,它将根据这些特征学习如何解决手头的任务。
  4. 使用训练阶段没有使用的图像来评估模型。通过这样做,可以测试训练模型的准确性。
  5. 这个策略很基本,但可以很好地达到了目的。这种方法称为监督机器学习,需要一个包含模型且必须学习的现象的数据集。

训练对象检测模型

解决对象检测挑战的方法有很多种。 在Paul Viola 和 Michael Jones 的论文《健壮实时对象检测》(Robust Real-time Object Detection)中提出了普遍的方法。

论文传送门:「链接」

虽然该方法可以训练用来检测不同范围的对象类,但其最初的目的是面部检测。它是如此的快速和直接,并且它是在傻瓜相机中实现的算法,这也使得实时人脸检测几乎没有处理能力。

该方法的核心特性是使用一组基于Haar特性的二进制分类器进行训练的。这些特征表示边和线,在扫描图像时非常容易计算。

Haar features

虽然非常基本,但在特定的人脸情况下,这些特征允许捕获重要的元素,如鼻子、嘴巴或眉毛之间的距离。它是一种监督方法,需要识别对象类型的许多正例和反例。

基于CNN的方法

深度学习已经成为机器学习中一个真正的游戏规则改变者,特别是在计算机视觉领域中,基于深度学习的方法是许多常见任务的前沿。

在提出的各种实现目标检测的深度学习方法中,R-CNN(具有CNN特征的区域)特别容易理解。本文作者提出了三个阶段的过程:

  • 使用区域建议方法提取可能的对象。
  • 使用CNN识别每个区域的特征。
  • 利用支持向量机对每个区域进行分类。

R-CNN Architecture. 图片来源

虽然R-CNN算法对于具体采用的区域建议方法是不可知的,但是在原著中选择的区域建议的方法是选择性搜索。步骤3非常重要,因为它减少了候选对象的数量,从而降低了方法的计算开销。

这里提取的特征不如前面提到的Haar特征直观。综上所述,我们使用CNN从每个区域提案中提取4096维特征向量。考虑到CNN的性质,输入必须始终具有相同的维度。这通常是CNN的弱点之一,不同的方法以不同的方式解决这个问题。对于R-CNN方法,经过训练的CNN架构需要输入227×227像素去固定区域。由于提议的区域大小与此不同,作者的方法只是扭曲图像,使其符合所需的尺寸。

与CNN所需的输入维度匹配的扭曲图像的示例

虽然取得了很好的效果,但是训练遇到了一些障碍,最终这种方法被其他人超越了。其中一些在文章中进行了深入的回顾——《深度学习的对象检测:权威指南》。


更多有关人工智能的资讯、深度报道、采访欢迎关注AI中国,无论你是小白还是大神,你想要的这里都有!

你看我独角兽吗

2018年07月25日

前几年我就开始学习Python和Django。 我喜欢通过学习Python中的新东西来放松自己。 对深度学习模型,人工智能和用于构建神经网络模型的不同工具我很感兴趣。

有个数据问题是包括初创公司在内的许多企业都会遇到延迟付费客户的问题, 只需看看谷歌搜索词和趋势的数量,原来延迟付款和追债的市场估计为数十亿美元这么多。。

我预计美国有关“迟付”的查询数量最多,不确定为什么新加坡是最大的国家。 如果你知道原因,请发表评论!

一些初创公司正在使用人工智能解决延迟付款的问题。 他们正在构建智能应用程序,以自动化使用不同通信代理联系客户的过程。 我认为通过将python代码应用于深度学习模型来了解有关神经网络和人工智能的更多信息会很有趣。

我们的示例是使用Keras构建的,Keras是一个简单但功能强大的深度学习python库。 请参阅Keras的安装要求。 您需要安装后端引擎(如TensorFlow)才能使API正常工作。

深度学习和神经网络

我们的大脑有连接神经元网络,使用模式来学习和记忆东西。我们使用前向传播不断提供大脑数据。

神经网络通过在输入数据神经元之间建立连接,将它们传递给其他子神经元进行处理以获得最终输出,在我们的大脑中使用相同的模式识别概念。我们将此过程称为向前传播。

神经网络试图在数据中找到模式。我们将其称为深度学习,因为网络中隐藏层的级别,这是学习或培训发生的地方。

反向传播并最大限度地减少错误

在深度学习中,我们将模型的预期输出与训练数据集的输出进行比较。使用反向传播,当从一个神经元移动到下一个神经元时,我们的网络将继续调整权重,直到训练数据集和模型的输出之间的输出差异最小化。因此,最小化我们的模型和预期输出之间的误差。

如果我们期望输出为10,例如模型给出输出6,则误差为4.模型将返回并调整模型中神经元连接之间的权重,以尽可能地减少误差。

样本模型

我将从一个例子开始,这个例子的灵感来自阅读这篇关于用python编写的神经网络的博客文章。我们将使用Keras构建我们的多层深度学习模型。功能强大的python包允许快速更改模型的体系结构。我们可以快速调整隐藏层的数量,每层中的神经元,模型激活函数,损失函数和模型类型,而无需重写数学公式的函数。

在下面的XOR门示例中,我们为每个训练集示例提供了三个输入和一个输出。我们的输出取决于第三列不相关的前两列。如果前两列中的输入为1或0,则输出为1,否则输出为0。

在使用上面的数据训练我们的模型之后,我们希望它为下面的测试输入预测正确的输出:

答案应该是0。

建立我们的模型:

我们用七个输入集为我们的模型提供信息。 每个输入都有一个权重转到下一个隐藏层。 第一个隐藏层神经元是它所连接的节点的权重和值的总和。

该模型将比较结果输出与我们的训练数据的预期输出。 这是模型的错误。

该模型将继续调整神经元连接的权重,以最小化模型输出和预期输出之间的误差。

我们调整隐藏层的数量,每层中的神经元以及模型迭代(时期)的数量,以实现高模型精度和最低可能误差的最佳结果。模型代码实际上并不长,但我提供了一些注释来解释这些代码,请确保您阅读它们以更好地掌握模型:

我们的模型运行20,000次迭代。 对于输入[1,0,0],我们的模型预测输出为0.0000001062! 非常接近我们的预期值0。最后,我们还将我们的输入提供给模型以预测输出,并且非常准确地预测了我们的训练数据的1和0,这结果还算不错。


我会在这里发布所有与科技、科学有关的有趣文章,欢迎订阅我的头条号。偶尔也回答有趣的问题,有问题可随时在评论区回复和讨论。

(码字不易,若文章对你帮助可点赞支持~)

没有更多内容了