当前位置: 首页 > article >正文

在Ubuntu 20.04上从零搭建Faster R-CNN PyTorch环境(避坑CUDA 11.1 + PyTorch 1.9)

在Ubuntu 20.04上从零搭建Faster R-CNN PyTorch环境避坑CUDA 11.1 PyTorch 1.9当深度学习遇上目标检测Faster R-CNN无疑是这个领域的重要里程碑。而PyTorch作为当下最受欢迎的深度学习框架之一其灵活性和易用性让研究者趋之若鹜。本文将带你从零开始在Ubuntu 20.04系统上搭建Faster R-CNN的PyTorch实现环境特别针对CUDA 11.1和PyTorch 1.9版本进行优化配置避开那些让无数开发者头疼的版本兼容性问题。1. 环境准备与基础配置1.1 系统要求与初始检查在开始之前确保你的系统满足以下基本要求操作系统Ubuntu 20.04 LTS推荐使用纯净安装GPUNVIDIA显卡至少4GB显存推荐8GB以上驱动NVIDIA驱动版本≥450.80.02存储空间至少50GB可用空间用于数据集和模型首先更新系统并安装基础工具sudo apt update sudo apt upgrade -y sudo apt install -y build-essential cmake git wget unzip验证NVIDIA驱动是否正确安装nvidia-smi你应该看到类似如下的输出其中包含你的GPU型号和驱动版本信息----------------------------------------------------------------------------- | NVIDIA-SMI 450.80.02 Driver Version: 450.80.02 CUDA Version: 11.0 | |--------------------------------------------------------------------------- | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | || | 0 GeForce RTX 208... On | 00000000:01:00.0 On | N/A | | 30% 45C P8 18W / 250W | 687MiB / 11019MiB | 0% Default | | | | N/A | ---------------------------------------------------------------------------1.2 CUDA 11.1与cuDNN安装CUDA 11.1是一个相对较新的版本与PyTorch 1.9有良好的兼容性。以下是安装步骤下载CUDA 11.1安装包wget https://developer.download.nvidia.com/compute/cuda/11.1.0/local_installers/cuda_11.1.0_455.23.05_linux.run运行安装程序sudo sh cuda_11.1.0_455.23.05_linux.run注意安装时不要选择安装驱动如果已经安装了更新的驱动只选择CUDA Toolkit。安装完成后将CUDA路径添加到环境变量echo export PATH/usr/local/cuda-11.1/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH/usr/local/cuda-11.1/lib64:$LD_LIBRARY_PATH ~/.bashrc source ~/.bashrc验证CUDA安装nvcc --version接下来安装cuDNN这是NVIDIA提供的深度神经网络加速库从NVIDIA官网下载cuDNN for CUDA 11.1需要注册账号解压并安装tar -xzvf cudnn-11.1-linux-x64-v8.0.5.39.tgz sudo cp cuda/include/cudnn*.h /usr/local/cuda-11.1/include sudo cp cuda/lib64/libcudnn* /usr/local/cuda-11.1/lib64 sudo chmod ar /usr/local/cuda-11.1/include/cudnn*.h /usr/local/cuda-11.1/lib64/libcudnn*2. Python环境与PyTorch安装2.1 创建隔离的Python环境为了避免与系统Python环境冲突我们使用conda创建一个独立环境wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh bash Miniconda3-latest-Linux-x86_64.sh # 按照提示完成安装后 conda create -n fasterrcnn python3.8 -y conda activate fasterrcnn2.2 安装PyTorch 1.9及相关依赖PyTorch 1.9对CUDA 11.1有官方支持使用以下命令安装conda install pytorch1.9.0 torchvision0.10.0 torchaudio0.9.0 cudatoolkit11.1 -c pytorch -c conda-forge验证PyTorch是否正确识别了CUDAimport torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))你应该看到类似如下的输出1.9.0 True NVIDIA GeForce RTX 2080 Ti2.3 安装其他必要依赖Faster R-CNN需要一些额外的Python包pip install numpy scipy matplotlib opencv-python pillow scikit-image pyyaml tqdm特别要注意的是scipy的版本1.3.0以上版本移除了imread函数我们需要使用imageio替代pip install imageio3. Faster R-CNN源码获取与编译3.1 获取源代码推荐使用PyTorch 1.0兼容的分支git clone -b pytorch-1.0 --single-branch https://github.com/jwyang/faster-rcnn.pytorch.git cd faster-rcnn.pytorch3.2 编译CUDA扩展Faster R-CNN需要编译一些CUDA扩展cd lib python setup.py build develop这个步骤可能会遇到几个常见问题错误invalid command develop解决方案确保你已经安装了最新版本的setuptoolspip install --upgrade setuptoolsImportError: cannot import name _mask解决方案这通常是因为编译不完整尝试完全删除build目录后重新编译rm -rf build python setup.py build developscipy.misc.imread缺失解决方案修改代码中使用imageio.imread替代# 在需要的地方替换 from imageio import imread3.3 准备数据集我们将使用PASCAL VOC 2007数据集作为示例创建数据目录结构mkdir -p data/VOCdevkit2007 cd data/VOCdevkit2007下载数据集wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar解压数据集tar xvf VOCtrainval_06-Nov-2007.tar tar xvf VOCtest_06-Nov-2007.tar tar xvf VOCdevkit_08-Jun-2007.tar创建软链接cd ../.. ln -s data/VOCdevkit2007/VOCdevkit data/VOCdevkit20074. 模型训练与验证4.1 下载预训练模型Faster R-CNN通常使用在ImageNet上预训练的基础网络如VGG16或ResNet101mkdir -p data/pretrained_model cd data/pretrained_model下载VGG16预训练模型wget https://s3-us-west-2.amazonaws.com/jwyang/faster-rcnn-vgg16-1.0.0.pth或者ResNet101预训练模型wget https://s3-us-west-2.amazonaws.com/jwyang/faster-rcnn-res101-1.0.0.pth4.2 训练配置训练脚本的主要参数如下表所示参数说明推荐值--dataset使用的数据集pascal_voc--net基础网络架构vgg16或res101--bs批处理大小根据GPU内存调整通常1-4--nw数据加载线程数根据CPU核心数调整通常4-8--lr初始学习率0.001-0.01--lr_decay_step学习率衰减步长5-10--cuda使用GPU加速总是启用使用VGG16训练示例CUDA_VISIBLE_DEVICES0 python trainval_net.py \ --dataset pascal_voc \ --net vgg16 \ --bs 4 \ --nw 4 \ --lr 0.001 \ --lr_decay_step 5 \ --cuda4.3 常见训练问题解决GPU内存不足降低批处理大小--bs参数使用更小的基础网络如VGG16代替ResNet101启用梯度检查点需要修改代码Loss不收敛调整学习率尝试0.01, 0.001, 0.0001检查数据预处理是否正确确保预训练模型正确加载训练速度慢增加数据加载线程数--nw参数使用更快的存储如SSD代替HDD考虑使用混合精度训练4.4 模型测试与评估训练完成后可以使用以下命令评估模型在测试集上的表现python test_net.py \ --dataset pascal_voc \ --net vgg16 \ --checksession 1 \ --checkepoch 20 \ --checkpoint 10021 \ --cuda参数说明checksession: 训练会话ID通常为1checkepoch: 训练的epoch数checkpoint: 模型检查点编号5. 自定义数据集训练5.1 准备自定义数据集要训练自己的数据集需要按照PASCAL VOC的格式组织数据VOCdevkit └── VOC2007 ├── Annotations # XML标注文件 ├── ImageSets │ └── Main # 训练/验证/测试划分文件 └── JPEGImages # 原始图像5.2 修改类别定义在lib/datasets/pascal_voc.py中修改类别列表self._classes ( __background__, # always index 0 class1, class2, # 添加你的类别... )5.3 清除缓存在开始新训练前删除旧的缓存文件rm data/cache/voc_2007_trainval_gt_roidb.pkl5.4 启动训练使用与前面类似的命令开始训练确保指定正确的数据集路径和网络架构。6. 模型部署与推理6.1 单张图像测试使用demo.py脚本可以对单张图像进行测试python demo.py \ --net vgg16 \ --checksession 1 \ --checkepoch 20 \ --checkpoint 10021 \ --cuda \ --load_dir models \ --image_dir images6.2 批量推理要批量处理一个目录下的所有图像可以修改demo.py脚本或使用如下命令for img in images/*.jpg; do python demo.py \ --net vgg16 \ --checksession 1 \ --checkepoch 20 \ --checkpoint 10021 \ --cuda \ --load_dir models \ --image $img done6.3 性能优化技巧启用CuDNN基准测试在代码开始处添加torch.backends.cudnn.benchmark True使用混合精度训练安装apex库git clone https://github.com/NVIDIA/apex cd apex pip install -v --no-cache-dir --global-option--cpp_ext --global-option--cuda_ext ./模型量化训练后可以对模型进行量化以减少内存占用和提高推理速度model torch.quantization.quantize_dynamic( model, {torch.nn.Linear}, dtypetorch.qint8 )7. 高级配置与调优7.1 修改锚点(Anchor)设置Faster R-CNN的性能很大程度上依赖于锚点的设置。要修改锚点参数编辑lib/model/config.py__C.ANCHOR_SCALES [8, 16, 32] # 默认锚点尺度 __C.ANCHOR_RATIOS [0.5, 1, 2] # 默认宽高比7.2 调整NMS阈值非极大值抑制(NMS)是目标检测中的关键步骤可以调整其阈值__C.TEST.NMS 0.3 # NMS阈值默认0.37.3 学习率调度策略默认使用步长衰减可以尝试其他策略如余弦退火scheduler torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max10)7.4 多GPU训练要使用多个GPU进行训练可以使用PyTorch的DataParallelmodel torch.nn.DataParallel(model)然后在训练命令中指定多个GPUCUDA_VISIBLE_DEVICES0,1 python trainval_net.py ...8. 可视化与调试8.1 训练过程可视化使用TensorBoard可以方便地监控训练过程安装TensorBoardpip install tensorboard在代码中添加记录from torch.utils.tensorboard import SummaryWriter writer SummaryWriter() writer.add_scalar(Loss/total, loss.item(), iteration)启动TensorBoardtensorboard --logdirruns8.2 检测结果可视化修改demo.py脚本可以保存带有检测框的图像cv2.imwrite(output.jpg, im2show)8.3 常见错误调试CUDA out of memory降低批处理大小使用更小的输入图像尺寸清理不必要的GPU缓存NaN loss检查数据中是否有无效值降低学习率添加梯度裁剪预测框位置异常检查锚点设置是否合理验证数据标注是否正确调整回归损失权重

