如何在YOLO-NAS中使用PTQ/QAT/INT8进行物体检测?

How to use PTQ/QAT/INT8 in YOLO-NAS for object detection?

提问人:mochiHotpot 提问时间:9/12/2023 最后编辑:mochiHotpot 更新时间:9/12/2023 访问量:216

问:

我已经通过本教程将我的模型自定义训练为 PTQ 和 QAT

在此之后,我从输出中获得了一些日志文件、.pth 文件和 ptq/qat onnx 文件,如本教程所示。在本教程的底部,它说需要将 qat-onnx 文件转换为 INT8 TensoRT 文件,然后我使用命令将其转换trtexec --fp16 --int8 --onnx=model.onnx --saveEngine=model.trt

现在我得到了我的 TensorRT 文件(.trt 格式)。

然后是我的问题:

  1. 如何使用 TensorRT 文件进行对象检测?
  2. 我已经从PTQ和QAT训练的输出中得到了.pth文件,为什么我不能直接使用.pth文件进行对象检测?就像我使用.pth文件从普通的非PTQ和QAT训练中进行对象检测一样,使用以下代码:
from super_gradients.common.object_names import Models
from super_gradients.training import models

model = models.get(Models.YOLO_NAS_M,
checkpoint_path="yolonas-m/ckpt_best.pth",
num_classes=1)
predictions = model.predict("23.jpg")
predictions.show(show_confidence=False)

如果我使用 PTQ 和 QAT 输出中的 .pth 文件进行对象检测,它将显示如下错误消息:


ValueError                                Traceback (most recent call last)
[/usr/local/lib/python3.10/dist-packages/super_gradients/training/utils/checkpoint_utils.py](https://localhost:8080/#) in __call__(self, model_state_dict, checkpoint_state_dict)
198
199             if ckpt_val.shape != model_val.shape:
\--\> 200                 raise ValueError(f"ckpt layer {ckpt_key} with shape {ckpt_val.shape} does not match {model_key}" f" with shape {model_val.shape} in the model")
201             new_ckpt_dict\[model_key\] = ckpt_val
202         return new_ckpt_dict

ValueError: ckpt layer backbone.stem.conv.post_bn.weight with shape torch.Size(\[48\]) does not match backbone.stem.conv.branch_3x3.conv.weight with shape torch.Size(\[48, 3, 3, 3\]) in the model
  1. 如果真的无法使用 PTQ 和 QAT INT8 TensorRT 文件或 .pth 文件,我是否可以将 ONNX 文件用于 PTQ 和 QAT 过程中生成的对象检测?又是如何做到的?

我是发现YOLO-NAS的新手。 谢谢大家。

目标检测 yolo uint8t 量化感知训练 yolonas

评论


答: 暂无答案