十大预训练模型,助力入门深度学习(第1部分 - 计算机视觉)

简介:

介绍

对于希望运用某个现有框架来解决自己的任务的人来说,预训练模型可以帮你快速实现这一点。通常来说,由于时间限制或硬件水平限制大家往往并不会从头开始构建并训练模型,这也就是预训练模型存在的意义。大家可以使用预训练模型作为基准来改进现有模型,或者针对它测试自己的模型:

4264fa94d0c5327ae39cb142a75328f09e4b7f8f

图片来源:Facebook AI

在本文中,将向大家介绍Keras中多种可应用在计算机视觉领域的预训练模型。这里选择Keras的原因,一是因为它易上手,对于刚开始使用神经网络的人来说是一个很好的选择;二是希望在本系列文章中统一使用一个框架,也帮大家省去很多麻烦,只需关注模型的具体使用即可。大家可以通过多次调整模型参数的形式对本文介绍的模型进行实践,这样将更有助于理解。

本主题将包含一系列文章,本文为本系列的第一部分,第二部分将侧重于自然语言处理(NLP),第三部分将关注语音处理模型。希望通过这些可以帮助到大家,让大家迅速上手那些现有的模型。

目录

• 目标检测
    • Mask R-CNN

    • YOLOv2

    • MobileNet

    • 成熟/未成熟的番茄分类

    • 汽车分类

• 面部识别和再生
    • VGG-Face模型

    • 单幅图像的三维人脸重建

• 分割
    • 语义图像分割 - Deeplabv3

    • 机器手术分割(Robot Surgery Segmentation)

• 其他
    • 图像描述(Image Captioning)

目标检测

目标检测是计算机视觉领域中最常见的应用之一。它适用于各行各业,从自动驾驶汽车到计算人群中的人数。本节介绍可用于目标检测的预训练模型。

MaskR-CNN

