SegFormer 项目排坑记录

2024-03-18 23:20
文章标签 项目 记录 排坑 segformer

本文主要是介绍SegFormer 项目排坑记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SegFormer 项目排坑记录

  • 任务
  • 记录
    • 创建conda环境
  • 准备数据库和预训练参数
  • 程序配置修改
  • 测试
  • 可视化
  • 训练

任务

需要复现SegFormer分割项目,似乎还有点麻烦,参考这几个进行复现,记录下过程:
SegFormer
mmsegmentation
CSDN博客
知乎博客

记录

创建conda环境

SegFormer的readme说:

For install and data preparation, please refer to the guidelines in MMSegmentation v0.13.0.

看来要先按照mmsegmentation创建环境。
按照mmsegmentation的readme执行:

conda create -n SEGFORMER python=3.7 -y
conda activate SEGFORMER
pip3 install empy==3.3.4 rospkg pyyaml catkin_pkg

mmsegmentation要求装torch1.6.0,配套cuda10.1.这可不行,我3070显卡只能用11.0以上的cuda。查看pytorch官网,没有torch1.6.0配套11cuda的。但我发现知乎那个博客他用的是Pytorch 1.10.0,这个查一下就有cuda11了。CSDN那个用的torch1.7.0,配合cuda11。我决定用1.7.0的:

conda install pytorch==1.7.0 torchvision==0.8.0 torchaudio==0.7.0 cudatoolkit=11.0 -c pytorch -y
pip3 install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu110/torch1.7.0/index.html

你要问我为啥选这个版本?因为官网的建议是这样的:mmcv。当并不是full版本,我觉得还是用full版本保险。CSDN上那个是full版本,但不是2.0的,而且那个命令我跑不通。然后我发现官网的whl可以找到:whl,于是我就修改了官网的指令。

有个报错,但小问题:

ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
torch 1.7.0 requires dataclasses, which is not installed.
torch 1.7.0 requires future, which is not installed.

执行:

pip3 install dataclasses future

最后我装上的是1.7.2的:

Successfully installed addict-2.4.0 importlib-metadata-6.7.0 mmcv-full-1.7.2 opencv-python-4.9.0.80 packaging-24.0 platformdirs-4.0.0 tomli-2.0.1 typing-extensions-4.7.1 yapf-0.40.2 zipp-3.15.0

然后MMSegmentation这边好像没有要安装的了。除了git之后进行

pip install -e .

我觉得SegFormer的仓库应该包含了MMSegmentation,所以我打算开始git:

git clone https://github.com/NVlabs/SegFormer.git
cd SegFormer/
pip3 install -e .

然后看SegFormer的readme要安装:

pip install torchvision==0.8.2
pip install timm==0.3.2
pip install mmcv-full==1.2.7
pip install opencv-python==4.5.1.48
cd SegFormer && pip install -e . --user

但好多我已经有了,检查下:

pip3 show torchvision timm mmcv-full opencv-python

结果:

WARNING: Package(s) not found: timm
Name: torchvision
Version: 0.8.0
Summary: image and video datasets and models for torch deep learning
Home-page: https://github.com/pytorch/vision
Author: PyTorch Core Team
Author-email: soumith@pytorch.org
License: BSD
Location: /home/lcy-magic/anaconda3/envs/SEGFORMER/lib/python3.7/site-packages
Requires: numpy, pillow, torch
Required-by: 
---
Name: mmcv-full
Version: 1.7.2
Summary: OpenMMLab Computer Vision Foundation
Home-page: https://github.com/open-mmlab/mmcv
Author: MMCV Contributors
Author-email: openmmlab@gmail.com
License: 
Location: /home/lcy-magic/anaconda3/envs/SEGFORMER/lib/python3.7/site-packages
Requires: addict, numpy, opencv-python, packaging, Pillow, pyyaml, yapf
Required-by: 
---
Name: opencv-python
Version: 4.9.0.80
Summary: Wrapper package for OpenCV python bindings.
Home-page: https://github.com/opencv/opencv-python
Author: 
Author-email: 
License: Apache 2.0
Location: /home/lcy-magic/anaconda3/envs/SEGFORMER/lib/python3.7/site-packages
Requires: numpy
Required-by: mmcv-full

也就是我只用安装timm就行了,其他版本不对先不管了:

pip3 install timm==0.3.2

好像项目里还有个requirements,也装了吧:

pip3 install -r requirements.txt

conda环境至此应该搞好了,要准备数据库了。

准备数据库和预训练参数

因为ADE20K的官网一直没给我发账号验证邮件,我就从这里下数据集了数据集
然后我在SegFormer根目录新建了data文件夹,把东西解压在那里了,结构为:
在这里插入图片描述
从readme给的ondrive上下载segformer.b5.640x640.ade.160k.pth预训练参数文件(本来都想下载的,但校园网这个速度太慢了,先只下一个吧),然后放到根目录下创建pretrained文件夹,放到这里。

最后在根目录下新建一个Checkpoints文件夹用来存放训练过程中的文件。

数据集和预训练参数的准备就到这里。

程序配置修改

  1. 我感觉我不用改ade.py,因为我就用的这个数据集。
  2. 修改mmseg/models/decode_heads/segformer_head.py;因为我单卡训练,所以把59行SyncBN 修改为 BN:
# norm_cfg=dict(type='SyncBN', requires_grad=True)
norm_cfg=dict(type='BN', requires_grad=True)
  1. 关于数据集的位置:configs/base/datasets/ade20k.py和local_configs/segformer/B5/segformer.b5.640x640.ade.160k.py中的data_root和data中的路径都和我的一致,我也不改了(B5应该是效果最好的,640还是1024我也不知道,先选个640吧),其他还有好几个要根据数据集修改的地方,因为我用的就是ADE20数据集,所以也都不修改,不赘述了。

