在 JETSON TX2 上部署 YoloV3
Posted
技术标签:
【中文标题】在 JETSON TX2 上部署 YoloV3【英文标题】:YoloV3 deployment on JETSON TX2 【发布时间】:2021-09-03 06:23:26 【问题描述】:我遇到了有关在 TX2 上部署 Yolo 对象检测的问题。 我使用预训练的Yolo3(在Coco数据集上训练)来检测一些有限的物体(我主要关注五个类,不是所有类),实时检测速度低,准确率不完美(但可以接受) 在我的笔记本电脑上。我正在考虑通过笔记本电脑上的多线程或多处理使其更快,yolo 可以吗? 但我的主要问题是算法没有在树莓派和英伟达 TX2 上运行。
这是我的问题:
一般来说,是否可以在 TX2 上运行 yolov3 而无需任何修改,如加速器和模型压缩技术?
我无法在 TX2 上运行模型。首先我收到有关相机的错误,所以我决定在视频上运行模型,这次我收到“无法在静态 TLS 块中分配内存”错误,出现此错误的原因是什么?模型太大。它在我的笔记本电脑上使用 16 GB GPU 内存。raspberry 和 TX2 的 GPU 内存小于 8GB。据我所知,有两种解决方案,使用较小的模型或使用张量 RT 或修剪。不知道有没有其他办法?
如果我使用 tiny-yolo,我的准确率会降低,这不是我想要的。有没有办法在树莓派或 NVIDIA TX2 上实时运行任何具有高性能的目标检测模型,无论是准确度还是速度 (FPS)?
如果我只清理我关注的对象的 coco 数据,然后训练相同的模型,我会获得更高的准确性和速度,但大小不会改变,对吗?
一般来说,就实时检测的准确度而言,哪种模型最好,就速度而言,哪种模型最好?
Mobilenet 怎么样?准确率和速度都比YOLO好?
【问题讨论】:
【参考方案1】:1- 是的,这是可能的。我已经在 Jetson Nano 上运行了 Yolov3。
2- 这取决于模型和数据的输入分辨率。您可以降低输入分辨率。输入图像被传输到 GPU VRAM 以在模型上使用。大输入大小可以分配大量内存。据我记得两年前我在 Jetson Nano(比 tx2 差)上运行了正常的 Yolov3。此外,您可以使用 Yolov3-tiny 和 Tensorrt,就像您提到的那样。网络上有很多来源,例如 this 和 this。
3- 我建议你看看here。在这个 repo 中,您可以使用您的数据集进行迁移学习并使用 TensorRT 优化模型并在 Jetson 上运行它。
4- 大小不依赖于数据集。它取决于模型架构(因为它包含权重)。速度可能不会改变。准确性取决于您的数据集。它可以更好或更糟。如果 COCO 上的任何类与你的数据集的任何类相似,我建议你迁移学习。
5- 你必须找到合适的模型,尺寸小,准确度高,速度快。没有最好的模型。您的案例有最好的模型,这也取决于您的数据集。可以比较一些模型的准确率和fpshere。
6- 大多数人使用 mobilenet 作为特征提取器。阅读this 论文。你会看到 Yolov3 有更好的准确度,带有 MobileNet 主干的 SSD 有更好的 FPS。我建议你使用jetson-inference
repo。
通过使用jetson-inference
repo,我在 SSD 模型上获得了足够的准确度并获得了 30 FPS。另外,我建议你在 Jetson 上使用 MIPI-CSI 摄像头。它比 USB 相机更快。
【讨论】:
谢谢,我解决了问题1和2(LTS块错误),只替换了主脚本中tensorflow和cv2的导入顺序。现在我可以在 TX2 上运行 yolo3 而无需任何更改/修改/压缩。但当然 FPS 在 2.6 左右非常低【参考方案2】:我仅通过替换脚本中的opencv和tensorflow的导入顺序来解决问题1和2。现在我可以在tx2上运行Yolov3而无需任何修改。我的平均 FPS 为 3。
【讨论】:
以上是关于在 JETSON TX2 上部署 YoloV3的主要内容,如果未能解决你的问题,请参考以下文章