JETSON TX2 上的 YoloV3 部署

YoloV3 deployment on JETSON TX2

我遇到了有关在 TX2 上部署 Yolo 对象检测的问题。 我使用预训练的 Yolo3(在 Coco 数据集上训练)来检测一些有限的对象(我主要关注五个 类,而不是所有 类),实时检测的速度很慢,并且在我的笔记本电脑上,准确性并不完美(但可以接受)。我正在考虑通过笔记本电脑上的多线程或多处理来使其更快,yolo 有可能吗? 但我的主要问题是算法不是 运行ning raspberry pi 和 nvidia TX2.

这是我的问题:

  1. 一般来说,不加任何加速器和模型压缩技术等修改,是否可以在TX2上运行 yolov3?

  2. 我不能运行 TX2 上的模型。首先我得到了关于相机的错误,所以我决定 运行 视频上的模型,这次我得到了 'cannot allocate memory in static TLS block' 错误,出现这个错误的原因是什么?模型太大了。它在我的 laptop.The 上使用 16 GB GPU 内存,树莓派和 TX2 的 GPU 内存小于 8GB。据我所知有两种解决方案,使用较小的模型或使用张量 RT 或 p运行ing。请问有没有其他办法?

  3. 如果我使用 tiny-yolo,我会得到较低的精度,这不是我想要的。有什么方法可以 运行 任何在 raspberry pi 或 NVIDIA TX2 上具有实时准确性和速度 (FPS) 的高性能的对象检测模型?

  4. 如果我只清理我关注的对象的 coco 数据,然后训练相同的模型,我会获得更高的精度和速度,但大小不会改变,我说得对吗?

  5. 总的来说,实时检测准确率和速度最好的模型是什么?

  6. Mobilenet 怎么样?它在准确性和速度方面是否优于 YOLO?

1- 是的,这是可能的。我已经 运行 Jetson Nano 上的 Yolov3。

2- 这取决于数据的模型和输入分辨率。您可以降低输入分辨率。输入图像被传输到 GPU VRAM 以在模型上使用。大输入大小可以分配很多内存。据我所知,2 年前我在 Jetson Nano(比 tx2 还差)上有 运行 个普通的 Yolov3。另外,您可以像您提到的那样使用 Yolov3-tiny 和 Tensorrt。网络上有很多资源,例如 this & this.

3-我建议你看看here。在此 repo 中,您可以使用数据集进行迁移学习并使用 TensorRT 优化模型并在 Jetson 上 运行。

4- 大小不依赖于数据集。它取决于模型架构(因为它包含权重)。速度可能不会改变。准确性取决于您的数据集。它可以更好也可以更坏。如果 COCO 上的任何 class 与你数据集的任何 class 相似,我建议你迁移学习。

5-你必须找到合适的模型,尺寸小,精度足够,速度优雅。没有最好的型号。有适合您案例的最佳模型,这也取决于您的数据集。可以对比一些模型的精度和fps here.

6- 大多数人使用 mobilenet 作为特征提取器。阅读 this 篇论文。你会看到 Yolov3 有更好的准确性,SSD with MobileNet backbone 有更好的 FPS。我建议你使用 jetson-inference repo.

通过使用 jetson-inference 存储库,我在 SSD 模型上获得了足够的准确性并获得了 30 FPS。另外,我建议你在 Jetson 上使用 MIPI-CSI 摄像头。它比 USB 相机更快。

我仅通过替换 script.Now 中 opencv 和 tensorflow 的导入顺序来解决问题 1 和 2 我可以 运行 Yolov3 而无需对 tx2 进行任何修改。我的平均 FPS 为 3。