Orin开发套件11-创建各种YOLO-l4t容器

YOLO(You Only Look Once)算法是近年非常知名的深度神经网络结构,由于创始人在v3版本之后便宣布退出领域,于是从v4版之后便出现较多的分支,到2022年8月已经有v5、v6与v7与三大分支争奇斗艳,其中v7版是v4版的增强,由同一个团队进行开发与维护。

YOLOYou Only Look Once)算法是近年非常知名的深度神经网络结构,由于创始人在v3版本之后便宣布退出领域,于是从v4版之后便出现较多的分支,到20228月已经有v5v6v7与三大分支争奇斗艳,其中v7版是v4版的增强,由同一个团队进行开发与维护。

这个顶尖算法如果能再搭配NVIDIA TensorRT的辅助,就是名副其实的如虎添翼效果,因此也有非常多技术人员提供基于不同版本YOLO算法搭配TensorRT的推理项目,目前在GITHUB上的相关开源项目数量已经达到三位数。

想利用YOLO算法开发自主项目的工程师,首要的工具就是要在几个不同版本之中挑选合适的神经网络,在这里并不对不同版本去做任何横向的比较,因为性能虽然很重要,但是这些优秀团队所提供的算法在精度vs性能之间的取舍效果是各有所长,并且依旧在不断改善之中,因此做对比是没有意义的。

至于哪种算法比较合适?最直接的方式就是搭建开发环境,实际操作过之后才能有所体会与理解。下面列出三个版本各自提供的requirements.txt文件,是配置环境所需要安装的Python相关库列表:

Orin开发套件11-创建各种YOLO-l4t容器

可以看到YOLOv5v7的库内容几乎一致,甚至注解内容都一样,很明显感受到v7是基于v5的应用架构上修改算法内容。而v6虽然有些不同之处,但是核心库的内容也几乎与v5雷同,同样也应该是在v5的基础上进行修改。

传统的思路会在设备上使用condavirtulenPython的虚拟环境去配置,透过复杂的环境变量设置,将不同应用进行隔离,来解决这些版本上的些微差异问题。

但是虚拟环境方法的严谨度不够,不仅出错率较高,并且移植性并不好,比较推荐的方式,就是利用合适的Docker镜像,为不同版本YOLO创建独立的开发或使用的容器环境,这样就能很轻松地在一台设备上同时启动操作多个YOLO版本,并且未来要将某个版本容器迁移或部署到其他设备上,操作过程也是非常简单的。

接下来的重点就是要挑选合适Jetson设备的Docker镜像,来作为搭建不同版本YOLO应用环境。经过简单整理分析之后,发现三种YOLO版本中有以下三个最主要共性,对环境的影响最为关键:

  1. PyTorch作为训练模型与推理预测的框架:

NGC里可以找到l4t-pytorchl4t-ml两大系列镜像,是基于Jetson平台,并且预先安装好Pytorch训练框架,都可以列入选择。

  1. 需要调用OpenCV视觉库:

在三个项目里的requirements.txt都有“opencv-python>=4.x.y”的内容,表示都会使用“pip3 install”安装Python版的OpenCV库,但是经过验证之后,发现这种安装OpenCV方式在x86平台是可行,但是在Jetson平台不能被正常调用。

  1. Python必须≥3.7版本;

熟悉Jetson设备的读者应该都知道,在JetPack 4.x版本都是配置Ubuntu 18.04操作系统,而Python版本最高到3.6.9;目前JetPack 5.0版本则配置Ubuntu 20.04操作系统,Python版本则为3.8.x

一种方式是选择基于JetPack 4.x环境创建的r32.x.y版本镜像,然后进入容器后升级Python版本至3.7以上,但是镜像内原本是以Python3.6安装的库,升级之后就得全部在新版本重新安装,因此这种方式并不合适

另一种方式是选择基于JetPack 5.x环境创建的r34.x.y版本镜像,里面已经安装好Python 3.8版本,剩下需要确认的,就是这个版本镜像在JetPack 4.x环境上是否能够正常操作?如果可以的话,这是目前最理想的选择

