在这个教程中,将展示如何使用Roboflow来策划一个高质量的计算机视觉数据集,该数据集与NVIDIA的TAO Toolkit兼容。将逐步进行数据集的标注、创建、预处理和增强、生成版本、导出数据,并设置TAO Toolkit配置以使用数据。
首先,前往创建一个账户。会看到一个创建项目的选项,这是将存储数据和生成数据集的地方。要开始,请按照文档创建一个数据集。
在“上传”标签下,可以上传想要包含在数据集中的图片或视频。最终,NVIDIA TAO模型将基于这些数据进行训练,因此需要确保数据是干净的,并且代表了模型在现实世界中将被应用的场景。
在“标注”标签下,将看到哪些数据还需要被标注。标注是指对希望在训练数据中被检测到的每个对象进行标记。请记住,这是模型学习的内容——准确的标注将有助于训练一个更准确的模型。
例如,标注不同种类的水下生物。在“生成”标签下,可以从标注数据中生成一个数据集。在这里,可以选择对数据集应用预处理和增强。
预处理和增强是对数据集中的图像应用的转换。预处理步骤,如调整大小或自动定向,适用于所有图像——这在所有图像需要相同大小时非常有用。
以下是Roboflow内置的一些便捷处理步骤:
另一方面,增强是随机应用于一部分标注图像,并生成新的标注图像。通过应用模糊和随机噪声等增强,模型将学会对相机伪影更加健壮。
当选择了想要使用的预处理和增强步骤后,点击“生成”。恭喜!已经成功创建了一个计算机视觉数据集,并通过图像增强扩展了其大小。
从下载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的新文件夹来工作。
请务必仔细检查所有路径,因为它们可能在设置中有所不同!
在版本下,点击导出。对于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训练的模型进行推理示例