在图像识别领域,模型的准确性和加载自定义数据集的便捷性是两个关键因素。随着技术的不断进步,虽然模型的准确性在稳步提高,但加载数据集的简便性似乎并未有太大变化。这时,Roboflow的作用就显得尤为重要。
VGG-16模型简介
VGG-16模型由牛津大学视觉几何组的研究人员在2015年提出。该模型在ImageNet上达到了92.7%的前5名测试准确率,使其成为追求准确性能的首选架构之一。VGG-16的核心思想在于使用大量小型卷积滤波器,这使得模型能够学习更复杂的像素关系数据,即图像中的细节。
在Google Colab中的实现
将使用TensorFlow中的VGG-16 Colab笔记本和Roboflow来准备数据。VGG-16实现基于TensorFlow-Slim团队的工作。现在,可以打开来继续操作!
设置笔记本环境
在笔记本的第一部分,将下载所需的库和包,以确保环境为成功做好准备。这包括TensorFlow研究团队的TF-Slim实现,克隆TensorFlow模型,以及用于绘图的标准库matplotlib。值得注意的是,还将使用Colab笔记本的魔术命令来运行Tensorflow 1.x,以兼容TF-Slim。
从Roboflow获取数据
接下来,将从Roboflow的代码片段中下载数据。具体来说,将创建一个分类数据集,应用预处理步骤(例如调整为喜欢的长宽比),并添加任何增强以增加训练数据集的大小,同时减少过拟合。VGG-16期望的输入大小为224x224,因此至少应该将图像调整为正方形。是否保留长宽比(例如使用黑色填充、反射像素或中心裁剪)取决于上下文问题。记得考虑如何为计算机视觉调整图像大小。
增强可以增加数据集中的图像数量。对分类数据进行增强特别有效:可以直接在Roboflow中通过单击一下来修改场景的亮度、对比度、添加噪声、旋转等。此外,还能够确定想要应用的增强数量。
在笔记本示例中,使用了公开可用的。花卉数据集版本只包含两种花卉品种:雏菊和蒲公英。
准备输入管道
一旦数据被加载到笔记本中,将适应并创建特定于TF-Slim实现期望的TFRecord文件。幸运的是,脚本大部分已经为编写好了。在考虑自己的问题时,特别注意设置图像验证集大小和训练大小时。
加载预训练权重
在笔记本中,在针对特定问题(花卉)进行训练之前,将注意到首先加载了一个在ImageNet上训练的通用模型。这意味着加载了一个带有ImageNet权重的VGG-16模型——意味着网络可以立即识别ImageNet的2000个图像中的每一个。(如果数据集碰巧包含了ImageNet中已经包含的类别,理论上,可以在这里停止,拥有一个训练好的模型!)
在笔记本中,请注意输出了ImageNet在识别维基百科上的校车时的成功情况。
将VGG-16适应到数据集
从这里开始,加载特定数据集及其类别,并开始从学习ImageNet的先前权重进行训练。值得注意的是,将不得不更新网络的最后几层,以意识到现在的类别比ImageNet的2000个要少!
这一步的训练时间可能会有所不同。关键是,Colab提供免费的GPU计算,但内核不会持续超过12小时,并且在不活动45分钟后会报告死亡——所以不要在等待这个模型训练时观看(太多)Netflix。
进行推理
最后,使用模型的新权重对它以前未见过的测试集中的图像进行推理。模型对向日葵过于自信,训练有限。
总的来说,这个过程相当直接:(1)获取数据(2)设置一个预训练模型(3)将该模型适应到问题上。