ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Ubuntu 18.04下YOLO-6D姿态估计环境搭建与复现指南

Ubuntu 18.04下YOLO-6D姿态估计环境搭建与复现指南 我当年第一次在 Ubuntu 18.04 上复现 YOLO-6D 姿态估计算法时光是环境就折腾了整整三天最后发现一半的问题出在驱动和 CUDA 版本匹配上另一半出在 PyTorch 和 OpenCV 的兼容性上。这个项目虽然现在看代码不算新但它的思路——用目标检测网络直接回归物体的 2D 投影点再通过 EPnP 解算出 6D 姿态——至今仍是视觉抓取、增强现实、自主导航里很实用的方案。这篇文章把从零搭建 Ubuntu 18.04 环境、安装 NVIDIA 驱动/CUDA、配置 PyTorch、编译 YOLO-6D 依赖、准备 LINEMOD 数据集到实际训练和推理的完整过程写清楚顺便把常见的坑都标注出来。不管你是刚接触姿态估计的新手还是已经在其他系统上跑过深度学习项目、想迁移到 Ubuntu 18.04 的老手都能从里面找到可以直接照抄的步骤和排错思路。1. 复现前的整体拆解YOLO-6D 到底在解决什么问题1.1 6D 姿态估计的任务定义与技术选型6D 姿态估计说的是给定一张包含目标物体的图像算法要输出物体相对于相机坐标系的完整位姿——3D 旋转Roll/Pitch/Yaw 或者旋转矩阵 R加上 3D 平移Tx/Ty/Tz。这个“6D”指的就是 6 个自由度旋转 3 个平移 3 个。有了这个位姿机器人才能知道“杯子在哪个位置、以什么角度放着”机械臂才能准确地抓取它AR 应用才能把虚拟内容稳稳地贴在真实物体上。传统做法一般是“先检测、再 PnP”先用目标检测或者分割把物体框出来然后提取关键点、匹配特征最后用 PnP 算法从 2D-3D 对应关系求位姿。这么做的问题在于流程太长特征匹配在弱纹理、遮挡、光照变化下很容易翻车。YOLO-6D 的思路很直接让 YOLO 网络在检测物体边界框的同时顺便回归出物体 3D 包围盒的 8 个角点或者一组预定义的 3D 点在图像上的 2D 投影位置有了这些 2D 点再加上物体 3D 模型的对应点就可以用 EPnP 一次性求出 6D 姿态。选择在 Ubuntu 18.04 上复现不是因为新系统不好而是因为这个项目有一大堆依赖库是在 18.04 时代锁定的。CUDA 10.x、PyTorch 1.4 左右的老版本、OpenCV 3.4/4.1 这套组合在 18.04 上最顺。Ubuntu 20.04 和 22.04 的 GLIBC、GCC 版本更高老代码里用 Cython 编译的扩展模块很容易报“无法兼容”的错误所以要用稳定复现18.04 反而是最省心的选择。1.2 完整技术路线与本文的复现路径整个复现过程可以拆成五层每一层都建立在前一层之上系统层安装 Ubuntu 18.04.6搞定分区和基础软件源。硬件加速层安装 NVIDIA 驱动、CUDA 工具包、cuDNN让深度学习训练能吃到 GPU。运行环境层用 Anaconda 创建独立的 Python 3.7/3.8 环境按项目要求装 PyTorch 和 OpenCV。算法代码层拉取 YOLO-6D 源码编译其中的 Cython 扩展模块核对目录结构和配置文件。数据与训练层下载 LINEMOD 数据集整理成 YOLO 格式标注跑训练、跑指标评估最后用单张图片做姿态推理验证整个流程。这五层每层都有经典问题但好消息是这些问题都有迹可循。我自己踩坑最多的就是第 2 层和第 4 层下面把每一层的关键点都展开讲。2. Ubuntu 18.04 系统层搭建双系统、分区与基础配置2.1 双系统、虚拟机还是物理机直接装先说结论如果你有 NVIDIA 显卡并且要跑 CUDA 训练强烈建议物理机直接装或者双系统虚拟机只会让你想砸电脑。因为虚拟机里要调用物理 GPU 得靠 PCIE Passthrough配置复杂、性能损耗大Shared GPU 方案基本没法训练深度学习模型。如果你的显卡不是 NVIDIA 或者只想跑 CPU 推理那虚拟机装 Ubuntu 18.04 学习环境是没问题的能避免双系统切换的麻烦。双系统安装时要注意引导问题。我的建议是先装 Windows再装 Ubuntu让 Ubuntu 的 GRUB 引导接管启动界面这样最省事。如果反过来先装 Ubuntu 再装 Windows那 Windows 会把引导覆盖掉你又得进 U 盘修复 GRUB。制作启动盘用 RufusWindows 下或者 balenaEtcher写入镜像时选“DD 模式”不要选“ISO 模式”否则可能出现启动后进不了安装界面的情况。2.2 分区方案里的一个关键数字分区是安装 Ubuntu 时最容易被忽略、后期最要命的环节。我第一次装的时候懒得想直接让安装器“清除整个磁盘并安装 Ubuntu”结果后面数据备份、换发行版全部被动了。这次复现我先把磁盘分成了三块/根分区分配 80GB 左右。系统、Anaconda、虚拟环境、代码项目都放这里。/home剩余空间建议至少 200GB。LINEMOD 数据集、训练权重、日志都放这里方便以后重装系统不清数据。swap交换分区大小设为物理内存的 1 倍。16GB 内存就给 16GB swap防止数据集预处理时内存吃紧。如果固态硬盘空间充足还可以单独给/boot分 1GB用来放内核和引导文件这样多个系统共存时引导文件不容易被挤爆。这个分区方案我后来在别的机器上重复用一直很稳。装完系统之后先换软件源再sudo apt update sudo apt upgrade把系统和固件更新到最新。这里有一个建议时序先做系统更新再装显卡驱动不要反过来。如果先装驱动再大版本更新内核驱动模块经常会因为内核版本变化而失效得重新装一遍。3. NVIDIA 驱动、CUDA 与 cuDNN最容易连环翻车的硬件加速层3.1 驱动版本到底怎么选很多教程会让你sudo ubuntu-drivers autoinstall自动安装最新驱动。这在普通桌面使用没问题但在复现 YOLO-6D 的场景下驱动版本必须和 CUDA 版本相互匹配不能盲目追新。YOLO-6D 依赖 PyTorch 的旧版本官方推荐的是 CUDA 10.0/10.1那么 NVIDIA 驱动选 430、435、440 系列就够了。我用的是 440.64.00配 CUDA 10.1训练和推理都稳定。装驱动之前有三件事必须做禁用 Nouveau 开源驱动。新建/etc/modprobe.d/blacklist-nouveau.conf写入两行blacklist nouveau options nouveau modeset0然后执行sudo update-initramfs -u并重启。不屏蔽 NouveauNVIDIA 驱动安装时会直接报“conflicting failure”。进入 BIOS 把 Secure Boot 关掉。开着 Secure Boot 的话NVIDIA 第三方驱动模块很难加载签名问题会一直卡着你。确认 GCC 和 Make 已安装sudo apt install gcc make。NVIDIA 驱动安装包要现场编译内核模块没有编译链必然失败。重启后执行nvidia-smi看到 GPU 型号和驱动版本就说明驱动已经工作了。再顺手跑一下glxinfo | grep OpenGL vendor确认 OpenGL 走的 NVIDIA而不是 llvmpipe如果显示 llvmpipe说明驱动没真正接管 GPU。3.2 CUDA 10.1 安装与 PATH 配置的细节CUDA 的安装文件可以在官方归档页面找到 10.1 版本下载runfile而不是deb包。为什么用 runfile因为 deb 包会连带升级显卡驱动可能把你刚装好的驱动版本覆盖掉。runfile 安装时有一个重要选择在提示“Install NVIDIA Accelerated Graphics Driver for Linux-x86_64 418.x?”时选 No因为我们已经在 3.1 步把驱动单独装好了这里只需要安装 CUDA Toolkit。安装命令sudo sh cuda_10.1.243_418.87.00_linux.run --toolkit --samples --silent关于--silent静默安装我的经验是第一次最好不带这个参数跑一遍交互式界面看清楚每一步提示再决定。界面里三个选项Driver、Toolkit、Samples我只选了后两个。装完后 CUDA 默认在/usr/local/cuda-10.1为了后续兼容通常还要建一个软链接让/usr/local/cuda指向它。然后把路径写进~/.bashrcexport PATH/usr/local/cuda/bin:$PATH export LD_LIBRARY_PATH/usr/local/cuda/lib64:$LD_LIBRARY_PATH export CUDA_HOME/usr/local/cuda写入后source ~/.bashrc执行nvcc -V查看版本。如果你在终端看到的是/usr/local/cuda/bin/nvcc路径下的 CUDA 10.1那这一步就成功了。需要注意的是nvcc -V和nvidia-smi显示的版本可以不一致——nvidia-smi显示的是驱动支持的最高 CUDA 版本nvcc -V显示的才是当前工具链版本。很多人看到两个数字不一样会慌其实这是正常的。cuDNN 下载需要注册账号选择 cuDNN for CUDA 10.1 的 Linux 版本版本号我用的 7.6.5。解压后把文件拷贝到 CUDA 目录tar -xzvf cudnn-10.1-linux-x64-v7.6.5.32.tgz sudo cp cuda/include/cudnn.h /usr/local/cuda/include/ sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/ sudo chmod ar /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*到这里硬件加速层就绪。用nvidia-smi、nvcc -V、cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2三个命令验证三个都能对上就没有问题了。4. Anaconda 环境、PyTorch 与 OpenCVYOLO-6D 运行环境的精确配平4.1 用 Anaconda 隔离环境避免 Python 依赖互相踩踏YOLO-6D 这个项目的依赖比较古老直接装在系统 Python 里会把环境搞得一团糟。我强烈建议用 Anaconda 创建独立环境Python 版本选 3.7。之所以不用最新的 Python 3.11是因为 PyTorch 1.4 时代的预编译包最多支持到 Python 3.7/3.8而且 OpenCV 的某些接口在老版本 Python 上行为最稳定。安装 Anaconda 后创建环境conda create -n yolo6d python3.7 conda activate yolo6d这里有个经验如果 conda 默认源的下载速度慢可以换成国内镜像源但不建议把.condarc里的channel_priority设为严格模式否则有些老包会解析不到。装完 conda 之后先升级一下 pippip install --upgrade pip然后用 pip 装 PyTorch。4.2 PyTorch 版本选择与对应关系YOLO-6D 源码基于 PyTorch 编写项目里常见的要求是 torch 1.4.0。这个版本对应的 CUDA 是 10.1正好匹配我们在第 3 节装好的 CUDA。安装命令pip install torch1.4.0 torchvision0.5.0如果你是直接pip install torch很可能会装上最高版本而最新版 PyTorch 对老代码常出现 API 变动例如Variable类被移除、tensor.numpy()的行为改变。所以一定要指定版本号。安装完成后在 Python 里验证import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))这一条命令能排除 90% 的“环境没配对”问题。如果你看到torch.cuda.is_available()返回 False优先检查驱动版本和 CUDA 版本是否协同而不是急着重装 PyTorch。4.3 OpenCV、Cython 等依赖的坑与处理YOLO-6D 的代码里用了 OpenCV 读取图像、显示结果也用到了 Cython 编译加速模块。一般安装pip install opencv-python4.1.2.30 pip install cython numpy scipy matplotlib tqdmOpenCV 版本这里有一个特别坑的点如果装的是最新版 opencv-python比如 4.8老代码里cv2.findContours的返回值数量会从 2 个变成 3 个直接导致解包报错。所以务必用 4.1.x。还有国产开源镜像站里的 opencv-python 有时候会挂掉遇到Could not find a version that satisfies the requirement时检查一下 pip 源是否同步完整。到这里运行环境基本就绪。把这几个包的版本核对一遍python -c import cv2; print(cv2.__version__) python -c from torch import cuda; print(cuda.is_available())如果都正常就可以拉代码了。5. 拉取 YOLO-6D 源码、编译 Cython 扩展与项目结构解读5.1 源码获取与目录结构YOLO-6D 的源码在 GitHub 上直接克隆主分支git clone https://github.com/tex-mx/YOLO-6D.git cd YOLO-6D这个项目结构不算复杂核心目录和文件有cfg/存放网络结构配置YOLO-6D 把原来的类别数改成了“物体类别数”并且在输出层增加了对 8 个 2D 角点的回归。data/存放类别文件、训练/验证图片列表、标注文件模板。models/定义 pytorch 版的网络模型。utils/包括数据加载、增强、姿态解算、可视化等工具代码。region_loss.py核心损失函数负责边界框损失、物体置信度损失、2D 投影点损失的加权组合。train.py、test.py训练和推理入口。demo.py简单验证脚本。克隆完代码后检查一下项目里的requirements.txt有没有特定的版本约束。如果没有现成的 requirements 文件就以我上面 4.3 节装的包为准。不要一上来就pip install -r requirements.txt很多老项目根本没写这个文件。5.2 Cython 编译环节的一个关键动作项目里有些模块是 Cython 写的比如某些数据预处理或者损失计算在第一次导入时会报“找不到 .so 文件”之类的错误。处理方式是在项目根目录执行python setup.py build_ext --inplace这一步会自动把.pyx文件编译成当前环境可用的共享库。如果编译过程中报错说缺少 Cython先pip install cython再重新编译。还有一个常见错误是gcc: error: unrecognized command line option -fstack-protector-strong这种一般出现在 GCC 版本过老或者系统库不匹配的 Ubuntu 16.04 上18.04 自带的 GCC 7.5 通常没问题。如果遇到 OpenMP 相关的libgomp.so.1找不到执行sudo apt install libomp-dev。5.3 配置文件与路径适配YOLO-6D 里需要手动指定的配置主要有data/lm_data/下的类别名文件每个物体类别写一行比如 ape、cam、cat 等。训练时用到的.txt列表每一行是一个图片路径加标注信息。cfg/yolo-pose.cfg里的num_classes要改成实际检测的类别数LINEMOD 一般是 15 类物体或者按你的需求只训练其中几个。路径配置切到自己的电脑时很容易忘改绝对路径导致训练时一启动就报FileNotFoundError。项目里很多代码用的是相对路径所以尽量统一在YOLO-6D/目录下执行命令不要从别的目录调用脚本。6. LINEMOD 数据集准备与标注处理训练前最耗时的一环6.1 数据集下载与目录组织LINEMOD 是 6D 姿态估计领域最经典的数据集之一包含 15 个物体每个物体大约有 1000 多张彩色图和对应的深度图同时提供了物体 3D 模型、真实位姿标注和分割掩膜。下载之后把数据放在项目的一个统一目录下比如YOLO-6D/data/lm_data/。需要注意原始 LINEMOD 数据集里每个物体一个子目录目录名一般就叫ape、benchvise、cam这类。有些网上的镜像会把大小写或者命名搞混比如driller写成Driller这在 Linux 下是区分大小写的会导致部分样本读取不到最后测试指标偏低。我做的时候先把所有目录名统一成小写再用脚本检查每个物体目录下的图片数量和标注数量是否一致。6.2 将数据集转换为 YOLO-6D 需要的格式YOLO-6D 的典型输入路径是图片文件 一个与图片同名的.txt标注文件。.txt里每一行表示一个目标物体字段包括类别索引、归一化的中心点 x/y、归一化的宽高以及 8 个 3D 包围盒角点在图像上的归一化投影坐标x1, y1, ..., x8, y8。说白了它比标准 YOLO 标注多了 16 个数值。如果你拿到的是原始 LINEMOD 格式有旋转矩阵 R、平移向量 t、相机内参 K需要根据物体 3D 包围盒角点计算投影坐标。这一步我建议写个小工具脚本。核心思路是先加载物体的 3D 模型文件通常是一个.ply计算出这个模型在物体坐标系下的 3D 包围盒八个角点然后用标注给出的 R、t 把角点变换到相机坐标系再用相机内参 K 投影到图像平面。投影公式很简单x_pixel fx * X_cam / Z_cam cx y_pixel fy * Y_cam / Z_cam cy其中X_cam, Y_cam, Z_cam是角点在相机坐标系下的坐标fx, fy, cx, cy是相机内参。LINEMOD 数据集对应的相机内参是官方提供的参考值为fx572.4114, fy573.5704, cx325.2611, cy242.0489。正常情况下你用官方内参得到的投影点应该和标注渲染图吻合如果偏差很大说明 R/t 的坐标约定物体坐标系还是世界坐标系搞反了。6.3 训练集/验证集划分技巧LINEMOD 不像 COCO 那样给了固定的 train/val 划分YOLO-6D 的官方做法是在每个物体图像序列里取一部分做训练、一部分做测试。我建议按编号顺序划分前 80% 做训练后 20% 做验证和测试划分前先随机打乱一下避免同一段连续帧同时出现在训练和测试里导致“作弊性”准确率高得离谱。把图片路径写进train.txt、valid.txt时注意路径分隔符要用绝对路径或者相对项目根目录的路径。很多人在这一步写成了 Windows 风格的反斜杠路径\data\lm_data\ape\000001.jpg在 Linux 下会直接识别为普通字符训练时永远找不到图片报错还很隐晦。7. 训练、评估与单图推理完整实操过程7.1 训练启动与关键参数说明确认数据和配置都到位后开始训练。YOLO-6D 一般用如下命令python train.py --datacfg cfg/lm_data.data --modelcfg cfg/yolo-pose.cfg --initweightfile pretrained/darknet19_448.conv.23几个参数需要解释一下--datacfg指向.data配置文件里面写明了类别数、训练图片列表路径、验证图片列表路径和备份输出路径。--modelcfgYOLO-6D 基于 darknet19 的 backbone配置文件里定义每一层卷积核数量、stride、route 连接等。--initweightfile预训练权重文件一般用 darknet19 在 ImageNet 上的分类权重。没有预训练权重直接从零开始训练收敛速度会慢很多最终精度也往往不理想。批大小我用的 16初始学习率 0.001训练 100 到 200 轮左右可以看到 loss 明显下降。显存不够的时候可以把批大小降到 8 或者 4但要注意同步降低学习率或者做 warmup不然容易出现 loss 震荡。训练过程中yolo-pose.cfg里的random1表示开启多尺度训练显存紧张时把它改成random0可以减少随机分辨率带来的显存波动。在训练时两个监控指标要注意一个是总 loss 是否在下降另一个是 loss 里三个分量坐标、置信度、姿态投影点的占比是否合理。YOLO-6D 的官方实现里姿态损失的权重比置信度损失大不少如果你的自定义数据里物体很小或者很密集这个权重配比可能要调。7.2 训练日志与检查点保存训练过程会定期把权重保存到备份目录文件名类似yolo-pose_5000.weights这个数字通常是迭代次数。注意这里的.weights是 YOLO 风格的权重格式不是 PyTorch 的.pth加载和推理时要通过项目提供的load_weights函数读取不能直接torch.load。这也是新手容易懵的地方——看到.weights就以为是 PyTorch 的 checkpoint结果一加载就报维度不对。训练中断也没关系可以在命令行参数里指定从某个中间权重继续训练一般传--resume或者直接把它作为--initweightfile看具体代码支持哪种方式。7.3 测试与单张图片推理训练完或者直接用官方预训练权重就可以跑推理了。常见命令python test.py --datacfg cfg/lm_data.data --modelcfg cfg/yolo-pose.cfg --weightfile backup/yolo-pose_final.weightstest.py会逐张读取验证集图片先跑一次前向传播得到检测框和 8 个 2D 投影点然后利用物体的 3D 包围盒角点做 EPnP 解算输出一个包含旋转矩阵和平移向量的 6D 位姿。代码会把预测框画在图上同时把物体坐标系原点投影到图像上方便人眼检查定位置是否准确。如果是自己拍的单张图片不要直接跑 test.py因为它默认读取数据集配置和图片列表。更稳的做法是写一个小脚本加载模型、读取图片、前向推理得到投影点再调用工具函数计算位姿。注意测试之前要把图片尺寸缩放到和训练时一致一般是 416x416 或者 448x448YOLO-6D 默认网络输入是 448x448缩放之后要同步把内参 K 的像素坐标中心做对应偏移不能直接拿原始 K 去算位姿否则物体位置会往一边偏。7.4 ADD 指标与姿态精度评估姿态估计的精度一般用 ADDAverage Distance Distance来衡量把物体 3D 模型上的点根据预测位姿和真实位姿分别投影到三维空间计算对应点距离的平均值如果小于某个阈值一般是物体直径的 10%就认为这次估计是正确的。如果物体是对称的比如杯子、圆柱要用 ADD-S 变体允许最近邻匹配。跑评估脚本时输出会包含每个类别的检测率、姿态估计准确率。LINEMOD 上 YOLO-6D 的表现大约在 60% 到 80% 的 ADD 准确率不同物体差异很大这已经达到实用的水平了。如果你的结果和论文数值差很多优先怀疑标注转换的问题——尤其是投影点没有用对相机内参或者 3D 包围盒角点顺序不一致。角点顺序错乱会导致 EPnP 解算出的姿态刚好旋转了某个角度这在可视化中非常明显物体框是准的但中心投影点偏得离谱。8. 高频问题排查与避坑速查表这一节把我自己和同事在实际复现中遇到的高频问题汇总成一张表按“现象 → 可能原因 → 解决办法”的思路整理方便你在卡住的时候直接对照。现象可能原因解决办法nvidia-smi提示未安装Nouveau 未屏蔽、Secure Boot 未关写 blacklist-nouveau.conf重启进 BIOS 关 Secure BootPyTorch 里torch.cuda.is_available()为 False驱动与 CUDA 版本不匹配nvidia-smi确认驱动型号重装匹配 CUDA 10.1 的驱动setup.py build_ext --inplace编译报错缺少 Cython 或 gccpip install cythonsudo apt install build-essentialOpenCVfindContours解包报错opencv 版本太高返回值数目变了降到 4.1.xpip install opencv-python4.1.2.30训练一启动就FileNotFoundError图片列表路径写错检查 train.txt 里路径是否绝对路径文件名大小写是否正确loss 变成 NaN学习率过大、标注中有空行或坐标越界降低学习率清洗标注文件确认所有坐标在 0~1 之间推理时检测不到物体输入尺寸不一致、置信度阈值太高统一 448x448调低置信度阈值检查模型输入通道位姿解算结果偏转 90°3D 包围盒角点顺序和代码不一致对比官方角点顺序重排投影点列顺序显存不足训练中断batch size 太大调小 batch size把 cfg 里的random1改为 0打开图片窗口卡死或无响应没有显示环境或 OpenCV GUI 依赖缺失用无头模式保存结果图或安装 libgl1、libglib2.0-0除表里这些之外还有两个容易被忽略的细节。第一YOLO-6D 的输出包含很多个nan时不一定是数据和代码的问题很可能是读取图片时用了灰度图或者 4 通道 PNG导致张量形状不对。建议在数据加载函数里打印一下img.shape和img.dtype确保是 3 通道、uint8。第二测试时如果看到检测框特别窄或者特别扁检查一下标注里的宽高是否用的是“归一化到原图尺寸”而不是归一化到网络输入尺寸。YOLO 格式的宽高本来应该归一化到原图宽高但很多转换脚本为了省事直接用了 416/448 做分母这个小瑕疵会让最终位姿精度掉一截。9. 复现完成后的扩展建议与个人心得YOLO-6D 本身的项目停留在 YOLOv2/darknet19 时代精度和速度在当时很有竞争力放到现在看网络结构已经偏老。但复现它最大的价值在于理解“目标检测 姿态解算”这条技术路线的完整闭环这个思路在更新更快的网络YOLOX、RTMDet、CenterNet里仍然成立。你只要把特征提取部分换成新网络输出头保留“8 个 2D 投影点”的回归目标后面照样用 EPnP 解算位姿就能做一个精度不错的现代版 6D 姿态估计系统。如果想在这个基础上进一步扩展可以尝试三个方向。一是把 YOLO-6D 的输出接到 ROS 里配合机械臂做“视觉引导抓取”Ubuntu 18.04 本来就对 ROS1 支持很好这也是当年很多人搭这个环境的原因之一。二是把 LINEMOD 换成自己采集的物体数据采集时用棋盘格标定板对相机做一次标定内参必须准确否则后面所有投影计算都会带系统性偏移。三是把 8 个角点回归改成密集关键点回归或者加入深度图分支对遮挡情况的鲁棒性会好很多。我个人在复现过程中最大的体会是环境搭建这件事看起来是重复劳动实际上最考验工程经验。很多人遇到问题就重装系统、重装驱动结果反复踩同一个坑。其实只需要做好两件事一是在每个安装步骤之后立刻验证结果确认无误再进下一步二是记录下每个软件的版本组合形成自己的一套“兼容性对照表”。这样不管是复现姿态估计还是以后跑其他老项目都能在半小时内把环境拉起来而不是把一整天耗在翻论坛上。最后再分享一个非常实用的小习惯把第 3 节的nvidia-smi、nvcc -V、python -c import torch; print(torch.__version__, torch.cuda.is_available())这三个验证命令写成一个check_env.sh脚本以后换机器、换系统之后先跑一遍环境有没有问题一目了然。
返回列表