使用WSL配置mmdetection环境

使用WSL配置 mmdetection 环境

Editor : LZS
github博客地址

补充:
添加了 mmrotate 环境配置步骤

1. Ubuntu 环境配置(WSL)

参考链接
配置wsl2-Ubuntu视频
wsl前期准备
官方教程
公孙启博客
wsl迁移

1.1 安装wsl

step1
官方教程
开启wsl相关功能
wsl前期准备

打开控制面板 选择 程序 -> 启动或关闭Windows功能
勾选适用与Linux的Windows子系统虚拟机平台
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
然后重启电脑

或者以管理员身份打开 PowerShell 输入

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

然后重启电脑

step2
下载 Linux 内核更新包 wsl_update_x64.msi
linux内核更新包
运行更新包进行安装

step3
微软商店下载ubuntu20.04

step4
wsl更新到wsl2
设置wsl2为默认版本(以管理员打开powershell)

wsl --set-default-version 2

启动wsl 第一次会安装 Ubuntu 需要输入用户名以及密码

wsl

step5 (optional)
wsl迁移
wsl默认路径是C盘 可以迁移到其他地方
即先备份到一个位置 再加载到另一个位置

以管理员运行 powershell
关闭wsl

wsl --shutdown

导出wsl

wsl --export Ubuntu-20.04 D:/ubuntu/ubuntu2004.tar

卸载原有的Ubuntu (卸载后空间会自动释放)

wsl --unregister Ubuntu-20.04

导入wsl

wsl --import Ubuntu-20.04 D:/ubuntu/ubuntu2004 D:/ubuntu/ubuntu2004.tar --version 2

修改默认加载的用户名

ubuntu2004 config --default-user lzs

1.2 安装 cuda 环境

step1
安装 cudatoolkit
进入官网选择对应版本的 cudatoolkit
cudatoolkit官网
选择linux, x86_64, wsl-Ubuntu, version-2.0, deb(local)
复制命令输入到wsl

step2
cuda 环境变量配置

sudo nano ~/.bashrc

将下面两行添加进文件最后(注意改路径中的cuda版本号)

export PATH=/usr/local/cuda-11.7/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}

保存退出后(Ctrl+x)
更新环境变量

source ~/.bashrc

显示 cuda 版本

nvcc -V

step3
下载 cudnn
cudnn官网下载
下载对应版本的 cudnn
将下载的 .tar.xz 文件复制到 Ubuntu 的 home 目录下
解压

sudo tar -xvf cudnn**

若报错 删去 identifier 文件再执行解压命令

step4
配置 cudnn
把解压得到的文件分别拷贝到对应的文件夹(注意改路径中的cuda版本号)
进入解压文件夹

cd cudnn-linux-x86_64-8.9.4.25_cuda11-archive/

复制到对应文件夹