(https://github.com/matterport/Mask_RCNN)

4264fa94d0c5327ae39cb142a75328f09e4b7f8f

MaskR-CNN是为目标实例分割而开发的灵活框架。这个github提供的预训练模型是Mask R-CNN适配的Keras版本。它为给定图像中的对象的每个实例生成边界框和分割掩模(如上所示)。

这个GitHub存储库提供了大量的资源来帮助入门。它包括Mask R-CNN的源代码,用于MS COCO的训练代码和预训练权重,用于可视化检测pipline的每个步骤的Jupyter notebook等。

YOLOv2

(https://github.com/experiencor/keras-yolo2)

5618d64783025d42330f1fab3e146a0c4e3b4ff5

YOLO是一种应用深度学习技术的超流行目标检测框架。此存储库包含YOLOv2在Keras上的实现。同时开发人员已经在多种目标图像(如袋鼠检测,自动驾驶汽车,红细胞检测等)上应用了这个框架,而且他们已经发布了用于浣熊检测的预训练模型。

大家可以在此处(https://github.com/experiencor/raccoon_dataset)下载浣熊数据集,立即开始使用此预训练模型!该数据集由200个图像组成(160个训练,40个验证)。整个模型预训练的权重在这里下载(https://1drv.ms/f/s!ApLdDEW3ut5feoZAEUwmSMYdPlY)。根据开发人员的说法,这些权重可以适用于所有单类别的目标检测器。

MobileNet

(https://keras.io/applications/#mobilenet)

8d9054d0f7b4b7503c57b6d79e2e303c8490155d

顾名思义,MobileNet是一种专为移动设备设计的架构,它是由谷歌建立的。我们在上面链接的这个特殊模型在流行的ImageNet数据库上提供了预训练权重(它是一个包含数百万张属于20,000多类的图像数据库)。

正如你所见,MobileNet的应用不仅限于目标检测,还涵盖各种计算机视觉任务,如面部属性、地标(landmark)识别、细粒度分类等。

成熟/未成熟的番茄分类

(https://github.com/fyrestorm-sdb/tomatoes)

175f269f6a267925755b6172b8b2d723d46b29f5

如果给你几百张西红柿的图片,你会如何对它们进行分类?是有缺陷/无缺陷,或成熟/未成熟?从深度学习的角度考虑,这个问题的首选技术是基于深度学习的图像处理。在这个分类问题中,我们可以使用预训练的Keras VGG16模型来识别给定图像中的番茄是成熟的还是未成熟。

该模型在来自ImageNet数据集的390张成熟和未成熟的番茄图像进行了训练,并在18种不同的番茄验证图像上进行了测试。 这些验证图像的总体结果如下:

查全率

0.8888889

查准率

0.9411765

F1得分

0.9142857

汽车分类

(https://github.com/michalgdak/car-recognition)

52d0f21ed49c71c348712c2f804ddd541298b31e

有许多方法可以对车辆进行分类,如通过它的车身风格,车门数量,开放式或封闭式车顶,座椅数量等等。在这个特殊问题中,我们必须将车辆图像分类为不同的类别。这些类包括品牌,型号,年份,例如2012款特斯拉Model S等等。为了开发这个模型,使用了斯坦福的汽车数据集(http://ai.stanford.edu/~jkrause/cars/car_dataset.html),其中包含19618类汽车的16185张图像。

使用预训练的VGG16,VGG19和InceptionV3模型训练模型。VGG网络的特点在于其结构简单,仅使用3×3卷积层堆叠起来以增加深度。16和19代表网络中的weight layers。

由于数据集很小,最简单的模型,即VGG16,是最准确的。使用交叉验证法训练VGG16网络的准确率达到66.11%。由于偏差/方差问题,像InceptionV3这样的更复杂的模型可能并不会太准确。

面部识别和再生

面部识别和再生(Facial Recognition and Regeneration)在深度学习社区中风靡一时。越来越多的技术和模型在以惊人的速度发展,以实现面部识别。它的应用涵盖了多个方面,如手机解锁,人群检测,面部表情分析等。

另一方面,面部再生是从面部的特写图像生成3D面部建模。仅仅从二维信息创建3D结构化对象是业界另一个需要思考的问题。面部再生的应用在电影和游戏行业中是巨大的。各种CGI模型的自动化,可以节省大量的时间和金钱。

本文的这一部分涉及这两个领域的预训练模型。

VGG-Face模型(https://gist.github.com/EncodeTS/6bbe8cb8bebad7a672f0d872561782d9)

540e95f0ebbdeb9ccaaeee7d674981b32642c3b5

从头开始创建面部识别模型是一项艰巨的任务。你需要寻找、收集,然后注释大量的图像才有希望建立一个像样的模型。因此,在该领域中使用预训练模型非常有意义。

VGG-Face(http://www.robots.ox.ac.uk/~vgg/data/vgg_face/)是一个包含2622个独特身份且规模超过两百万的数据集。这种预训练模型是通过以下方法设计的:

• vgg-face-keras :直接将vgg-face模型转换为keras模型
• vgg-face-keras-fc :首先将vgg-face Caffe模型转换为mxnet模型,然后将其转换为keras模型

单幅图像的三维人脸重建

(https://github.com/dezmoanded/vrn-torch-to-keras)

24dcbb9fa21bba7dbc4bc06c004aed4d9676aef2

这是一个非常酷的深度学习技术应用。大家可以从上面的图像推断出该模型如何工作,以便将面部特征重建为三维空间。

这种预训练模型最初是使用Torch(https://github.com/AaronJackson/vrn)开发的,然后转换到了Keras。

分割

语义图像分割 - Deeplabv3+

(https://github.com/bonlime/keras-deeplab-v3-plus)

a5f8936296c33e25e6cd827a1311eeb6fef261e5

语义图像分割是将语义标签分配到图像中每个像素的任务。这些标签可以是“天空”,“汽车”,“道路”,“长颈鹿”等。这项技术的作用是要找到物体的轮廓,从而也限制了精度要求(这就是它与图像分类的根本区别,具有更宽松的准确度要求)。

Deeplabv3是谷歌最新的语义图像分割模型。它最初是使用TensorFlow创建的,现在已经可以使用Keras实现。这个GitHub存储库还包含如何获取标签的代码,以及如何使用这个带有自定义类的预训练模型。当然也有如何训练自己的模型的指引。

器人手术分割(Robot Surgery Segmentation)

(https://github.com/ternaus/robot-surgery-segmentation)

a37e50197ce0daf66db719e0fabe3cd85ca69553

该模型试图解决机器人辅助手术场景中手术器械的图像分割问题。问题进一步分为两部分,如下:

  • 二进制分割:图像中的每个像素都标记出是工具还是背景

  • 多级分割:不同的工具或工具的不同部分与背景区分开来

这种预训练模型基于U-Net网络架构设计,并通过使用被称为LinkNet和TernausNet的最新语义分割神经网络进一步改进。该模型在8×225帧高分辨率立体相机图像序列上进行了训练。

其它

图像描述

(https://github.com/boluoyu/ImageCaption)

5ddf4c831ad0b3c100fb4c5ff22eff31bb3a9a52

还记得那些曾经玩过的根据图片生成文字的游戏么?那些就是基本的图像描述。它结合了NLP技术和Computer Vision技术来生成字幕。 这项任务长期以来一直是一项具有挑战性的任务,因为它需要具有无偏图像与场景的大型数据集。而且在满足上述所有约束后,还需要针对性的图像推理算法。

现在很多企业已经在使用这种技术了,那么我们怎样才能更方便的去研究这项技术呢?其实他的核心在于将给定的输入图像转换为简短且有意义的描述,而且编码器-解码器框架广泛用于解决这项核心任务。图像编码器正是卷积神经网络(CNN)。

这是在MS COCO数据集(http://cocodataset.org/#download)上训练的VGG 16预训练模型,其中解码器是预测给定图像的字幕的长短期记忆(LSTM)网络。

总结

深度学习是一个难以适应的棘手领域,它对硬件的算力有很高的要求,这也是会有这么多的预训练模型的原因。希望上面列出来的一些预训练模型可以帮到大家。


原文发布时间为:2018-08-15

本文作者:Joey

本文来自云栖社区合作伙伴“磐创AI”,了解相关信息可以关注“磐创AI”。

相关文章
|
6天前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现深度学习模型:智能心理健康评估
使用Python实现深度学习模型:智能心理健康评估
25 2
使用Python实现深度学习模型:智能心理健康评估
|
3天前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习入门:理解卷积神经网络(CNN)
【9月更文挑战第14天】本文旨在为初学者提供一个关于卷积神经网络(CNN)的直观理解,通过简单的语言和比喻来揭示这一深度学习模型如何识别图像。我们将一起探索CNN的基本组成,包括卷积层、激活函数、池化层和全连接层,并了解它们如何协同工作以实现图像分类任务。文章末尾将给出一个简单的代码示例,帮助读者更好地理解CNN的工作原理。
16 7
|
2天前
|
机器学习/深度学习 人工智能 自然语言处理
揭秘人工智能的魔法:深度学习入门
【9月更文挑战第15天】在这篇文章中,我们将探索深度学习的奥秘,从基本原理到实际应用,一步步揭示这一技术如何改变我们的世界。你将了解神经网络的核心概念,学习如何训练模型,并看到深度学习在不同领域的应用案例。无论你是初学者还是有一定基础的学习者,这篇文章都将为你打开一扇通往AI未来的大门。
|
3天前
|
机器学习/深度学习 存储 自然语言处理
深度学习中的模型压缩技术:从理论到实践
本文深入探讨了深度学习领域中的模型压缩技术,包括权重剪枝、量化、知识蒸馏和轻量级模型设计。通过对比实验结果,展示了这些技术在保持模型精度的同时,显著降低计算资源和存储需求。
|
2天前
|
机器学习/深度学习 数据可视化 算法框架/工具
使用Python实现深度学习模型:智能家庭安防系统
使用Python实现深度学习模型:智能家庭安防系统
13 1
|
3天前
|
机器学习/深度学习 数据可视化 搜索推荐
使用Python实现深度学习模型:智能睡眠监测与分析
使用Python实现深度学习模型:智能睡眠监测与分析
14 2
|
4天前
|
机器学习/深度学习 搜索推荐 TensorFlow
使用Python实现深度学习模型:智能饮食建议与营养分析
使用Python实现深度学习模型:智能饮食建议与营养分析
21 3
|
5天前
|
机器学习/深度学习 编解码 文件存储
深度学习中的模型压缩技术:从理论到实践
本文旨在探讨深度学习领域中的模型压缩技术,包括其背后的理论基础、常见方法以及在实际场景中的应用。我们将从基本的量化和剪枝技术开始,逐步深入到更高级的知识蒸馏和模型架构搜索。通过具体案例分析,本文将展示这些技术如何有效减少模型的大小与计算量,同时保持甚至提升模型的性能。最后,我们将讨论模型压缩技术未来的发展方向及其潜在影响。
|
5天前
|
机器学习/深度学习 自然语言处理 算法
深度学习中的模型压缩技术:从理论到实践
随着深度学习技术的迅速发展,复杂的神经网络模型在许多任务中取得了显著成果。然而,这些模型通常参数量大,计算复杂度高,难以部署到资源受限的设备上。为了解决这个问题,模型压缩技术应运而生。本文将探讨几种主流的模型压缩方法,包括权重剪枝、量化和知识蒸馏,介绍其基本原理、实现步骤以及在实际应用中的效果。通过具体案例分析,我们将展示如何有效地使用这些技术来减少模型的大小和计算需求,同时保持甚至提升模型的性能。最后,我们将讨论当前模型压缩技术面临的挑战和未来的发展方向。
|
5天前
|
机器学习/深度学习 搜索推荐 算法框架/工具
使用Python实现深度学习模型:智能运动表现分析
使用Python实现深度学习模型:智能运动表现分析
23 1