计算机视觉

最近更新时间:2019-08-22 20:35:10

AlexNet

2012 年 AlexNet 摘下 ILSVRC 比赛的桂冠,充分展示了卷积神经网络在视觉领域的实力。同之前的 Lenet、Cifarnet 等一样,AlexNet 在大体结构上仍遵循了传统 CNN 的原则,由卷积、下采样和全连接层构成,但在深度和宽度上都有加深。除此以外,为了更好的训练和泛化效果,AlexNet 在数据处理和训练技巧上也利用了很多值得借鉴的点,如数据增强、dropout、Relu 激活、局部相应归一化(LRN)等。为了使在 AlexNet 在智能钛机器学习上也能达到相当的效果,我们将这些技巧以可选择的参数形式融合进了算法模块中,详情可以参见下文的算法示例。

训练节点

  • 数据形式:
    支持 tfrecord 格式,可通过 convert_to_tfrecord 节点将原始 jpg 或 png 图像转换成该形式。
  • 算法 IO 参数。
  • 数据输入:输入数据(模型训练时则为训练集数据,如${cos}/person/.../train_tfrecord),如训练集太大,可分成多个 record 文件。
  • 测试数据:用于模型训练时的验证数据,与训练集格式一致。
  • 可视化文件存储路径:存储用于 TensorBoard 可视化的 events 文件的目录。
  • 初始化模型:指定从某个模型继续训练的路径,如为0则从头开始训练(用于模型微调或训练过程被意外打断后的快速恢复)。
  • 类别标签映射文件:图像类别映射到整数标签的文件,也即 split dataset 步骤时产生的类别标签映射文件 label_map.txt。
  • 算法参数。
  • 类别数:分类任务中的类别数。
  • 批量处理大小:训练过程中的 batch_size。
  • 迭代次数:训练过程的总迭代次数。
  • 初始学习率:训练过程的初始学习率。
  • 学习率衰减步数:每隔 n 轮迭代衰减一次学习率。
  • 学习率衰减因子:每达到衰减步数时会将学习率乘上衰减因子,以此来减小学习率。

预测节点
与训练节点保持一致。

Inception

从原理上来说更深和更宽的卷积神经网络具有更强的表征能力,但纯粹增大网络的缺点也显而易见,包括参数太多带来的复杂度太大,容易过拟合和梯度弥散等。Inception 的出现就是为了解决如何在增加网络深度和宽度的同时减小网络参数的问题。最开始的 inception 网络由一个个的 Inception 模块堆叠而成,inception 模块由1 x 1、3 x 3、5 x 5的卷积和3 x 3的 pooling 堆叠,一方面增加了网络的 width,另一方面也增加了网络对尺度的适应性。Inception 网络经过多次迭代和更新已经形成了 V1、V2、V3 和 V4 四个版本。在智能钛机器学习平台的 Inception 模块中可以选择不同版本进行训练。详情请参见下文的算法示例。

训练节点

  • 数据形式:
    支持 tfrecord 格式,可通过 convert_to_tfrecord 节点将原始 jpg 或 png 图像转换成该形式。
  • 算法 IO 参数。
  • 数据输入:输入数据(模型训练时则为训练集数据,如${cos}/person/.../train_tfrecord),如训练集太大,可分成多个 record 文件。
  • 测试数据:用于模型训练时的验证数据,与训练集格式一致。
  • 可视化文件存储路径:存储用于 TensorBoard 可视化的 events 文件的目录。
  • 初始化模型:指定从某个模型继续训练的路径,如为0则从头开始训练(用于模型微调或训练过程被意外打断后的快速恢复)。
  • 类别标签映射文件:图像类别映射到整数标签的文件,即 split dataset 步骤时产生的类别标签映射文件 label_map.txt。
  • 算法参数。
  • 网络名称:四个 inception 版本,可选其一。
  • 类别数:分类任务中的类别数。
  • 批量处理大小:训练过程中的 batch_size。
  • 迭代次数:训练过程的总迭代次数。
  • 初始学习率:训练过程的初始学习率。
  • 学习率衰减步数:每隔 n 轮迭代衰减一次学习率。
  • 学习率衰减因子:每达到衰减步数时会将学习率乘上衰减因子,以此来减小学习率。

