
拿到香橙派5这块板子之后我建议你的第一个任务不是急着刷系统而是先在PC端把YOLOv5s跑通。这个系列的第四篇我就专门讲这一件事在PC端用模拟器仿真环境把YOLOv5s完整跑一遍。所谓“模拟器仿真”指的就是在一台普通x86电脑上装一个Ubuntu 20.04虚拟机模拟香橙派RK3588运行Ubuntu的软件环境把yolov5源码获取、环境配置、模型下载、图片和视频推理全部走一遍。整个过程不依赖开发板不烧写系统哪怕板子还在快递路上你也能先把核心链路打通。这篇内容适合两类人一是刚入手香橙派5、想在RK3588上做yolov5物体检测但还没头绪的初学者二是已经有开发板但一直被环境问题卡住、想先隔离排查问题的人。你在PC模拟器上解决掉的每一个报错之后在板子上大概率不会再浪费一遍时间。1. 为什么一定要先在PC端跑通YOLOv5s1.1 RK3588部署的整体路线以及04篇的位置我见过太多人犯同一个错误开发板一到手就插电、刷系统、装依赖折腾一整天最后在import torch这一步卡死然后开始怀疑板子坏了、系统刷错了、电源不行。真实原因往往是环境没配对。为了避开这种“环境问题”和“代码问题”混在一起的情况我习惯把RK3588部署拆成一条清晰的路线PC端模拟器仿真在虚拟机上把YOLOv5s跑起来验证算法链路。板卡系统烧写给香橙派RK3588烧写Ubuntu 20.04系统。板端环境搭建安装Python、PyTorch、依赖库。模型转换把PyTorch模型导出ONNX再转成RKNN格式。板上推理用RKNN推理YOLOv5s接入摄像头做实时检测。本篇就是第一步。这一步的意义不是跑出多高的帧率而是用一个最可控的环境先把“YOLOv5s能不能跑、输出长什么样、参数怎么调”搞清楚。等到了板子上你只需要把精力放在NPU转换和性能优化上而不是被Python版本和依赖库折磨。1.2 模拟器方案选型为什么是VMware虚拟机而不是QEMU标题里写的“PC端模拟器”最直接的实现方式是虚拟机。我在选型时对比过三种方案VMware Workstation、VirtualBox、QEMU。QEMU确实能模拟ARM64架构理论上可以直接模拟RK3588的aarch64环境但它的图形界面和性能都很糟糕跑一次YOLOv5推理可能要用分钟级来计算。而且QEMU的配置复杂度对新手很不友好不适合作为“快速验证”的工具。Docker在Windows上也能跑Linux容器但GUI支持、摄像头透传都比较麻烦不适合做图形化推理验证。所以我的选择是VMware Workstation Pro Ubuntu 20.04 LTS。原因很简单香橙派RK3588官方推荐的系统就是Ubuntu 20.04x86虚拟机虽然指令集和ARM不同但YOLOv5的Python代码、PyTorch推理流程在两种架构上是完全一致的。唯一有差异的是依赖包的二进制版本但这不会影响“验证代码链路”这个核心目标。提示如果你不想用VMware用VirtualBox也可以操作基本一样。但建议统一用VMware因为它的显卡渲染和USB设备透传做得更稳定后期接摄像头测试会省心一些。1.3 PC模拟器跑通的核心价值和局限必须说清楚PC模拟器无法模拟RK3588的NPU。即使你在这篇教程里跑出了完美检测效果也不能说明板子上的NPU推理速度。它的核心价值有三个验证代码和依赖把“环境配置”这个最不确定的变量提前消化掉。验证模型输出检测框、类别、置信度、NMS效果在PC上看清楚。固化流程记录下每一步命令和参数之后在RK3588上照着执行。换句话说我把它定位成“软件预演”。你要通过它确认的是“我的思路通不通”而不是“我的板子跑多快”。2. 环境准备与模拟器安装要点2.1 创建Ubuntu 20.04虚拟机的完整步骤我用的宿主机是WindowsVMware Workstation Pro 17虚拟机镜像选择的是ubuntu-20.04.6-desktop-amd64.iso。这里强调一下一定要选20.04而不是22.04因为后续RK3588上的rknn-toolkit2以及很多NPU部署样例都基于20.04验证过提前保持一致能少踩很多坑。虚拟机配置建议如下配置项推荐值说明CPU4核物理机8核以上的话可以给6核内存8GB建议分配物理内存的一半最少4GB磁盘60GB后续要装conda、PyTorch、数据集空间给足网络NAT模式可以正常访问外网下载依赖显卡默认不需要直通物理GPUCPU推理足够创建步骤很简单VMware里选择“稍后安装操作系统”操作系统选“Ubuntu 64位”然后设置CPU和内存、创建60GB虚拟磁盘最后挂载ISO启动安装。安装过程选择“最小安装”不需要装第三方驱动和媒体解码器。装好系统后第一件事是安装增强工具VMware 17里不需要单独装VMware Tools直接执行sudo apt update sudo apt install -y open-vm-tools open-vm-tools-desktop装完之后重启就能支持自适应分辨率和宿主机与虚拟机之间的文件拖拽了。这个功能很重要因为后面你要把图片、视频、模型权重拖进虚拟机测试。2.2 虚拟机系统初始化三板斧系统装好之后不要急着装PyTorch先做三件事。第一是更新apt源。Ubuntu默认源在国外速度不稳定先替换成国内镜像源。这里以清华源为例直接改/etc/apt/sources.list把archive.ubuntu.com统一替换成mirrors.tuna.tsinghua.edu.cn。第二是安装基础编译工具和网络工具sudo apt update sudo apt install -y build-essential git vim net-tools wget curlbuild-essential这个包经常被忽略但它包含了gcc、g、make等编译工具后面安装一些需要编译的Python依赖时会用到。等你到了RK3588板子上同样要先装它这是部署环境的地基。第三是安装Miniconda。这里必须用Miniconda而不是AnacondaAnaconda太重而且附带大量你用不到的包。wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh安装过程中一路yes最后source一下配置文件让conda生效source ~/.bashrc然后按照提示初始化condaconda init bash2.3 为什么选用Python 3.8和CPU版PyTorch创建虚拟环境时我建议锁定Python 3.8conda create -n yolov5 python3.8 -y conda activate yolov5选择3.8而不是最新的3.11、3.12原因在于兼容性。YOLOv5官方代码在3.8上经过了最充分的验证而且后续rknn-toolkit2对Python版本的依赖也是3.8最稳。你要记住一个原则在嵌入式部署场景里版本激进是大忌稳定优先。PyTorch方面虚拟机里直接装CPU版pip install torch1.10.0 torchvision0.11.0为什么不装GPU版因为VMware默认环境里没有NVIDIA显卡直通装了CUDA版反而会增加体积和依赖冲突。而且PC模拟器阶段的目标是验证推理逻辑性能不是重点。到了真正的RK3588板子上压根不用PyTorch做推理而是用RKNN的C API或Python API所以在这里花精力配GPU完全是在浪费时间。3. YOLOv5s环境搭建与源码准备3.1 获取yolov5源码与版本锁定这一步是整个过程中最需要“耐心”的环节。先获取源码cd ~ git clone https://github.com/ultralytics/yolov5.git cd yolov5源码克隆完成后立刻做版本锁定这一步很关键git checkout v6.0为什么我不建议大家直接用最新主分支因为YOLOv5官方在主分支上持续迭代依赖库版本变化很快可能你今天clone的代码和网上教程对不上。而v6.0这个版本是RKNPU社区适配最成熟的版本RKNN Toolkit2自带的yolov5示例也基于这个版本后续做模型转换时资料最多。3.2 安装依赖的方法与顺序进入yolov5目录后默认依赖清单在requirements.txt里。执行安装pip install -r requirements.txt由于网络环境因素pip下载可能不稳定我习惯在pip命令里加上国内镜像源pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple这里要提醒一句requirements.txt会自动安装tensorboard、ipython、clearml之类的辅助库这些不是你当前需要的。如果不想全部安装可以自己挑核心依赖pip install numpy opencv-python matplotlib seaborn pandas tqdm pyyaml requests scipy但为了省事我依然推荐直接装整个requirements.txt一次性把坑踩完之后在板子上就少一些“缺包”的问题。安装完成后验证环境是否正常python -c import torch; print(torch.__version__) python -c import cv2; print(cv2.__version__)只要这两行能顺利打印版本号说明核心环境已经通了。3.3 准备yolov5s权重文件YOLOv5s的权重是一个.pt文件可以在https://github.com/ultralytics/yolov5/releases/download/v6.0/yolov5s.pt直接下载。如果你不方便访问GitHub也可以在yolov5项目内通过命令下载python -c import torch; torch.hub.load(ultralytics/yolov5, yolov5s, pretrainedTrue)命令会自动下载权重并缓存到本地。我更推荐直接下载.pt文件放到yolov5根目录因为后续你会频繁用到这个路径。权重文件放好后确认一下存在性ls -lh yolov5s.pt正常情况下会看到一个大约14MB的文件。这个文件就是COCO数据集上预训练好的YOLOv5s模型能识别80类物体。之后你在RK3588上做迁移学习和模型转换也是从它开始的。4. 跑通第一个YOLOv5s推理任务4.1 detect.py单张图片推理实测环境都准备好之后开始第一次推理。YOLOv5的推理入口是detect.py执行最简单的单张图片检测python detect.py --weights yolov5s.pt --source data/images/bus.jpg --conf-thres 0.4这条命令会做三件事加载模型、读取data/images/bus.jpg、执行推理并标注结果。运行结束后输出图片保存在runs/detect/exp/目录下图片名是bus.jpg。打开输出图片正常情况下你能看到检测框标注出person和bus。如果你的电脑配置不算太差CPU推理单张图大约在1到3秒之间。这里解释一下几个核心参数的含义你后面会反复用到--weights指定模型权重文件路径。--source检测来源可以是图片、视频文件、摄像头编号也可以是一个目录。--conf-thres置信度阈值低于这个值的检测框会被丢弃。--iou-thresNMS时的IoU阈值控制重叠框的抑制强度。--img-size输入图像缩放尺寸默认640。第一次跑通的时候我建议你把--conf-thres改小一点看效果python detect.py --weights yolov5s.pt --source data/images/bus.jpg --conf-thres 0.25阈值调小后检测框会变多误检也变多。这能让你直观理解“置信度阈值”到底在做什么。4.2 视频推理和摄像头测试在PC模拟器上验证图片只是第一步我更建议你接着跑视频推理因为后续在RK3588上大概率是要处理视频流的。先准备一个测试视频拖拽到虚拟机里任意目录比如test.mp4然后执行python detect.py --weights yolov5s.pt --source test.mp4 --conf-thres 0.4推理结果会输出到runs/detect/exp2/。如果你只想看处理速度不关心输出视频可以再加上--nosave参数。如果想测试摄像头在VMware菜单里把摄像头连接到虚拟机然后执行python detect.py --weights yolov5s.pt --source 0这里的0表示第一个摄像头设备。注意VMware连接摄像头需要一点时间执行后如果提示打不开摄像头先回虚拟机设置里确认“USB Controller”和“Camera”连接正常。提示摄像头这一项在虚拟机里经常遇到权限问题如果调试超过15分钟还没解决我建议跳过。后续在RK3588板子上接摄像头会顺畅得多PC端没必要死磕。4.3 性能观察与参数调优用虚拟机的CPU跑YOLOv5s性能数据没有太大参考价值但我发现观察CPU占用和推理耗时能帮你理解“瓶颈在哪里”。我整理了一份在当前虚拟机配置4核CPU、8GB内存下的参考数据操作耗时/效果说明加载模型2-5秒取决于磁盘和CPU单张图片推理(640x640)1-3秒纯CPU不包含前处理视频推理(1080P)0.5-2 FPS虚拟机内较慢属正常--half参数不可用CPU模式不支持半精度如果你安装了NVIDIA显卡直通这一步比较折腾不推荐可以尝试增加--half参数启用FP16推理速度会快一些。但在普通虚拟机里这个参数会直接报错--half requires GPU这个报错本身就是很好的学习素材CPU不支持半精度推理只有GPU或者NPU才支持。参数调优方面真正影响检测效果的是--conf-thres和--iou-thres。我遇到过很多人在板子上部署完之后检测框非常密全是小碎片就是因为--conf-thres设得太低。建议PC端就把黄金参数试出来我一般从conf0.4, iou0.5起步再根据场景微调。4.4 如何用PC端仿真结果预演板端效果跑通YOLOv5s之后我强烈建议你做一次“预演式验证”把后续板端会遇到的坑提前暴露出来。第一步用一张自己准备的图片测试不是官方自带的bus.jpg而是你自己拍的照片。把图片拖进虚拟机执行python detect.py --weights yolov5s.pt --source my_test.jpg --conf-thres 0.4这样能验证你的模型对“真实场景”的泛化能力。很多人在官方图片上跑通了就以为部署完成了结果到板子上接入摄像头后才发现模型对自己的业务场景完全不适用。第二步导出ONNX。这一步虽然在PC模拟器上做但它直接关系后续RK3588的模型转换python export.py --weights yolov5s.pt --include onnx --opset 12执行成功后会在当前目录生成yolov5s.onnx。你不需要完全理解ONNX内部结构但要知道一个概念后续转RKNN时绝大多数工具链要求你先有ONNX文件。在PC上先把ONNX导出来到了板子上你就少一个变量。5. 常见问题与排查技巧实录5.1 高频问题速查表我在带学员和实际部署过程中收集到的高频问题基本集中在下面这几类问题现象可能原因解决方案git clone卡住或失败网络连接不稳定用镜像站点克隆或手动下载zip包解压pip install慢到超时默认PyPI源慢加-i https://pypi.tuna.tsinghua.edu.cn/simpleModuleNotFoundError: No module named torchconda环境未激活先执行conda activate yolov5再跑命令ImportError: libGL.so.1: cannot open shared object file缺少OpenCV图形库执行sudo apt install -y libgl1 libglib2.0-0推理结果全是空框置信度阈值太高调低--conf-thres比如0.25检测框密集且重叠严重IoU阈值不合理调高--iou-thres或检查类别错配--half报错CPU不支持FP16去掉参数或等待板端使用NPU时再开摄像头打不开虚拟机未连接摄像头VMware菜单里连接摄像头或用USB模式其中libGL.so.1这个错误出现的频率最高。OpenCV依赖图形库但Ubuntu最小安装默认不装。这个错误不仅PC会遇到在RK3588板子上同样会遇到现在在模拟器里把它解决掉之后就直接跳过。5.2 避坑心得避免在PC模拟器上浪费时间第一坑不要试图把最新版yolov5跑通。主分支的代码永远在变你下载时的版本和网上教程的版本大概率不同最后会出现莫名其妙的参数报错。锁定v6.0有效避免这类问题。第二坑不要在虚拟机里配GPU直通。很多新手觉得模拟器上也要“完整复现生产环境”非要在虚拟机里装CUDA。实际上VMware的GPU直通配置复杂还依赖宿主机显卡型号即使成功对后面的RK3588部署也没有帮助。第三坑不要用conda base环境跑。我见过有人直接在任何环境都不激活的情况下执行python detect.py然后报一堆缺包错误。规范动作是每进一次终端都先执行conda activate yolov5把这一步变成肌肉记忆后面在板子上同样适用。第四坑不要把模型和图片放得乱七八糟。我建议在yolov5项目根目录下固定放权重文件在data/images/下放测试图片在runs/detect/下查看输出。这个习惯在PC端养成后到板子上你会少花很多找文件的时间。5.3 从PC仿真向香橙派RK3588迁移的注意事项这一步是整个系列里承上启下的关键节点。当你在PC模拟器上把YOLOv5s跑通后不要急着把整个conda环境打包搬到板子上你需要转移的只有三样东西yolov5s.onnx模型文件由export.py生成你自己的业务图片或视频测试集你已经验证过的最佳推理参数conf、iou等到了RK3588板子上yolov5源码不需要重新完整克隆因为你最终跑的不是PyTorch推理而是RKNN推理。你需要的是另一个工具链rknn-toolkit2以及配套的rknn_model_zoo里提供的yolov5示例代码。这些内容会在系列后续章节详细展开。所以在PC模拟器阶段不要过度投入在“优化PyTorch推理速度”上。你的目标已经达成模型能跑、输出正确、参数已固化。6. 从PC仿真继续往前走的方向6.1 下一步可以做的三个扩展如果你在PC模拟器上跑得比较顺利可以在等开发板到货的空窗期做几件更有价值的事。第一把数据集准备好。无论你是要做自定义物体检测还是用COCO预训练模型都需要一份图片集。建议把测试图片整理到固定目录并记录每张图的检测结果为后续在RK3588上做精度对比打下基础。第二尝试导出不同格式的模型。除了ONNX你还可以试一下python export.py --weights yolov5s.pt --include torchscript onnx这个命令会生成TorchScript和ONNX两种格式。了解它们之间的差异对后续RKNN转换有帮助。第三试跑yolov5s和yolov5n两个模型对比参数量和推理效果的差异。YOLOv5n更轻量在RK3588上帧率会更高但精度略低。提前确定你要用哪个模型后续可以少做一次模型转换。6.2 我在实操中的几点体会这篇文章最后我分享几点个人经验。我在给RK3588项目做选型时曾经跳过PC模拟器这一步直接在板子上从零开始配环境结果一个简单的“图片推理”花了整整一个下午。后来我调整顺序任何板端部署项目都先在PC虚拟机上跑通一遍总体效率反而提高了至少一半。还有一个很实在的经验在PC端模拟器上跑出来的检测参数可以直接沿用。conf0.4, iou0.5这个组合在大多数室内外场景下都能用。到了RK3588上你不会想一遍遍试参数的太浪费时间。最后我在这一步给自己定了一个“完成标准”供你参考**当你能用一条命令不加任何报错地完成图片推理、视频推理、导出ONNX三件事的时候P