Jeston Nano orginx 8G环境部署yolov8和SAM模型,包含pytorch部署

-工作实践(机器视觉应用工程师)

设备:
Jeston Nano Orginx 8G 

推理要求:

设备640×480 图像推理
时间 / 内存占用
1280×720 图像推理
时间 / 内存占用
1920×1080 图像推理
时间 / 内存占用
Jetson Orin Nano 8GB0.03 s / 800 MB0.07 s / 900 MB0.15 s / 1000 MB

Ubuntu 环境换源(开发板Ubuntu14.04 desktop)

  1. 备份原文件

    bash

    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
    
  2. 编辑软件源列表

    bash

    sudo nano /etc/apt/sources.list
    
    替换为以下内容:

    bash

    deb http://mirrors.aliyun.com/ubuntu-ports/ focal main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal main restricted universe multiverse
    
    deb http://mirrors.aliyun.com/ubuntu-ports/ focal-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal-security main restricted universe multiverse
    
    deb http://mirrors.aliyun.com/ubuntu-ports/ focal-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal-updates main restricted universe multiverse
    
    deb http://mirrors.aliyun.com/ubuntu-ports/ focal-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu-ports/ focal-backports main restricted universe multiverse
    
  3. 更新软件包索引

    bash

    sudo apt-get update
    

注意

  • 确保系统架构(如 arm64)与镜像源匹配。
  • 若仍报错,检查网络或尝试其他镜像源(如清华源)。(这里我使用了移动热点才正常,公司局域网wifi子网太多被清华源屏蔽了)

部署pytorch环境

pytorch NV网站:PyTorch for Jetson - Announcements - NVIDIA Developer Forums

本人的环境使用python3.8,无conda环境

安装环境:

  • PyTorch 版本:2.0.0+nv23.05
  • torchvision 版本:0.15.0

Torchvision的网站位置:

GitHub - pytorch/vision at release/0.15

安装jetson-stats

打开terminal