经过上述三个条件的综合筛选,目前最佳方案是NGCr34.1.0以上版本的l4t-ml系列镜像,也就是l4t-ml:r34.1.x-py3镜像。当然您也可以参考本系列前两篇“从头创建Jetson的容器(1)(2”的操作步骤,自行从头创建合适的镜像。

  1. 准备工作:

接下来以l4t-ml:r34.1.1-py3镜像为基础,来执行这三个版本YOLO的环境配置任务,为了要更方便操作,请使用以下指令下载个别开源项目,以及创建个别的容器:

$

$

$

$

mkdir ~/yolo && cd ~/yolo

git clone https://github.com/ultralytics/yolov5

git clone https://github.com/meituan/YOLOv6

git clone https://github.com/WongKinYiu/yolov7

现在就会在~/yolo目录下生成yolov5YOLOv6yolov7三个目录,接下来可以使用变量方式来创建各自的容器:

$

$

 

$

export YOLO_VER=yolov5(或YOLOv6yolov7

docker  run  -id  --name=$YOLO_VER --network host  --runtime nvidia  -w /home/yolo

-v  /home/nvidia/yolo/$YOLO_VER:/home/yolo  nvcr.io/nvidia/l4t-ml:r34.1.1-py3

docker  exec  -it  $YOLO_VER  bash

这样就能为每个YOLO版本创建各自的独立容器,进行环境配置工作。为了节省国内用户安装Python相关库的时间,建议进入容器之后先执行以下步骤,使用国内Python源来提升下载速度:

$

pip3 config set global.index-url https://mirrors.aliyun.com/pypi/simple/

此外,前面提过关于OpenCV部分的问题,由于l4t-ml镜像内已经好OpenCV环境,因此我们必须先把3个开源项目的requirements.txt里的“opencv-python”用“#”号进行关闭,否则会造成调用失败的问题。

接下去就针对个别版本进行配置。

  1. 调试YOLOv5

进入相关容器之后,只要执行以下指令就可以:

$

pip3  install  -r  requirements.txt

安装完毕之后,执行以下指令测试:

$

python3  detect.py  --source  <自行提供的图片>

如果在run/detect/expN目录下生成推理的结果,就表示环境已经配置正常。

  1. 调试YOLOv6

这个版本需要将cmake从系统提供的3.16.3版本升级到3.22以上,在宿主机上可以使用snap方式去安装,但是在Docker容器里面无法使用,因此最直接的方式就是用源码进行编译,执行指令如下:

$

 

$

$

$

wget https://github.com/Kitware/CMake/releases/download/v3.24.0/cmake-3.24.0-linux-aarch64.sh

chmod +x cmake-3.24.0-linux-aarch64.sh  &&  ./cmake-3.24.0-linux-aarch64.sh

cp  cmake-3.24.0-linux-aarch64/bin/cmake  /usr/bin

ln -s  $PWD/cmake-3.24.0-linux-aarch64/share/cmake-3.24/  /usr/share/cmake-3.24

完成cmake版本升级之后,同样执行以下指令进行安装:

$

pip3  install  -r  requirements.txt

安装完毕之后,执行以下指令测试:

$

python3  tools/infer.py  --weights  yolov6s.pt  --source  <自行提供的图片>

如果在run/inference/exp目录下生成推理的结果,就表示环境已经配置正常。

  1. 调试YOLOv7

这个版本比v5多了几个元素,

$

$

$

apt  update  &&  apt  install  -y  zip  htop  screen  libgl1-mesa-glx

pip3  install  seaborn  thop

pip3  install  -r  requirements.txt

安装完毕之后,执行以下指令测试:

$

ython3 detect.py --weights yolov7.pt --conf 0.25 --img-size 640 --source <自行提供的图片>

如果在run/inference/expN目录下生成推理的结果,就表示环境已经配置正常。

以上使用l4t-ml:r34.1.1-py3镜像去创建YOLOv5/v6/v7应用环境的方式,目前在JetPack 4.6.xJetPack 5.0版本上都能正常执行,这是个最轻松的方式。

至于未来要再配合TensorRT加速引擎的使用,也推荐使用l4t-ml:r34.x.y-py3镜像,为个别项目创建独立的容器,这样可以在Jetson设备上同时创建更多的独立开发环境,对于Jetson OrinJetson AGX Xavier这类计算资源较充沛的设备来说,就可以作为一个开发服务器使用,非常方便。

来源:业界供稿

0赞

好文章,需要你的鼓励

2022

09/22

11:29

分享

点赞

邮件订阅