sudo cp -r /lib/* /usr/local/cuda-11.8/lib64/
sudo cp -r /include/* /usr/local/cuda-11.8/include/

更改读取权限

sudo chmod a+r /usr/local/cuda-11.8/include/cudnn*
sudo chmod a+r /usr/local/cuda-11.8/lib64/libcudnn*

检查 cudnn 是否安装成功

cat /usr/local/cuda-11.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
nvidia-smi

没有报错即为安装成功

1.3 配置 conda 环境

step1
anaconda官网
官网复制 Linux 版本下载链接
ubuntu终端输入 wget <下载链接> 例如

wget https://repo.anaconda.com/archive/Anaconda3-2023.03-Linux-x86_64.sh

执行

sh Anaconda3-2023.03-Linux-x86_64.sh

(输入 sh Atab 自动补全)

2. mmdetection 配置

参考链接
配置mmdetection视频
mmdetection的github仓库
mmdetection官方安装教程
使用mmdetection训练自己的数据集(VOC格式)

2.1 安装 mmdetection

step1
配置 pytorch

conda create --name mmdet python=3.8
conda activate mmdet

pytorch官网
选择对应 pytorch 版本下载

step2
进入 conda 的 mmdet 环境
使用 mim 安装 mmengine 和 mmcv

pip install -U openmim
mim install mmengine
mim install "mmcv>=2.0.0"

step3
克隆 mmdetection 仓库 (也可以下载到本地解压)

git clone https://github.com/open-mmlab/mmdetection.git

将mmdetection库的解析位置设为本地的克隆项目文件

cd mmdetection
pip install -v -e .

step4
验证安装
下载配置文件和模型权重文件 运行demo程序

mim download mmdet --config rtmdet_tiny_8xb32-300e_coco --dest .
python demo/image_demo.py demo/demo.jpg rtmdet_tiny_8xb32-300e_coco.py --weights rtmdet_tiny_8xb32-300e_coco_20220902_112414-78e30dcc.pth --device gpu

成功后 outputs/vis 文件夹中会有新的图像 demo.jpg

step5
使用vscode打开
mmdet 路径下

code mmdetection

或者在 vscode 中打开
点击左下角打开远程窗口 连接到wsl

2.2 训练VOC数据集

使用mmdetection训练自己的数据集(VOC格式)

step1
在克隆的 mmdetection 文件夹下新建 data 文件夹
将VOC数据集放入 data 文件夹

step2
修改类别名称列表(2处)
mmdetection/mmdet/datasets/voc.py 中的 VOCDataset(XMLDataset)
mmdetection/mmdet/evaluation/functional/class_names.py 中的 voc_classes()

step3
修改类别数(2处)
mmdetection/configs/pascal_voc/faster-rcnn_r50_fpn_1x_voc0712.py
mmdetection/configs/base/models/faster_rcnn_r50_fpn.py
两个文件中的 num_classes

step4
改数据集加载
mmdetection/configs/base/datasets/voc0712.py
中修改
data_root = 'data/SAR-AIRcraft-1.0/'
ann_file='ImageSets/Main/train.txt'
data_prefix=dict(sub_data_root='')

step5 (optional)
修改epoch数以及优化器
mmdetection/configs/pascal_voc/faster-rcnn_r50_fpn_1x_voc0712.py

step6 (optional)
修改模型 (nms, anchor)
mmdetection/configs/_base_/models/faster-rcnn_r50_fpn.py

step7
开始训练
先进入克隆的 mmdetection 文件夹
重新初始化

python setup.py install

训练

python tools/train.py configs/pascal_voc/faster-rcnn_r50_fpn_1x_voc0712.py

2.3 可视化

绘制曲线 loss_rpn_cls

python tools/analysis_tools/analyze_logs.py plot_curve work_dirs/faster-rcnn_r50_fpn_1x_voc0712/20231222_133834/vis_data/20231222_133834.json --key loss_rpn_cls

显示测试集上的标注图片

python tools/test.py work_dirs/faster-rcnn_r50_fpn_1x_voc0712/20231222_133834/vis_data/config.py work_dirs/faster-rcnn_r50_fpn_1x_voc0712/epoch_6.pth --show

仅显示测试集上的mAP

python tools/test.py work_dirs/faster-rcnn_r50_fpn_1x_voc0712/config.py work_dirs/faster-rcnn_r50_fpn_1x_voc0712/epoch_4.pth

3. mmrotate 配置

参考链接
mmrotate的github仓库
mmrotate官方教程
mmrotate dev-1.x官方教程
mmrotate dev-1.x常见问题解答
mmrotate dev-1.x安装教程 博客1
mmrotate dev-1.x安装教程 博客2

3.1 配置 mmrotate

step1
配置 pytorch

conda create --name mmrotate python=3.8
conda activate mmrotate

pytorch官网
选择对应 pytorch 版本下载

step2
进入 conda 的 mmrotate 环境
使用 mim 安装 mmengine 和 mmcv

pip install -U openmim
mim install mmcv-full
mim install mmdet\<3.0.0

克隆mmrotate仓库(也可以下载到本地解压)
默认的main分支mmrotate版本为0.3.4

git clone https://github.com/open-mmlab/mmrotate.git

将mmrotate库的解析位置设为本地的克隆项目文件

cd mmrotate
pip install -v -e .

检查安装的版本 版本兼容表格

mim list

step3
验证安装
下载配置文件和模型权重文件 运行demo程序

mim download mmrotate --config oriented_rcnn_r50_fpn_1x_dota_le90 --dest .
python demo/image_demo.py demo/demo.jpg oriented_rcnn_r50_fpn_1x_dota_le90.py oriented_rcnn_r50_fpn_1x_dota_le90-6d2b2ce0.pth --out-file result.jpg

成功后当前文件夹中会有新的图像 result.jpg

3.2 配置 mmrotate dev-1.x

step1
配置 pytorch

conda create --name mmrotate—dev1.x python=3.8
conda activate mmrotate—dev1.x

pytorch官网
选择对应 pytorch 版本下载
也可以克隆之前配置好的 mmrotate 的环境

conda create --name mmrotate—dev1.x --clone mmrotate
conda activate mmrotate—dev1.x

step2
进入 conda 的 mmrotate—dev1.x 环境
使用 mim 安装 mmengine 和 mmcv

pip install -U openmim
mim install "mmengine==0.10.3"
mim install "mmcv==2.0.0rc4"

安装 mmdet 可以直接用 min 安装

mim install "mmdet==3.0.0rc6"

也可以克隆或下载对应版本的mmdetection到本地后
将mmdet库的解析位置设为本地克隆的项目文件 这样便于修改

git clone https://github.com/open-mmlab/mmdetection.git -b dev-3.x
cd mmdetection
pip install -v -e .

克隆mmrotate dev-1.x仓库(也可以下载到本地解压)

git clone -b dev-1.x https://github.com/open-mmlab/mmrotate.git

将mmrotate库的解析位置设为本地的克隆项目文件

cd mmrotate
pip install -v -e .

配置mmrotate dev-1.x 的时候 一些mmlab的模块可能不兼容
检查安装的版本 mmrotate dev-1.x版本兼容表格

mim list

注:
如果有低版本的 mmcv-full 需要删除

mim uninstall mmcv-full

step3
验证安装
下载配置文件和模型权重文件 运行demo程序

mim download mmrotate --config rotated_rtmdet_s-3x-dota --dest .
python demo/image_demo.py demo/demo.jpg rotated_rtmdet_s-3x-dota.py rotated_rtmdet_s-3x-dota-11f6ccf5.pth --out-file result.jpg

成功后当前文件夹中会有新的图像 result.jpg

3.3 mmrotate dev-1.x 遇到的一些问题

写在最后
我在 mmrotate dev-1.x 版本上遇到了一些问题
问题与 github 上的一篇 issues 描述一致
[Bug] With MMrotate dev1.x branch, train rotated faster RCNN on DOTA loss=nan
这篇 issue 发布于2023年6月 距今已超过半年 问题还没有得到解决
若没遇到类似的问题,可以忽略

mmrotate dev-1.x 版本上,我使用自己标注的DOTA格式数据集在 Rotated Faster R-CNN 模型以及 oriented R-CNN 模型上训练的时候,在训练几百个batch后,出现了 grad_norm:nanloss:nan 的问题。 (我只修改了模型配置文件中加载数据集的部分)

  • 然而
    1. 同样的数据集,在 mmrotate dev-1.x 版本上,使用 Rotated RTMDet 模型可以正常训练。
    2. 同样的数据集,在默认版本 mmrotate 0.3.4 上,使用 Rotated Faster R-CNN 模型以及 oriented R-CNN 模型均能正常训练。
    3. 使用 DOTA-v1 数据集,在 mmrotate dev-1.x 版本上,使用 Rotated Faster R-CNN 模型进行训练的时候,也没有问题。

该 issues 的提问者在 issue 的最后也写到

Additional information
I tried mmrotate0.3.4 on the same dataset and it worked well. Then I tried rotated retinanet on mmrotatedev1.x, it still works well.
I also tried to decrease LR, but the same problem happened.
I suspect there may be some problem with my environment but cannot figure it out, which is CUDA 11.6 Pytorch1.12.1 MMEngine0.10.3 mmcv2.0.1 mmdet3.0.0rc6 mmrotate1.0.0rc1

关于这个问题我的一些排查与尝试
(1) 官方方法
首先我尝试了官方的方法
mmrotate dev-1.x 的官方的 doc 中有写到 loss 为 nan 的一些解决办法
mmrotate dev-1.x 常见问题解答

“Loss goes Nan”

  1. 检查数据的标注是否正常,长或宽为 0 的框可能会导致回归 loss 变为 nan,一些小尺寸(宽度或高度小于 1)的框在数据增强(例如,instaboost)后也会导致此问题。因此,可以检查标注并过滤掉那些特别小甚至面积为 0 的框,并关闭一些可能会导致 0 面积框出现数据增强。
  2. 降低学习率:由于某些原因,例如 batch size 大小的变化,导致当前学习率可能太大。您可以降低为可以稳定训练模型的值。
  3. 延长 warm up 的时间:一些模型在训练初始时对学习率很敏感,您可以把 warmup_iters 从 500 更改为 1000 或 2000。
  4. 添加 gradient clipping: 一些模型需要梯度裁剪来稳定训练过程。默认的 grad_clipNone,你可以在 config 设置 optimizer_config=dict(_delete_=True, grad_clip=dict(max_norm=35, norm_type=2))。 如果你的 config 没有继承任何包含 optimizer_config=dict(grad_clip=None),你可以直接设置 optimizer_config=dict(grad_clip=dict(max_norm=35, norm_type=2))

在各个 mmrotate 版本中,该段文档基本一致。

  • 我的改变
    1. 我尝试过降低学习率,没有效果。
    2. 也尝试过把 warmup_iters 改大,都无法解决。
    3. 模型配置文件中 grad_clip 默认就是 optimizer_config=dict(grad_clip=dict(max_norm=35, norm_type=2)) 我尝试过把 max_norm 改小,但都无济于事。

(2) mmengine
在排查官方的解决办法无果后,我怀疑是计算loss的时候出了问题
我对比 mmrotate dev-1.xmmrotate 0.3.4 能运行的环境中的各种 mmlab 模块的版本,发现 mmengine 的版本均为 0.10.3
版本不一样的模块是 mmcvmmdet

(3) mmdet
mmrotate dev-1.x 用的是 mmdet 3.0.0rc6
mmrotate 0.3.4 用的是 mmdet 2.28.2

我发现 Rotated Faster R-CNN 模型的配置文件中,计算损失函数用到了 mmdet 模块中的 mmdet.CrossEntropyLossmmdet.SmoothL1Loss 来计算损失,而 Rotated RTMDet 模型的配置文件中没有用到这两个损失。
我怀疑是这两个损失函数的计算有问题,我找到了 mmdet 2.28.2 中对应的损失函数代码,做了迁移替换,但似乎没有什么效果。
我也查看了 max_iou_assigners.py 代码,但似乎没发现问题。

(4) mmrotate
我对比了 mmrotate dev-1.xmmrotate 0.3.4 两个版本的 rotated_iou_loss.py 代码,也没发现问题。

(5) mmcv
mmrotate dev-1.x 用的是 mmcv 2.0.0rc4
mmrotate 0.3.4 用的是 mmcv-full 1.7.2

我尝试过更换 mmcv 版本为 2.0.1 仍然没有解决

寻找这个问题的原因耗费了我大量的时间和经历,我太累了而放弃了比较 mmcv 两个版本的差异,以及其余的排查问题工作,也许是 mmrotate 最新开发版的不稳定导致的,我希望 mmlab 官方能尽快更新。

  • 19
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 在 Windows Subsystem for Linux (WSL) 中配置 C 开发环境需要以下步骤: 1. 在 Windows 中安装 WSL。 2. 在 Microsoft Store 中安装一个 Linux 发行版。 3. 在 WSL 终端中使用 apt-get 或 yum 等工具安装 GCC。 4. 安装一个文本编辑器或 IDE 来编写代码,比如 gedit、nano 或 VSCode。 5. 使用 gcc 命令编译代码,使用 ./a.out 运行程序。 注意,在第三步,也可以使用apt-get install build-essential 或者 yum install gcc-c++ 安装其他编译器(include C++,Fortran..) 例如: $sudo apt-get install build-essential 如果你想在Windows 上运行 WSL 编译的二进制文件,请参考关于使用 ELF 的文章,同时需要在 windows 安装 Linux 子系统适配器。 ### 回答2: WSL (Windows Subsystem for Linux) 是一种在Windows操作系统上运行Linux子系统的工具,因此我们可以使用WSL配置C开发环境。 在开始之前,您需要确保已经安装了WSL并设置了一个Linux发行版,如Ubuntu。 1. 打开WSL终端或通过开始菜单中的WSL发行版进入Linux子系统。 2. 安装C开发所需的基本工具,包括gcc编译器和GNU工具集。使用以下命令进行安装: ``` sudo apt-get update sudo apt-get install build-essential ``` 3. 接下来,您可以选择安装一个集成开发环境(IDE)或者使用命令行进行开发。以下是两个常用的IDE: - Visual Studio Code:您可以在Windows中安装Visual Studio Code,并使用Remote - WSL扩展与WSL集成。通过安装C/C++扩展,您可以在VS Code中编写、调试和构建C代码。 - Eclipse CDT:Eclipse CDT是一个专门为C和C++开发而设计的集成开发环境。您可以通过在WSL中安装Eclipse和相应的插件来进行C开发。 4. 如果您选择在命令行中进行开发,您可以使用nano、vi或emacs等文本编辑器来编写C代码。使用以下命令安装您喜欢的编辑器: ``` sudo apt-get install nano ``` 5. 编写您的C代码,并将其保存为以`.c`为扩展名的文件。 6. 使用gcc编译器来编译您的C代码。在终端中运行以下命令: ``` gcc your_code.c -o output ``` 这将生成一个可执行文件`output`。 7. 最后,您可以在WSL中运行生成的可执行文件来测试您的C程序: ``` ./output ``` 您应该能够在终端中看到您的程序的输出。 通过按照以上步骤,您就可以在WSL中成功配置C开发环境并开始开发C程序了。无论是使用IDE还是命令行工具,WSL为C开发提供了一个方便、强大且易于使用的平台。 ### 回答3: 要配置WSL的C开发环境,需要进行以下步骤: 1. 安装WSL:在Windows 10中打开PowerShell或命令提示符,运行以下命令来安装WSLwsl --install 2. 下载WSL发行版:在Microsoft Store中搜索并安装一个WSL发行版,例如Ubuntu或Debian。 3. WSL:打开已安装的WSL发行版。 4. 更新软件源:运行以下命令更新软件源和软件包列表: sudo apt update 5. 安装C编译器:运行以下命令来安装C编译器(例如gcc): sudo apt install build-essential 6. 编写C代码:使用一个文本编辑器(例如nano或vim)创建一个新的C源文件,并编写你的C代码。 7. 编译C代码:运行以下命令来编译你的C代码: gcc -o output_file input_file.c 这将会生成一个可执行文件(output_file)。 8. 运行C程序:运行以下命令来执行你的C程序: ./output_file 这将会运行你的C程序并显示输出结果。 通过以上步骤,你就可以在WSL配置使用C开发环境进行C代码的编写和执行了。记得及时更新软件源和安装所需的C编译器,以保持开发环境的最新和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值