预训练模型在计算机视觉中的应用

深度学习领域,由于时间或计算资源的限制,从头开始构建模型并不总是可行的,这就是预训练模型存在的原因。预训练模型可以作为基准,用来改进现有模型或测试自己的模型。这些模型的潜力和可能性是巨大的。

本文将探讨Keras中的各种预训练模型,这些模型在计算机视觉领域有着广泛的应用。选择Keras的原因有两个:首先,认为它是神经网络初学者的优秀库;其次,想在整篇文章中坚持使用一个框架,这将帮助在不同模型之间转换,而不必担心框架问题。

鼓励在自己机器上尝试每个模型,理解它的工作原理,以及如何改进或调整内部参数。将这个主题分成一系列文章进行讨论。第二部分将专注于自然语言处理(NLP),第三部分将探讨音频和语音模型。目标是让使用这些现有解决方案快速进入这些领域,加速学习过程。

  • 对象检测
  • Mask R-CNN
  • YOLOv2
  • MobileNet
  • 成熟/未成熟番茄分类
  • 汽车分类
  • 面部识别和再生
  • VGG-Face模型
  • 从单张图像进行3D面部重建
  • 分割
  • 语义图像分割 - Deeplabv3
  • 机器人手术分割
  • 其他
  • 图像描述

对象检测计算机视觉领域中最常见的应用之一。它在生活的方方面面都有应用,从自动驾驶汽车到统计人群中的人数。本节讨论的预训练模型可以用于检测对象。

Mask R-CNN是一个灵活的框架,用于对象实例分割的目的。这个预训练模型是在Python和Keras上实现的Mask R-CNN技术的实现。它为给定图像中的每个对象实例生成边界框和分割掩码(如上图所示)。

这个GitHub仓库包含了大量资源,帮助开始。它包括Mask R-CNN的源代码、MS COCO的训练代码和预训练权重、用于可视化检测管道每个步骤的Jupyter笔记本等。

YOLOv2深度学习应用中超流行的对象检测框架。这个仓库包含了Keras中YOLOv2的实现。虽然开发者在各种对象图像上测试了框架——比如袋鼠检测、自动驾驶汽车、红细胞检测等,但他们发布了浣熊检测的预训练模型。

可以从这里下载浣熊数据集,并立即开始使用这个预训练模型!数据集包含200张图片(160张训练,40张验证)。可以从这里下载整个模型的预训练权重。根据开发者的说法,这些权重可以用于一个类别的对象检测器。

MobileNet顾名思义,MobileNet是为移动设备设计的架构。它是由谷歌构建的。上面链接的这个特定模型附带了在流行的ImageNet数据库上的预训练权重(它是一个包含数百万属于2万多类的图像的数据库)。

如所见,MobileNet的应用不仅限于对象检测,还涵盖了各种计算机视觉任务——比如面部属性、地标识别、细粒度分类等。

如果被赋予了几百张番茄图像,将如何对它们进行分类——比如说有缺陷/无缺陷,或者成熟/未成熟?在深度学习中,处理这个问题的首选技术是图像处理。在这个分类问题中,必须使用预训练的Keras VGG16模型来识别给定图像中的番茄是否成熟。

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

Recall: 0.8888889 Precision: 0.9411765 F1 Score: 0.9142857

有无数种方式对车辆进行分类——按其车身风格、门的数量、开放或封闭的车顶、座位数量等。在这个特定问题中,必须将汽车图像分类到各种类别中。这些类别包括制造商、型号、年份,例如2012年的特斯拉Model S。为了开发这个模型,使用了斯坦福的汽车数据集,其中包含196个类别的16,185张汽车图像。

该模型使用预训练的VGG16、VGG19和InceptionV3模型进行训练。VGG网络以其简单性为特点,只使用堆叠在一起的3×3卷积层,深度逐渐增加。16和19代表网络中的权重层数。

由于数据集较小,最简单的模型,即VGG16,是最准确的。在交叉验证数据集上训练VGG16网络的准确率为66.11%。更复杂的模型,如InceptionV3,由于偏差/方差问题,准确率较低。

面部识别在深度学习社区非常流行。越来越多的技术和模型正在以惊人的速度被开发出来,以设计面部识别技术。它的应用范围广泛——手机解锁、人群检测、通过分析面部进行情感分析等。

面部再生则是从面部的近照生成3D建模面部。从纯粹的二维信息中创建3D结构化对象是行业中另一个深思熟虑的问题。面部再生的应用在电影和游戏行业中非常广泛。各种CGI模型可以自动化,从而节省大量时间和金钱。

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

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

VGG-Face是一个包含2622个独特身份和超过两百万张面部的数据库。这个预训练模型是通过以下方法设计的:

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

这是一个非常酷的深度学习实现。可以根据上面的图像推断这个模型如何工作,以将面部特征重建到三维空间。

这个预训练模型最初是使用Torch开发的,然后转移到Keras。

语义图像分割是给图像中的每个像素分配语义标签的任务。这些标签可以是“天空”、“汽车”、“道路”、“长颈鹿”等。这项技术所做的是找到对象的轮廓,从而对准确性要求进行限制(这与图像级分类不同,后者的准确性要求更宽松)。

Deeplabv3是谷歌最新的语义图像分割模型。它最初是使用TensorFlow创建的,现在已经使用Keras实现。这个GitHub仓库还有代码,说明如何获取标签,如何使用这个预训练模型自定义类别数量,当然还有如何训练自己的模型。

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

二元分割:图像中的每个像素被标记为器械或背景

多类分割:不同的器械或器械的不同部分与背景区分开

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

图像描述就是被给定图像并必须想出描述的游戏。它结合了NLP和计算机视觉来产生标题。

这项任务长期以来一直是一个挑战,因为它需要大量无偏见的图像和场景的大型数据集。鉴于所有这些限制,算法必须对任何给定的图像进行泛化。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485