相关文章:

在Ubuntu 20.04上从零搭建Faster R-CNN PyTorch环境(避坑CUDA 11.1 + PyTorch 1.9)

在Ubuntu 20.04上从零搭建Faster R-CNN PyTorch环境(避坑CUDA 11.1 PyTorch 1.9) 当深度学习遇上目标检测,Faster R-CNN无疑是这个领域的重要里程碑。而PyTorch作为当下最受欢迎的深度学习框架之一,其灵活性和易用性让研究者趋之…...

如何快速上手tts-vue:微软语音合成工具的完整使用指南

如何快速上手tts-vue:微软语音合成工具的完整使用指南 【免费下载链接】tts-vue 🎤 微软语音合成工具,使用 Electron Vue ElementPlus Vite 构建。 项目地址: https://gitcode.com/gh_mirrors/tt/tts-vue 在数字化时代,…...

Jupyter Notebook代码提示总失灵?手把手教你用Anaconda搞定Hinterland插件(附清华源加速)

Jupyter Notebook代码提示失效?Anaconda环境下的终极解决方案 每次在Jupyter Notebook里敲代码时,看着其他IDE流畅的自动补全功能,是不是总有种"别人家孩子"的羡慕感?作为数据科学和机器学习领域的标配工具,…...

【入门C++语法】第8章 while语句