预测节点
与训练节点保持一致。

MobileNet

MobileNet 是 Google 针对手机等嵌入式设备提出的一种轻量级的深层神经网络,类似模型压缩,其核心思想是通过卷积计算的分解来有效减少网络参数和计算复杂度。MobileNet 将标准卷积分解成一个深度卷积和一个点卷积(1 × 1卷积核)。深度卷积将每个卷积核应用到每一个通道,而1 × 1卷积用来组合通道卷积的输出,这种分解可以有效减少计算量,降低模型大小,同时保证模型准确率在可容忍的下降范围内。MobileNet 根据网络宽度的不同衍生出了四种模式,在智能钛机器学习上课通过“网络名称”参数进行选择,不同模式后的数字如“057”,“050”等是宽度因子,是一个介于0和1之间的数,表示附加于网络的通道数,简单来说就是新网络中每一个模块要使用的卷积核数量相较于标准的 MobileNet 比例。通过该宽度因子可以非常有效的将计算量和参数数量约减到其平方倍。详情请参考下文算法示例。

训练节点

  • 数据形式:
    支持 tfrecord 格式,可通过 convert_to_tfrecord 节点将原始 jpg 或 png 图像转换成该形式。
  • 算法 IO 参数。
  • 数据输入:输入数据(模型训练时则为训练集数据,如${cos}/person/.../train_tfrecord),如训练集太大,可分成多个 record 文件。
  • 测试数据:用于模型训练时的验证数据,与训练集格式一致。
  • 可视化文件存储路径:存储用于 TensorBoard 可视化的 events 文件的目录。
  • 初始化模型:指定从某个模型继续训练的路径,如为0则从头开始训练(用于模型微调或训练过程被意外打断后的快速恢复)。
  • 类别标签映射文件:图像类别映射到整数标签的文件,也即 split dataset 步骤时产生的类别标签映射文件 label_map.txt。
  • 算法参数。
  • 网络名称:4种 MobileNet 网络模式(宽度因子的不同),可选其一。
  • 类别数:分类任务中的类别数。
  • 批量处理大小:训练过程中的 batch_size。
  • 迭代次数:训练过程的总迭代次数。
  • 初始学习率:训练过程的初始学习率。
  • 学习率衰减步数:每隔 n 轮迭代衰减一次学习率。
  • 学习率衰减因子:每达到衰减步数时会将学习率乘上衰减因子,以此来减小学习率。

预测节点
与训练节点保持一致。

LeNet

LeNet 是一个用来识别手写数字的最经典的卷积神经网络,是 Yann LeCun 在1998年设计并提出的,是早期卷积神经网络中最有代表性的实验系统之一。

训练节点

  • 数据形式:
    支持 tfrecord 格式,可通过 convert_to_tfrecord 节点将原始 jpg 或 png 图像转换成该形式。
  • 算法 IO 参数。
  • 数据输入:输入数据(模型训练时则为训练集数据,如${cos}/person/.../train_tfrecord),如训练集太大,可分成多个 record 文件。
  • 测试数据:用于模型训练时的验证数据,与训练集格式一致。
  • 初始化模型:指定从某个模型继续训练的路径,如为0则从头开始训练(用于模型微调或训练过程被意外打断后的快速恢复)。
  • 类别标签映射文件:图像类别映射到整数标签的文件,也即 split dataset 步骤时产生的类别标签映射文件 label_map.txt。
  • 算法参数。
  • 类别数:分类任务中的类别数。
  • 批量处理大小:训练过程中的 batch_size。
  • 迭代次数:训练过程的总迭代次数。
  • 初始学习率:训练过程的初始学习率。
  • 学习率衰减步数:每隔 n 轮迭代衰减一次学习率。
  • 学习率衰减因子:每达到衰减步数时会将学习率乘上衰减因子,以此来减小学习率。