测试

根目录下运行:

python tools/test.py local_configs/segformer/B5/segformer.b5.640x640.ade.160k.py pretrained/segformer.b5.640x640.ade.160k.pth

报错:

home/lcy-magic/anaconda3/envs/SEGFORMER/lib/python3.7/site-packages/mmcv/__init__.py:21: UserWarning: On January 1, 2023, MMCV will release v2.0.0, in which it will remove components related to the training process and add a data transformation module. In addition, it will rename the package names mmcv to mmcv-lite and mmcv-full to mmcv. See https://github.com/open-mmlab/mmcv/blob/master/docs/en/compatibility.md for more details.'On January 1, 2023, MMCV will release v2.0.0, in which it will remove '
Traceback (most recent call last):File "tools/test.py", line 10, in <module>from mmseg.apis import multi_gpu_test, single_gpu_testFile "/home/lcy-magic/Segment_TEST/SegFormer/mmseg/__init__.py", line 27, in <module>f'MMCV=={mmcv.__version__} is used but incompatible. ' \
AssertionError: MMCV==1.7.2 is used but incompatible. Please install mmcv>=[1, 1, 4], <=[1, 3, 0].

按照参考博客的说法,我把mmseg/init.py中的最大版本改了:

# MMCV_MAX = '1.3.0'
MMCV_MAX = '1.8.0'

再次运行又报错:

ModuleNotFoundError: No module named 'IPython'

于是安装:

pip3 install ipython

再次运行(太长了,截一部分):
在这里插入图片描述
在这里插入图片描述

可视化

运行:

python demo/image_demo.py demo/demo.png local_configs/segformer/B5/segformer.b5.640x640.ade.160k.py pretrained/segformer.b5.640x640.ade.160k.pth --device cuda:0 --palette ade

效果有点拉胯哈哈:
在这里插入图片描述
可能因为是640的,正好我的b0下载好了,我试试b0:

python demo/image_demo.py demo/demo.png local_configs/segformer/B0/segformer.b0.512x512.ade.160k.py pretrained/segformer.b0.512x512.ade.160k.pth --device cuda:0 --palette ade

稍微好了点:
在这里插入图片描述

训练

把readme中的预训练权重文件下载到pretrained文件夹,我只下载了mit_b1.pth。
主目录下运行:

python tools/train.py local_configs/segformer/B1/segformer.b1.512x512.ade.160k.py 

成功!但没完全成功:
在这里插入图片描述
在这里插入图片描述
按照参考博客的方法。
在我的conda路径下的文件/home/lcy-magic/anaconda3/envs/SEGFORMER/lib/python3.7/site-packages/mmcv/runner/hooks/logger/text.py中添加:

import time

再把整个时间打印部分修改为:

            if 'time' in log_dict.keys():self.time_sec_tot += (log_dict['time'] * self.interval)# time_sec_avg = self.time_sec_tot / (#     runner.iter - self.start_iter + 1)# eta_sec = time_sec_avg * (runner.max_iters - runner.iter - 1)# eta_str = str(datetime.timedelta(seconds=int(eta_sec)))# log_str += f'eta: {eta_str}, '# log_str += f'time: {log_dict["time"]:.3f}, ' \#            f'data_time: {log_dict["data_time"]:.3f}, 'log_dict["data_time"] = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')log_str += f'time: {log_dict["time"]}, 'f'data_time: {log_dict["data_time"]}, '

搞定!

这篇关于SegFormer 项目排坑记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/824004

相关文章

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

Node.js学习记录(二)

目录 一、express 1、初识express 2、安装express 3、创建并启动web服务器 4、监听 GET&POST 请求、响应内容给客户端 5、获取URL中携带的查询参数 6、获取URL中动态参数 7、静态资源托管 二、工具nodemon 三、express路由 1、express中路由 2、路由的匹配 3、路由模块化 4、路由模块添加前缀 四、中间件

SpringBoot项目是如何启动

启动步骤 概念 运行main方法,初始化SpringApplication 从spring.factories读取listener ApplicationContentInitializer运行run方法读取环境变量,配置信息创建SpringApplication上下文预初始化上下文,将启动类作为配置类进行读取调用 refresh 加载 IOC容器,加载所有的自动配置类,创建容器在这个过程

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

2. 下载rknn-toolkit2项目

官网链接: https://github.com/airockchip/rknn-toolkit2 安装好git:[[1. Git的安装]] 下载项目: git clone https://github.com/airockchip/rknn-toolkit2.git 或者直接去github下载压缩文件,解压即可。

记录每次更新到仓库 —— Git 学习笔记 10

记录每次更新到仓库 文章目录 文件的状态三个区域检查当前文件状态跟踪新文件取消跟踪(un-tracking)文件重新跟踪(re-tracking)文件暂存已修改文件忽略某些文件查看已暂存和未暂存的修改提交更新跳过暂存区删除文件移动文件参考资料 咱们接着很多天以前的 取得Git仓库 这篇文章继续说。 文件的状态 不管是通过哪种方法,现在我们已经有了一个仓库,并从这个仓

9.8javaweb项目总结

1.主界面用户信息显示 登录成功后,将用户信息存储在记录在 localStorage中,然后进入界面之前通过js来渲染主界面 存储用户信息 将用户信息渲染在主界面上,并且头像设置跳转,到个人资料界面 这里数据库中还没有设置相关信息 2.模糊查找 检测输入框是否有变更,有的话调用方法,进行查找 发送检测请求,然后接收的时候设置最多显示四个类似的搜索结果