第8章 while语句 一、 什么是 while 语句 在编程中,我们经常会遇到需要重复执行某段代码的场景。比如反复读取用户输入直到符合要求、多次计算相同逻辑的数值等。while 语句就是 C++ 中用于实现 “循环执行” 的核心语句之一,它的核心逻辑是 “只要满足条件,就重复执行代码…...

Winhance中文版:3步解决Windows系统卡顿与臃肿问题

Winhance中文版:3步解决Windows系统卡顿与臃肿问题 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-zh_CN…...

用Python+Matplotlib分析你的游戏战绩:手把手教你画多组数据对比箱线图

用PythonMatplotlib分析你的游戏战绩:手把手教你画多组数据对比箱线图 每次游戏结束后,看着战绩面板上密密麻麻的数字,你是否好奇自己最擅长的英雄究竟是哪个?或者想知道在不同时间段的表现稳定性如何?箱线图&#xf…...

智能体Agent输入DQN算法强化学习控制主动悬架

出DQN算法强化学习控制的主动悬架 质心加速度 悬架动绕度 轮胎位移作为智能体agent的输入 搭建了悬架的空间状态方程 可以运行 效果很好 可以与pid控制进行对比 可带强化学习dqn的Matlab代码 有详细的介绍 可供学习直接上干货。这次用DQN搞了个汽车主动悬架的控制器&#xff0…...