sudo apt-get install python3-pip
    sudo -H pip3 install jetson-stats
    

      安装完成之后直接在terminal中输入

      jtop

      点击INFO查看开发板的参数细节:

      安装cuda11.4 cudnn

      1.CUDA
      terminal输入

      sudo apt-get install cuda-toolkit 
      安装完成之后,将以下复制到 .bashrc文件末尾

      export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.4/lib64
      export PATH=$PATH:/usr/local/cuda-11.4/bin
      export CUDA_HOME=$CUDA_HOME:/usr/local/cuda-11.4

      可以手动打开.bashrc文件,也可以用命令直接打开

      sudo gedit  ~/.bashrc

      配置为sudo apt-get update一下

      2.cuDNN

      首先查看仓库提供的cuDNN有哪一些。

      sudo apt-cache policy libcudnn8
      

        配置完之后去官网下载torch对应的版本,我下载的是

        • PyTorch:2.0.0+nv23.05
        • torchvision:0.15.0(尝试从源码编译安装,但存在问题)

        下载torchvison之后,在vision文件夹中

        python setup.py install --user

        检验torch和torchvision的环境是否成功:

        以下是 testversion.py 的示例代码,你可以用来验证 torchvision 是否能正常工作:

        python

        import torch
        import torchvision
        from torchvision.io import read_image
        
        print(f"torch 版本: {torch.__version__}")
        print(f"torchvision 版本: {torchvision.__version__}")
        
        # 检查 CUDA 是否可用
        if torch.cuda.is_available():
            print("CUDA 可用")
        else:
            print("CUDA 不可用")
        
        # 简单测试 torchvision 的功能
        try:
            img = read_image('output.jpg')  # 替换为实际的图片路径
            print(f"读取的图像形状: {img.shape}")
        except Exception as e:
            print(f"读取图像时出错: {e}")
        

        Torchvison 报错无法读取照片的解决

         依赖安装

        • 安装图像库依赖

        sudo apt-get update sudo apt-get install libjpeg-dev libpng-dev

        运行成功的结果:

        segment-anything

        亲测,sam的小模型可以正常运行,较大的模型参数运行killed,内存交换不够

        YOLOV8检测

        ### Jeston Orin Nano 部署 YOLOv8 TensorRT 的方法 #### 1. 环境准备 为了成功在 Jetson Orin Nano部署 YOLOv8 并利用 TensorRT 进行加速,首先需要完成环境的搭建。这包括安装必要的依赖库以及配置开发工具链。 - **操作系统**: 建议使用 NVIDIA 提供的官方 Linux 发行版 (L4T),版本需支持 TensorRT CUDA[^2]。 - **CUDA 工具包**: 安装最新版本的 CUDA Toolkit,确保其兼容性与 Jetson 设备硬件架构相符[^3]。 - **cuDNN 库**: 下载并安装适配当前 CUDA 版本的 cuDNN 库文件[^1]。 - **TensorRT SDK**: 获取 NVIDIA TensorRT 软件开发套件,并按照文档说明完成初始化设置[^4]。 #### 2. 模型导出 YOLOv8 默认训练得到的是 PyTorch 格式的权重文件 (.pt),而 TensorRT 支持 ONNX 或者自定义引擎格式作为输入源。因此,在实际应用前还需要经历模型转换过程: ```bash pip install ultralytics # 如果尚未安装 Ultralytics 库,则先执行此命令 python export.py --model yolov8n.pt --include onnx --opset 12 ``` 上述脚本会基于指定参数生成对应的 `.onnx` 文件用于后续处理。 #### 3. 使用 `trtexec` 构建推理引擎 通过 NVIDIA 提供的命令行工具可以快速实现从 ONNX 到 TRT Engine 的转变操作: ```bash trtexec --onnx=yolov8n.onnx --saveEngine=yolov8n.engine --workspace=4096 --fp16 ``` 这里设置了工作空间大小为 4GB (`--workspace`) 同时启用了半精度浮点运算模式(`--fp16`) 来提升性能表现。 #### 4. 编写加载逻辑代码样例 最后一步就是编写 Python/C++ 等编程语言编写的程序来调用已经创建好的 engine 文件来进行目标检测任务了。下面给出一段简单的 python 实现片段展示基本流程: ```python import tensorrt as trt from PIL import Image import numpy as np import pycuda.driver as cuda import pycuda.autoinit def load_engine(engine_file_path): with open(engine_file_path, 'rb') as f, trt.Runtime(trt.Logger()) as runtime: return runtime.deserialize_cuda_engine(f.read()) class HostDeviceMem(object): def __init__(self, host_mem, device_mem): self.host = host_mem self.device = device_mem def __str__(self): return "Host:\n" + str(self.host) + "\nDevice:\n" + str(self.device) def __repr__(self): return self.__str__() def allocate_buffers(engine): inputs = [] outputs = [] bindings = [] stream = cuda.Stream() for binding in engine: size = trt.volume(engine.get_binding_shape(binding)) * engine.max_batch_size dtype = trt.nptype(engine.get_binding_dtype(binding)) # Allocate host and device buffers host_mem = cuda.pagelocked_empty(size, dtype) device_mem = cuda.mem_alloc(host_mem.nbytes) # Append the device buffer to device bindings. bindings.append(int(device_mem)) # Append to input/output lists if engine.binding_is_input(binding): inputs.append(HostDeviceMem(host_mem, device_mem)) else: outputs.append(HostDeviceMem(host_mem, device_mem)) return inputs, outputs, bindings, stream if __name__ == '__main__': ENGINE_PATH = './yolov8n.engine' IMAGE_PATH = './test.jpg' image = Image.open(IMAGE_PATH).convert('RGB') img_array = np.array(image.resize((640, 640)), dtype=np.float32)/255. engine = load_engine(ENGINE_PATH) context = engine.create_execution_context() inputs, outputs, bindings, stream = allocate_buffers(engine) # Transfer data from CPU to GPU memory cuda.memcpy_htod_async(inputs[0].device, img_array.ravel(), stream) # Run inference context.execute_async_v2(bindings=bindings, stream_handle=stream.handle) # Transfer predictions back from GPU to CPU [cuda.memcpy_dtoh_async(out.host, out.device, stream) for out in outputs] # Synchronize threads after execution is done stream.synchronize() print([o.host.reshape(-1)[:10] for o in outputs]) # Print first ten elements of each output layer ``` 以上展示了如何加载预构建的 TensorRT 引擎实例化上下文对象并通过分配缓冲区传递数据给 GPU 执行推断计算最终获取结果的过程。 ---
        评论
        添加红包

        请填写红包祝福语或标题

        红包个数最小为10个

        红包金额最低5元

        当前余额3.43前往充值 >
        需支付:10.00
        成就一亿技术人!
        领取后你会自动成为博主和红包主的粉丝 规则
        hope_wisdom
        发出的红包
        实付
        使用余额支付
        点击重新获取
        扫码支付
        钱包余额 0

        抵扣说明:

        1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
        2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

        余额充值