预测节点
与训练节点保持一致。

ResNet

ResNet(残差网络)是在2015年为解决训练很深的网络的时候出现的梯度退化的问题而提出的。由于使用了 shortcut,ResNet 把原来需要学习逼近的未知函数 H(x) 进行恒等映射,变成了逼近 F(x) = H(x) - x 的一个函数,两种表达的效果相同,但 F(x) 的优化难度却比 H(x) 小的多。同时针对较深(层数大于等于50)的网络提出了 BottleNeck 结构,可以减少运算的时间复杂度。TI 上集成的 resnet 模块有8种网络模式供选择,v1 和 v2 在 shortcut 结构体构建方式上有区别,50、100等数字表示不同的网络深度,具体可参见 resnet 论文。

训练节点

  • 数据形式:
    支持 tfrecord 格式的数据,可通过 convert_to_tfrecord 节点将原始 jpg 或 png 图像转换成该形式。
  • 算法 IO 参数。
  • 训练数据输入:输入数据(模型训练时则为训练集数据,如${cos}/person/.../train_tfrecord),训练集太大时,可分成多个 record 文件。
  • 验证数据输入:用于模型训练时的验证数据,与训练集格式一致。
  • 模型目录:存放模型文件和日志文件的目录(如果目录中已有模型文件,下次训练时将加载目录中最新的模型文件。因此,如果改变了网络结构或更换了数据,请更换或清空模型目录)。
  • label_map 文件所在目录:记录标签和 ID 对应关系的 label_map.txt 文件所在目录。如使用了 split_dataset 节点,可将 split_dataset 节点的输出连接到此处。
  • 算法参数。
  • 模型名称:八个 resnet 版本,可选其一。
  • 学习率:训练过程的初始学习率。
  • batch_size:训练过程中的 batch_size。
  • 训练步数:训练过程的总迭代次数。
  • 是否模型微调:支持在已有的训练好的模型上进行微调(通常用于迁移学习),如填“是”请在下方填写完整模型路径。
  • 优化器:用于优化模型参数的优化算法。

预测节点
与训练节点保持一致。

TensorBoard Visualization

TensorBoard 是 TensorFlow 提供的一组可视化工具(a suite of visualization tools),可以帮助开发者方便的理解、调试、优化TensorFlow 程序。

算法参数

  • tensorboard 路径:存储 events 文件的路径。
  • 展示时间(分钟):TensorBoard 展示的最长时间。

VGG

VGG16 继承了 AlexNet 的框架,但其通过加深卷积层数的方法获得了比 AlexNet 更高的图像识别率,是一种比 AlexNet 更深的网络结构。详情请参考下文算法示例。
AlexNet 与 VGG 相比有以下不同:

  • 有较多的连续的 convolution块和较小的filter size(3 x 3),这样做的好处是减少权重个数,利于网络的训练和泛化;
  • 通道数(channels)增多,使网络可以对输入提取更丰富的特征。VGG 论文发表时根据网络结构的复杂度提出了三种结构:VGG_a、VGG_16 和 VGG_19,在 TI-ONE 中可以根据需要进行选择。

训练节点

  • 数据形式:
    支持 tfrecord 格式,可通过 convert_to_tfrecord 节点将原始 jpg 或 png 图像转换成该形式。
  • 算法 IO 参数。
  • 数据输入:输入数据(模型训练时则为训练集数据,如${cos}/person/.../train_tfrecord),如训练集太大,可分成多个 record 文件。
  • 测试数据:用于模型训练时的验证数据,与训练集格式一致。
  • 可视化文件存储路径:存储用于 TensorBoard 可视化的 events 文件的目录。
  • 初始化模型:指定从某个模型继续训练的路径,如为0则从头开始训练(用于模型微调或训练过程被意外打断后的快速恢复)。
  • 算法参数。
  • 网络名称:三个 VGG 版本,可选其一。
  • 类别数:分类任务中的类别数。
  • 类别标签映射文件:图像类别映射到整数标签的文件,也即 split dataset 步骤时产生的类别标签映射文件 label_map.txt。
  • 批量处理大小:训练过程中的 batch_size。
  • 迭代次数:训练过程的总迭代次数。
  • 初始学习率:训练过程的初始学习率。
  • 学习率衰减步数:每隔n轮迭代衰减一次学习率。
  • 学习率衰减因子:每达到衰减步数时会将学习率乘上衰减因子,以此来减小学习率。

