Mask RCNN 与 TAO Deploy
从 tao model export
生成的 Mask RCNN uff`
文件被用作 tao deploy
的输入,以生成优化的 TensorRT 引擎。有关训练 Mask RCNN 的更多信息,请参阅Mask RCNN 训练文档。
可以使用与 tao model mask_rcnn export
命令相同的 spec 文件。
使用以下命令运行 Mask RCNN 引擎生成
tao deploy mask_rcnn gen_trt_engine [-h] [-v]
-m MODEL_PATH
-e EXPERIMENT_SPEC
-r RESULTS_DIR
[-k KEY]
[--data_type {fp32,fp16,int8}]
[--engine_file ENGINE_FILE]
[--cal_image_dir CAL_IMAGE_DIR]
[--cal_data_file CAL_DATA_FILE]
[--cal_cache_file CAL_CACHE_FILE]
[--cal_json_file CAL_JSON_FILE]
[--max_batch_size MAX_BATCH_SIZE]
[--min_batch_size MIN_BATCH_SIZE]
[--opt_batch_size OPT_BATCH_SIZE]
[--batch_size BATCH_SIZE]
[--batches BATCHES]
[--max_workspace_size MAX_WORKSPACE_SIZE]
[-s STRICT_TYPE_CONSTRAINTS]
[--force_ptq FORCE_PTQ]
[--gpu_index GPU_INDEX]
[--log_file LOG_FILE]
必需参数
-m, --model_path
: 要转换的.uff
或.etlt
模型-e, --experiment_spec
: 用于设置 TensorRT 引擎生成的实验 spec 文件。这应与导出规范文件相同。-r, --results_dir
: 将转储 JSON 状态日志文件的目录
可选参数
-h, --help
: 显示此帮助消息并退出。-k, --key
: 用于加载.etlt
模型的用户特定编码密钥--data_type
: 期望的引擎数据类型。选项为fp32
、fp16
、int8
。默认值为fp32
。校准缓存将在 INT8 模式下生成。如果使用 INT8,则需要以下 INT8 参数。--engine_file
: 序列化的 TensorRT 引擎文件的路径。请注意,此文件是硬件特定的,不能在 GPU 之间通用。由于 TensorRT 引擎文件是硬件特定的,除非部署 GPU 与训练 GPU 完全相同,否则您不能使用此引擎文件进行部署。-s, --strict_type_constraints
: 一个布尔标志,指示在构建 TensorRT 引擎时是否应用 TensorRT 严格类型约束。--gpu_index
: 用于导出模型的(离散)GPU 的索引。如果机器安装了多个 GPU,您可以指定 GPU 的索引来运行导出。请注意,gen_trt_engine 只能在单个 GPU 上运行。--log_file
: 日志文件的路径。默认路径为“stdout”。
INT8 引擎生成必需参数
--cal_data_file
: 为校准引擎生成的 Tensorfile。如果与--cal_image_dir
一起使用,这也可以是输出文件。--cal_image_dir
: 用于校准的图像目录。
--cal_image_dir
参数用于图像,并应用必要的预处理以在 --cal_data_file
参数中提到的路径生成 tensorfile,该文件又用于校准。生成的 tensorfile 中的批次数量从设置为 --batches
参数的值获得,batch_size
从设置为 --batch_size
参数的值获得。请确保在 --cal_image_dir
中提到的目录中至少有 batch_size * batches
张图像。有效的图像扩展名为 .jpg、.jpeg 和 .png。在这种情况下,校准张量的 input_dimensions
源自 .etlt
模型的输入层。
INT8 引擎生成可选参数
--cal_cache_file
: 用于保存校准缓存文件的路径。默认值为./cal.bin
。--cal_json_file
: 包含 QAT 模型张量比例的 json 文件的路径。如果要为 QAT 模型生成引擎,则需要此参数。--batches
: 用于校准的批次数量。默认值为 10。--batch_size
: 用于校准的批次大小。默认值为 1。--max_batch_size
: TensorRT 引擎的最大批次大小。默认值为 1。--min_batch_size
: TensorRT 引擎的最小批次大小。默认值为 1。--opt_batch_size
: TensorRT 引擎的最佳批次大小。默认值为 1。--max_workspace_size
: TensorRT 引擎的最大工作区大小,单位为 Gb。默认值为:(2 Gb)。--force_ptq
: 一个布尔标志,用于强制对导出的 etlt 模型执行后训练量化。
当为启用 QAT 训练的模型生成 TensorRT 引擎时,需要由 cal_cache_file
参数定义的张量比例因子。但是,请注意,当前版本的 QAT 不原生支持 Jetson 中的 DLA int8 部署。为了在具有 DLA int8
的 Jetson 上部署此模型,请使用 --force_ptq
标志以使用 TensorRT 后训练量化来生成校准缓存文件。
示例用法
以下是使用 gen_trt_engine
命令生成 INT8 TensorRT 引擎的示例
tao deploy mask_rcnn gen_trt_engine -m /workspace/mrcnn.uff \
-e /workspace/default_spec.txt \
-r /export \
--cal_image_dir /workspace/raw-data/val2017 \
--data_type int8 \
--batch_size 8 \
--batches 10 \
--cal_cache_file /export/cal.bin \
--cal_data_file /export/cal.tensorfile \
--engine_file /export/int8.engine
用于评估的批次大小将与引擎生成期间使用的 --max_batch_size
相同。标签文件将从 spec 文件中的 dataset_config.val_json_file
派生。与 TAO 评估 spec 文件相同的 spec 文件。示例 spec 文件
data_config{
image_size: "(832, 1344)"
augment_input_data: True
eval_samples: 500
training_file_pattern: "/workspace/tao-experiments/data/train*.tfrecord"
validation_file_pattern: "/workspace/tao-experiments/data/val*.tfrecord"
val_json_file: "/workspace/tao-experiments/data/raw-data/annotations/instances_val2017.json"
# dataset specific parameters
num_classes: 91
skip_crowd_during_training: True
}
maskrcnn_config {
nlayers: 50
arch: "resnet"
freeze_bn: True
freeze_blocks: "[0,1]"
gt_mask_size: 112
# Region Proposal Network
rpn_positive_overlap: 0.7
rpn_negative_overlap: 0.3
rpn_batch_size_per_im: 256
rpn_fg_fraction: 0.5
rpn_min_size: 0.
# Proposal layer.
batch_size_per_im: 512
fg_fraction: 0.25
fg_thresh: 0.5
bg_thresh_hi: 0.5
bg_thresh_lo: 0.
# Faster-RCNN heads.
fast_rcnn_mlp_head_dim: 1024
bbox_reg_weights: "(10., 10., 5., 5.)"
# Mask-RCNN heads.
include_mask: True
mrcnn_resolution: 28
# training
train_rpn_pre_nms_topn: 2000
train_rpn_post_nms_topn: 1000
train_rpn_nms_threshold: 0.7
# evaluation
test_detections_per_image: 100
test_nms: 0.5
test_rpn_pre_nms_topn: 1000
test_rpn_post_nms_topn: 1000
test_rpn_nms_thresh: 0.7
# model architecture
min_level: 2
max_level: 6
num_scales: 1
aspect_ratios: "[(1.0, 1.0), (1.4, 0.7), (0.7, 1.4)]"
anchor_scale: 8
# localization loss
rpn_box_loss_weight: 1.0
fast_rcnn_box_loss_weight: 1.0
mrcnn_weight_loss_mask: 1.0
}
使用以下命令运行 Mask RCNN 引擎评估
tao deploy mask_rcnn evaluate [-h]
-e EXPERIMENT_SPEC
-m MODEL_PATH
-r RESULTS_DIR
[-i IMAGE_DIR]
[--gpu_index GPU_INDEX]
[--log_file LOG_FILE]
必需参数
-e, --experiment_spec
: 用于评估的实验 spec 文件。这应与 tao evaluate 规范文件相同。-m, --model_path
: 要运行评估的引擎文件。-r, --results_dir
: 将存储评估结果的目录。
可选参数
-i, --image_dir
: 测试图像所在的目录
示例用法
以下是使用 evaluate
命令通过 TensorRT 引擎运行评估的示例
tao deploy mask_rcnn evaluate -m /export/int8.engine \
-e /workspace/default_spec.txt \
-i /workspace/raw-data/val2017 \
-r /workspace/tao-experiments/evaluate
tao deploy mask_rcnn inference [-h]
-e EXPERIMENT_SPEC
-m MODEL_PATH
-r RESULTS_DIR
[-i IMAGE_DIR]
[-b BATCH_SIZE]
[--gpu_index GPU_INDEX]
[--log_file LOG_FILE]
必需参数
-e, --experiment_spec
: 用于评估的实验 spec 文件。这应与 tao evaluate 规范文件相同。-m, --model_path
: 要运行评估的引擎文件。-r, --results_dir
: 将存储评估结果的目录。
可选参数
-i, --image_dir
: 测试图像所在的目录-b, --batch_size
: 用于评估的批次大小。请注意,此值不能大于引擎生成期间使用的--max_batch_size
。如果未指定,则将使用--max_batch_size
代替。
示例用法
用于推理的批次大小将与引擎生成期间使用的 --max_batch_size
相同。以下是使用 inference
命令通过 TensorRT 引擎运行推理的示例
tao deploy mask_rcnn inference -m /export/int8.engine \
-e /workspace/default_spec.txt \
-i /workspace/raw-data/val2017 \
-r /workspace/tao-experiments/inference
可视化结果将存储在 $RESULTS_DIR/images_annotated
下,COCO 格式的预测将存储在 $RESULTS_DIR/labels
下。