利用Roboflow和NVIDIA TAO Toolkit创建高质量计算机视觉数据集

在这个教程中,将展示如何使用Roboflow来策划一个高质量的计算机视觉数据集,该数据集与NVIDIA的TAO Toolkit兼容。将逐步进行数据集的标注、创建、预处理和增强、生成版本、导出数据,并设置TAO Toolkit配置以使用数据。

开始数据集

首先,前往创建一个账户。会看到一个创建项目的选项,这是将存储数据和生成数据集的地方。要开始,请按照文档创建一个数据集。

在“上传”标签下,可以上传想要包含在数据集中的图片或视频。最终,NVIDIA TAO模型将基于这些数据进行训练,因此需要确保数据是干净的,并且代表了模型在现实世界中将被应用的场景。

上传用于训练数据的图片进行标注

在“标注”标签下,将看到哪些数据还需要被标注。标注是指对希望在训练数据中被检测到的每个对象进行标记。请记住,这是模型学习的内容——准确的标注将有助于训练一个更准确的模型。

例如,标注不同种类的水下生物。在“生成”标签下,可以从标注数据中生成一个数据集。在这里,可以选择对数据集应用预处理和增强。

在准备数据集时应用预处理和增强

预处理和增强是对数据集中的图像应用的转换。预处理步骤,如调整大小或自动定向,适用于所有图像——这在所有图像需要相同大小时非常有用。

以下是Roboflow内置的一些便捷处理步骤:

  • 自动定向:丢弃EXIF旋转并标准化像素排序。
  • 调整大小:缩小图像以减小文件大小并加快训练速度。对于使用NVIDIA TAO Toolkit,所有的图像需要相同大小。建议将所有图像调整为640 x 640像素。

另一方面,增强是随机应用于一部分标注图像,并生成新的标注图像。通过应用模糊和随机噪声等增强,模型将学会对相机伪影更加健壮。

  • 翻转:这有助于模型对主题方向不敏感。
  • 灰度:这迫使模型学习在没有颜色输入的情况下进行分类。
  • 噪声:添加噪声有助于模型对相机伪影更加有韧性。
  • 马赛克:将几个训练图像连接在一起,可以提高对小物体的准确性。

当选择了想要使用的预处理和增强步骤后,点击“生成”。恭喜!已经成功创建了一个计算机视觉数据集,并通过图像增强扩展了其大小。

使用自定义数据集与NVIDIA TAO Toolkit

从下载RoboflowJupyter Notebook。要使用NVIDIA Tao Toolkit,需要一个支持的GPU——可以在NVIDIA的网站上找到完整的。在A10G EC2 AWS实例上运行了这个笔记本。

接下来,通过遵循NVIDIA关于TAO Toolkit的页面设置一些关键依赖。具体来说,确保安装了docker、nvidia-container-toolkit,并使用docker login nvcr.io登录NVIDIA的docker仓库。

import sys !{sys.executable} -m pip install nvidia-tao !{sys.executable} -m pip install roboflow

检查tao是否成功安装:

!tao

如果上述命令没有成功,尝试以下命令:

!/home/<insert your username>/.local/bin/tao

TAO Toolkit使用Docker容器进行训练,这意味着必须设置配置文件,以指示NVIDIA Docker容器可以访问什么。在定义tao_mounts的单元格中,更改source以指示将要工作的文件夹或目录。创建了一个名为project的新文件夹来工作。

请务必仔细检查所有路径,因为它们可能在设置中有所不同!

从Roboflow导出数据集

在版本下,点击导出。对于NVIDIA TAO Toolkit,将选择以COCO格式导出。点击“显示下载代码”,将代码片段复制到相应的Jupyter Notebook单元格中,并运行它以下载数据集。

接下来,在下一个单元格中编辑dataset_config以反映数据集的位置。希望以容器可以访问的术语来定义位置——回顾tao_mounts以查看文件夹目的地。

确认数据集位于之前创建的工作文件夹内(这将确保容器可以访问它)。

对来说,Aquarium-Combined-3位于project内,将其映射到tao_config中的/workspace/project。因此,dataset_config中数据集的位置应该是/workspace/project/Aquarium-Combined-3。

NVIDIA TAO Toolkit期望数据以TFRecords格式存在,可以通过运行以下命令进行转换:

!/home/ubuntu/.local/bin/tao yolo_v4 dataset_convert -d "/workspace/project/coco_config.json" --gpu_index 0 -o "/workspace/project/output.tfrecords"

创建一个新的文件夹,仅用于TFRecord文件:

!mkdir project/output_tfrecords

将.tfrecord文件移动到新文件夹:

!mv project/output.tfrecords* project/output_tfrecords

现在,在output_tfrecords内,可以看到新生成的TFRecords:

Roboflow提供了一个简单的拖放格式转换工具,如果数据在其他格式中并且需要转换为TFRecords,可以免费使用。

使用Roboflow将27种注释格式转换为TFRecord

配置训练模型

在experiment_spec中,将配置需要训练模型的所有其他内容。遵循NVIDIA关于可以配置的各种参数的文章。可能需要修改dataset_config下的data_sources以反映自己的TFRecord位置,以及target_class_mapping以反映自己数据集的标签。

最后,可以通过运行以下命令来训练一个YOLOv4模型:

!tao yolo_v4 train -e "/workspace/project/experiment_spec.json" -r "/workspace/project/run2" -k "roboflow" --use_amp

使用Roboflow和NVIDIA TAO Toolkit构建

对于接下来的步骤,遵循NVIDIA关于导出训练模型的部分,并将其实现在TensorRT和DeepStream等平台上。

可以使用以下命令对训练的TAO模型进行推理。请确保更改路径以反映experiment_spec.json、.tlt模型位置,以及标记图像的输出位置。

!tao yolo_v4 inference -i "/workspace/project/Aquarium-Combined-3/test" -o "/workspace/project/Aquarium-Combined-3/test_output" -e "/workspace/project/experiment_spec.json" -m "/workspace/project/run1/weights/yolov4_resnet18_epoch_040.tlt" -k "roboflow"

使用TAO训练的模型进行推理示例

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