预测节点
与训练节点保持一致。

YOLO

YOLO(You Only Look Once)是目前较流行的目标检测算法。与其他算法如 faster RCNN、SSD 等相比,YOLO 的显著特点是检测速度非常快,同时检测性能也不低。YOLO 把物体检测问题当成回归问题来处理,用一个卷积神经网络可以从输入图像直接预测 bounding box 的类别概率,与 faster RCNN 等算法在结构上有较大区别。除此之外,YOLO 基于图像的全局信息进行预测,在误检测(将背景检测为物体)方面的错误率更低,同时泛化能力强,在真实图像数据上的训练模型可以泛化到图画或其他人为得到的物体上。YOLO 从出现到现在有三个版本:YOLOv1、YOLOv2 和 YOLOv3。在检测性能(包括速度和准确率)上越来越好,具体细节可参考相关论文。在智能钛机器学习上我们基于 PyTorch 框架集成了 YOLOv2 算法,可以根据自己的场景训练模型和做预测。

训练节点

  • 数据形式
  • 支持 jpg 格式图像和 PASCLA VOC 格式的 xml 标签文件。数据路径下需包含以下4个内容:
  • 命名为 Images 的文件夹,里面包含所有的 jpg 格式的图像。
  • 命名为 Annotations 的文件夹,里面包含所有 xml 标签文件,Images 文件夹中的每张图对应一个 xml 文件,名称与图像名称一致(除了.jpg 和.xml 后缀不一样)。
  • train.txt 文件,按行写明图像名称,算法会按照图像名去 Images 文件夹和 Annotations 文件夹中找到对应的图像和标签数据。
  • class_name.txt 文件,按行写明 String 类型的类别名称和 Int 类型的分类标签。
  • 算法 IO 参数:
    数据路径:该路径下需包含上述数据形式下写明的4点内容。
  • 算法参数。
  • 预训练模型:在此模型的基础上继续训练,用于模型微调或训练过程被打断后的快速恢复,一般在开始训练时该模型为 darknet19.weights.npz。
  • 衰减节点(epoch):用于指定训练到某些 epoch 时对学习率进行衰减,如60、90。
  • 类别标签映射文件:图像类别映射到整数标签的文件,也即 split dataset 步骤时产生的类别标签映射文件 label_map.txt。
  • 学习率衰减因子:每达到衰减步数时会将学习率乘上衰减因子,以此来减小学习率。
  • 训练 epoch 数:指定训练多少个 epoch 后停止训练。
  • 初始学习率:初始学习率。
  • batch_size:训练过程中的 batch_size。
  • 模型保存间隔:每隔n次迭代保存一次模型(用于应对训练过程意外中断的情况)。
  • 测试间隔:每隔n次迭代对测试集数据做一次测试(用于检验训练效果,掌握训练走向)。
  • 可视化文件存储目录:虽然这里是基于 PyTorch 框架的算法,但依然可以用 TensorBoard 来可视化训练过程。

预测节点

  • 数据形式:
    jpg 格式图像。
  • 模型 IO 参数。
  • 输入图像:将需要被预测的图像放在该路径下。
  • 输出路径:保存预测得到的示例图像和 txt 结果的路径。
  • 模型参数。
  • 类别映射文件:即训练节点中介绍的数据形式下的 class_name.txt 文件。