3分钟掌握艾尔登法环存档迁移:EldenRingSaveCopier终极指南

3分钟掌握艾尔登法环存档迁移:EldenRingSaveCopier终极指南 【免费下载链接】EldenRingSaveCopier 项目地址: https://gitcode.com/gh_mirrors/el/EldenRingSaveCopier 艾尔登法环存档管理是每位褪色者必须掌握的技能。面对存档损坏、设备更换或多角色管理的…...

AGI可靠性如何量化?揭秘ISO/IEC 23894合规测试框架的5层验证漏斗

第一章:AGI可靠性如何量化?揭秘ISO/IEC 23894合规测试框架的5层验证漏斗 2026奇点智能技术大会(https://ml-summit.org) AGI系统的可靠性不能依赖主观评估或单一指标,而需依托可复现、可审计、可跨组织比对的标准化验证路径。ISO/IEC 23894:…...

别再死记硬背了!用Python+Matplotlib动态演示5G NR调度中的时隙(Slot)与微时隙(Mini-Slot)

用Python动态可视化5G NR调度中的时隙与微时隙机制 在5G NR系统中,时隙(Slot)和微时隙(Mini-Slot)的调度机制是理解无线资源分配的关键。但对于许多开发者而言,协议文档中抽象的时间单位描述往往难以形成直…...

【最后的AGI并跑窗口】:2024–2026是决定未来十年技术主导权的关键三年——基于52项国家级AI战略文件、137家实验室年报与21次闭门听证会的独家研判

第一章:AGI研发的国际竞争格局 2026奇点智能技术大会(https://ml-summit.org) 全球通用人工智能(AGI)研发已进入国家战略竞速阶段,美、中、欧、日、韩等主要经济体正通过政策投入、算力基建、基础模型生态与人才计划构建多维竞争…...

PTPX功耗分析模式怎么选?Averaged vs. Time-Based模式深度对比与选型指南

PTPX功耗分析模式实战选型:从原理到决策的完整指南 芯片设计就像一场精心策划的能源管理艺术展,而PTPX则是我们手中那支精准的画笔。当设计进入纳米级工艺节点,功耗分析不再是锦上添花,而是决定芯片成败的关键环节。面对Averaged…...

VS Code Mermaid插件深度解析:技术文档图表渲染的架构内幕

VS Code Mermaid插件深度解析:技术文档图表渲染的架构内幕 【免费下载链接】vscode-markdown-mermaid Adds Mermaid diagram and flowchart support to VS Codes builtin markdown preview 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-markdown-mermaid …...

前端可视化图表库选型

前端可视化图表库选型指南 在数据驱动的时代,前端可视化图表库成为开发者的重要工具。无论是展示业务数据、分析用户行为,还是构建交互式报表,选择合适的图表库直接影响开发效率和用户体验。面对众多开源和商业化的图表库,如何根…...

从仿真结果到发表级图表:手把手教你用Lumerical脚本做数据可视化

从仿真结果到发表级图表:手把手教你用Lumerical脚本做数据可视化 在光学仿真领域,Lumerical FDTD解决方案因其强大的计算能力和灵活的脚本控制而广受研究者青睐。然而,许多用户在完成仿真后常常面临一个共同挑战:如何将原始的仿真…...

AGI伦理对齐失效的3个隐蔽信号,2026奇点大会治理框架中已强制嵌入监测阈值

第一章:2026奇点智能技术大会:AGI的治理框架 2026奇点智能技术大会(https://ml-summit.org) 全球首个AGI治理白皮书发布 在2026奇点智能技术大会上,联合国教科文组织与全球AI治理联盟(GAIA Council)联合发布了《通用…...

PSIM仿真实战:反激电源从理论到实现的5个关键步骤(附避坑指南)

PSIM仿真实战:反激电源从理论到实现的5个关键步骤(附避坑指南) 反激电源作为开关电源中的经典拓扑,凭借其结构简单、成本低廉的优势,在中小功率场景中占据重要地位。但纸上得来终觉浅,许多工程师在将理论转…...

点云全局配准实战——Go-ICP从零实现与PCL集成优化

1. Go-ICP算法与点云配准基础 刚接触三维点云处理时,第一次听说"配准"这个词还以为是什么高深莫测的黑科技。其实简单来说,点云配准就是把不同视角扫描得到的点云数据对齐到同一个坐标系的过程。想象你拿着手机绕着物体拍了一圈照片&#xff…...

p5.js Web Editor开发环境配置与部署问题终极解决方案

p5.js Web Editor开发环境配置与部署问题终极解决方案 【免费下载链接】p5.js-web-editor The p5.js Editor is a website for creating p5.js sketches, with a focus on making coding accessible and inclusive for artists, designers, educators, beginners, and anyone e…...

告别接线恐惧!用STM32CubeMX+Keil5快速搞定Ra-01S LoRa模块数据收发(附完整工程)

STM32CubeMXKeil5极速开发指南:Ra-01S LoRa模块数据收发实战 在物联网设备爆发式增长的今天,LoRa技术凭借其远距离、低功耗的特性成为LPWAN领域的重要解决方案。而作为嵌入式开发者,如何快速实现LoRa模块与STM32的集成,往往决定着…...

如何快速掌握Path of Building:流放之路离线构建规划终极指南

如何快速掌握Path of Building:流放之路离线构建规划终极指南 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding Path of Building是《流放之路》玩家必备的离线…...

雀魂AI助手Akagi:从入门到精通的终极使用指南

雀魂AI助手Akagi:从入门到精通的终极使用指南 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riichi City, Amatsuki, wit…...

【AGI安全治理白皮书级指南】:20年AI伦理专家亲授7大风险红线与实时拦截框架

第一章:AGI安全治理的范式跃迁 2026奇点智能技术大会(https://ml-summit.org) 传统AI治理框架建立在“可控性假设”之上——即系统行为可被训练目标、监督信号与边界约束所充分引导。而通用人工智能(AGI)的涌现能力、目标内化机制与跨域自主…...

如何永久保存微信聊天记录:留痕工具的终极解决方案

如何永久保存微信聊天记录:留痕工具的终极解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMs…...

vuegg常见问题解决方案:从安装配置到使用技巧的完整FAQ

vuegg常见问题解决方案:从安装配置到使用技巧的完整FAQ 【免费下载链接】vuegg :hatching_chick: vue GUI generator 项目地址: https://gitcode.com/gh_mirrors/vu/vuegg vuegg是一款高效的Vue GUI生成器,能够帮助开发者通过可视化界面快速构建V…...

Afilmory多存储适配器架构:支持S3、GitHub、Eagle等8种存储源

Afilmory多存储适配器架构:支持S3、GitHub、Eagle等8种存储源 【免费下载链接】afilmory Modern photo gallery for photographers, with S3/GitHub sync, EXIF details, maps, and a WebGL viewer. 项目地址: https://gitcode.com/gh_mirrors/iris71/afilmory …...

ABTestingGateway扩展开发教程:如何添加新的自定义分流方式

ABTestingGateway扩展开发教程:如何添加新的自定义分流方式 【免费下载链接】ABTestingGateway 项目地址: https://gitcode.com/gh_mirrors/ab/ABTestingGateway ABTestingGateway是一款基于Nginx-Lua的动态分流系统,通过灵活的策略配置实现请求…...

为什么选择Etar-Calendar:5大理由让你爱上这款隐私友好的日历工具

为什么选择Etar-Calendar:5大理由让你爱上这款隐私友好的日历工具 【免费下载链接】Etar-Calendar Android open source calendar 项目地址: https://gitcode.com/gh_mirrors/et/Etar-Calendar Etar-Calendar是一款专为Android用户打造的开源日历应用&#x…...

Sloth 插件系统详解:如何自定义 SLI 和扩展功能

Sloth 插件系统详解:如何自定义 SLI 和扩展功能 【免费下载链接】sloth 🦥 Easy and simple Prometheus SLO (service level objectives) generator 项目地址: https://gitcode.com/gh_mirrors/slo/sloth Sloth 是一款简单易用的 Prometheus SLO&…...

Time-LLM社区生态:从NeuralForecast到PyPOTS的集成之路

Time-LLM社区生态:从NeuralForecast到PyPOTS的集成之路 【免费下载链接】Time-LLM [ICLR 2024] Official implementation of " 🦙 Time-LLM: Time Series Forecasting by Reprogramming Large Language Models" 项目地址: https://gitcode.c…...