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

相关文章

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

pycharm跑python项目易出错的问题总结

《pycharm跑python项目易出错的问题总结》:本文主要介绍pycharm跑python项目易出错问题的相关资料,当你在PyCharm中运行Python程序时遇到报错,可以按照以下步骤进行排... 1. 一定不要在pycharm终端里面创建环境安装别人的项目子模块等,有可能出现的问题就是你不报错都安装

uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)

《uni-app小程序项目中实现前端图片压缩实现方式(附详细代码)》在uni-app开发中,文件上传和图片处理是很常见的需求,但也经常会遇到各种问题,下面:本文主要介绍uni-app小程序项目中实... 目录方式一:使用<canvas>实现图片压缩(推荐,兼容性好)示例代码(小程序平台):方式二:使用uni

MyCat分库分表的项目实践

《MyCat分库分表的项目实践》分库分表解决大数据量和高并发性能瓶颈,MyCat作为中间件支持分片、读写分离与事务处理,本文就来介绍一下MyCat分库分表的实践,感兴趣的可以了解一下... 目录一、为什么要分库分表?二、分库分表的常见方案三、MyCat简介四、MyCat分库分表深度解析1. 架构原理2. 分

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

在.NET项目中嵌入Python代码的实践指南

《在.NET项目中嵌入Python代码的实践指南》在现代开发中,.NET与Python的协作需求日益增长,从机器学习模型集成到科学计算,从脚本自动化到数据分析,然而,传统的解决方案(如HTTPAPI或... 目录一、CSnakes vs python.NET:为何选择 CSnakes?二、环境准备:从 Py

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建