SCTNet 项目排坑

news2024/10/7 18:28:24

SCTNet 项目排坑

  • 任务
  • 过程记录
    • 在旧环境下运行
    • 重配环境
    • 训练
    • 测试
    • 速度测试

任务

想跑一下最新的实时分割代码。由于这个项目也是基于mmsegmentation的,所以我想先看看之前那个环境是否能直接适配。不行,我再新建环境。

过程记录

在旧环境下运行

必要工作:

git clone https://github.com/xzz777/SCTNet.git
cd SCTNet/
conda activate OPENMMLAB
pip3 install timm
pip3 install einops

项目根目录下新建data和pretrained文件夹
创建数据库软链接:

ln -s /media/lcy-magic/Dataset/Segment_Dataset/ade/ ./data/

下载预训练权重(我只下了这几个):

pretrained/
├── SCT-B_Pretrain.pth
├── SCT-S_Pretrain.pth
├── Teacher_SegFormer_B2_ADE.pth
└── Teacher_SegFormer_B3_ADE.pth

测试:

python tools/test.py configs\sctnet\ADE20K\sctnet-b_8x4_160k_ade.py pretrained/SCTNet-B-ADE20K.pth  --eval mIoU

报错:

Traceback (most recent call last):
  File "tools/test.py", line 14, in <module>
    from mmcv.cnn.utils import revert_sync_batchnorm
ImportError: cannot import name 'revert_sync_batchnorm' from 'mmcv.cnn.utils' (/home/lcy-magic/anaconda3/envs/OPENMMLAB/lib/python3.8/site-packages/mmcv/cnn/utils/__init__.py)

寄。感觉是版本问题。我还是按照项目要求来吧。

重配环境

conda create -n SCTNET python=3.8 -y
conda activate SCTNET
conda install pytorch==1.11.0 torchvision==0.12.0 torchaudio==0.11.0 cudatoolkit=11.3 -c pytorch
pip install mmcv-full==1.6.0 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.11.0/index.html
pip3 install platformdirs==3.9.0
pip install timm matplotlib prettytable einops
pip install pykitti

运行:

python tools/test.py configs\sctnet\ADE20K\sctnet-b_8x4_160k_ade.py pretrained/SCTNet-B-ADE20K.pth  --eval mIoU

报错:

Traceback (most recent call last):
  File "tools/test.py", line 323, in <module>
    main()
  File "tools/test.py", line 135, in main
    cfg = mmcv.Config.fromfile(args.config)
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/utils/config.py", line 340, in fromfile
    cfg_dict, cfg_text = Config._file2dict(filename,
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/utils/config.py", line 183, in _file2dict
    check_file_exist(filename)
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/utils/path.py", line 23, in check_file_exist
    raise FileNotFoundError(msg_tmpl.format(filename))
FileNotFoundError: file "/home/lcy-magic/Segment_TEST/SCTNet/configssctnetADE20Ksctnet-b_8x4_160k_ade.py" does not exist

其中,/SCTNet/configssctnetADE20Ksctnet-b_8x4_160k_ade.py这一段明显离谱,这里改正应该就好了。发现是指令里/写反了,这是因为作者应该是在win上运行,win和ubuntu在这个正好是反向的。改称后运行:

python tools/test.py configs/sctnet/ADE20K/sctnet-b_8x4_160k_ade.py pretrained/SCTNet-B-ADE20K.pth  --eval mIoU

报错:

Traceback (most recent call last):
  File "tools/test.py", line 323, in <module>
    main()
  File "tools/test.py", line 221, in main
    model = build_segmentor(cfg.model, test_cfg=cfg.get('test_cfg'))
  File "/home/lcy-magic/Segment_TEST/SCTNet/mmseg/models/builder.py", line 48, in build_segmentor
    return SEGMENTORS.build(
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/utils/registry.py", line 237, in build
    return self.build_func(*args, **kwargs, registry=self)
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/cnn/builder.py", line 27, in build_model_from_cfg
    return build_from_cfg(cfg, registry, default_args)
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/utils/registry.py", line 72, in build_from_cfg
    raise type(e)(f'{obj_cls.__name__}: {e}')
FileNotFoundError: EncoderDecoder_Distill: SCTNet: pretrain/SCT-B_Pretrain.pth can not be found.

说一个预训练权重文件找不到。看来作者的预训练权重放在pretrain文件夹内,我的在pretrained文件夹内。我直接在vscode里全部替换掉:
在这里插入图片描述
运行后又报错:

Traceback (most recent call last):
  File "tools/test.py", line 323, in <module>
    main()
  File "tools/test.py", line 225, in main
    checkpoint = load_checkpoint(model, args.checkpoint, map_location='cpu')
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/runner/checkpoint.py", line 627, in load_checkpoint
    checkpoint = _load_checkpoint(filename, map_location, logger)
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/runner/checkpoint.py", line 561, in _load_checkpoint
    return CheckpointLoader.load_checkpoint(filename, map_location, logger)
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/runner/checkpoint.py", line 303, in load_checkpoint
    return checkpoint_loader(filename, map_location)  # type: ignore
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/runner/checkpoint.py", line 322, in load_from_local
    raise FileNotFoundError(f'{filename} can not be found.')
FileNotFoundError: pretrained/SCTNet-B-ADE20K.pth can not be found.

确认了下,谷歌网盘上确实没有提供这个:
在这里插入图片描述
那我就换成SCT-B_Pretrained试试:

python tools/test.py configs/sctnet/ADE20K/sctnet-b_8x4_160k_ade.py pretrained/SCT-B_Pretrain.pth --eval mIoU

似乎不太对:
在这里插入图片描述
得到结果:
在这里插入图片描述
换成:

python tools/test.py configs/sctnet/ADE20K/sctnet-b_8x4_160k_ade.py pretrained/Teacher_SegFormer_B2_ADE.pth --eval mIoU

就更扯了:
在这里插入图片描述
看来这个参数确实没有提供,得自己训练。那我就现开始训练吧:

训练

因为他给的脚本是分布式训练的。而我笔记本只有一个GPU,所以打算直接用train.py:

python tools/train.py configs/sctnet/ADE20K/sctnet-b_8x4_160k_ade.py

报错:

Traceback (most recent call last):
  File "tools/train.py", line 16, in <module>
    from mmseg import __version__
ModuleNotFoundError: No module named 'mmseg'

本想直接安装:

pip install -v -e .

结果他竟然没有setup.py。看readme上说:
在这里插入图片描述
那我就clone一下这个codebase,在这里面安装:

git clone -b v0.26.0 https://github.com/open-mmlab/mmsegmentation.git
cd mmsegmentation/
pip install -v -e .

再运行:

python tools/train.py configs/sctnet/ADE20K/sctnet-b_8x4_160k_ade.py

报错:

Traceback (most recent call last):
  File "tools/train.py", line 245, in <module>
    main()
  File "tools/train.py", line 163, in main
    cfg.dump(osp.join(cfg.work_dir, osp.basename(args.config)))
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/utils/config.py", line 596, in dump
    f.write(self.pretty_text)
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/utils/config.py", line 508, in pretty_text
    text, _ = FormatCode(text, style_config=yapf_style, verify=True)
TypeError: FormatCode() got an unexpected keyword argument 'verify'

网上查了下,这个博客参考博客说,是yapf版本不对。我一检查果然:
在这里插入图片描述
降低版本:

pip install yapf==0.40.1

再运行训练脚本,还是有问题:

raceback (most recent call last):
  File "tools/train.py", line 245, in <module>
    main()
  File "tools/train.py", line 201, in main
    model = build_segmentor(
  File "/home/lcy-magic/Segment_TEST/SCTNet/mmsegmentation/mmseg/models/builder.py", line 48, in build_segmentor
    return SEGMENTORS.build(
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/utils/registry.py", line 237, in build
    return self.build_func(*args, **kwargs, registry=self)
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/cnn/builder.py", line 27, in build_model_from_cfg
    return build_from_cfg(cfg, registry, default_args)
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/utils/registry.py", line 61, in build_from_cfg
    raise KeyError(
KeyError: 'EncoderDecoder_Distill is not in the models registry'

看来作者的bash脚本还是有些特殊设置的。于是我让GPT帮我修改了下那个bash脚本如下:

CONFIG=$1
GPUS=1
PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \
python -m torch.distributed.launch \
    --nproc_per_node=$GPUS \
    $(dirname "$0")/train.py \
    $CONFIG \
    --launcher pytorch ${@:2}

执行:

bash tools/dist_train.sh configs/sctnet/ADE20K/sctnet-b_8x4_160k_ade.py

报错:

RuntimeError: CUDA out of memory. Tried to allocate 512.00 MiB (GPU 0; 7.79 GiB total capacity; 5.37 GiB already allocated; 270.38 MiB free; 5.75 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF
ERROR:torch.distributed.elastic.multiprocessing.api:failed (exitcode: 1) local_rank: 0 (pid: 28348) of binary: /home/lcy-magic/anaconda3/envs/SCTNET/bin/python

告诉我cuda不够用了。查看实时占用:

watch -n 1 nvidia-smi

空载情况下还是可以的,没占用太多:
在这里插入图片描述
再运行训练脚本,果然报错的时候已经要满了:
在这里插入图片描述
我想,用他的s版本,会不会可以,试了试,并不行:

bash tools/dist_train.sh configs/sctnet/ADE20K/sctnet-s_8x4_160k_ade.py

只能改batch size了。发现官方说在config里改:
在这里插入图片描述
于是,我把s那个版本的配置文件做了修改:

data = dict(
    # samples_per_gpu=8,
    samples_per_gpu=4,
    workers_per_gpu=4,

果然能跑了:
在这里插入图片描述
查看实时显存也基本吃完了,说明基本没法再大了:
在这里插入图片描述
先回宿舍了,明天回来看结果。
训练到下午13:18,终于训练完了:
在这里插入图片描述
效果还行,其实感觉有点差哈哈。之前训练的SegFormerB1:mIoU35.25,mACC49.83。
训练过程的checkpoint在work_dir目录下了。可以用他跑下测试。

测试

用最后一个checkpoint测试:

python tools/test.py configs/sctnet/ADE20K/sctnet-s_8x4_160k_ade.py work_dirs/sctnet-s_8x4_160k_ade/latest.pth --eval mIoU

报错:

Traceback (most recent call last):
  File "tools/test.py", line 323, in <module>
    main()
  File "tools/test.py", line 221, in main
    model = build_segmentor(cfg.model, test_cfg=cfg.get('test_cfg'))
  File "/home/lcy-magic/Segment_TEST/SCTNet/mmsegmentation/mmseg/models/builder.py", line 48, in build_segmentor
    return SEGMENTORS.build(
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/utils/registry.py", line 237, in build
    return self.build_func(*args, **kwargs, registry=self)
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/cnn/builder.py", line 27, in build_model_from_cfg
    return build_from_cfg(cfg, registry, default_args)
  File "/home/lcy-magic/anaconda3/envs/SCTNET/lib/python3.8/site-packages/mmcv/utils/registry.py", line 61, in build_from_cfg
    raise KeyError(
KeyError: 'EncoderDecoder_Distill is not in the models registry'

奇怪了,之前还没问题的。查看了下github上的issue和官方文档,检查了好久,我的__init.py__没有问题。最后我想,是不是我把环境变量设成项目根目录就能找到这个模块了。于是:

export PYTHONPATH=$PYTHONPATH:~/Segment_TEST/SCTNet

果然!再运行测试脚本,成果了:
在这里插入图片描述

速度测试

按照readme指示:

cd speed/
python torch_speed.py --type sctnet-b-seg100
python torch_speed.py --type sctnet-s-ade

有结果了:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1560784.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

16-代码检查:如何进行静态代码检查?

在做Go项目开发的过程中&#xff0c;我们肯定需要对Go代码做静态代码检查。虽然Go命令提供了go vet和go tool vet&#xff0c; 今天我想给你介绍的golangci-lint&#xff0c;是目前使用最多&#xff0c;也最受欢迎的静态代码检查工具 接下来&#xff0c;我就从golangci-lint…

【数据结构】——树和二叉树相关概念(全网超级详解)

创作不易&#xff0c;家人们来一波三连吧&#xff1f;&#xff01; 前言 世界上最大的树--雪曼将军树&#xff0c;这棵参天大树不是最长也不是最宽&#xff0c;是不是很奇怪&#xff0c;大只是他的体积是最大的&#xff0c;看图片肯定是感触不深&#xff0c;大家可以自己去看…

go入门到精通

初识Go语言 Go语言介绍 Go语言是什么 2009年11月10日&#xff0c;Go语言正式成为开源编程语言家庭的一员。 Go语言&#xff08;或称Golang&#xff09;是云计算时代的C语言。Go语言的诞生是为了让程序员有更高的生产效率&#xff0c;Go语言专门针对多处理器系统应用程序的编…

vue2项目安装(使用vue-cli脚手架)

使用npm安装 安装镜像&#xff08;使npm创建项目更快&#xff09;&#xff1a;镜像可更换 npm config set registry https://registry.npmmirror.com1.全局安装vue-cli&#xff08;一次&#xff09; npm install -g vue/cli 2. 查看vue-cli 版本 vue --version 3. 创建项目…

【Pytorch学习笔记(二)】张量的创建(补充)

一、知识回顾 我们在博客《张量的创建与访问》中已经讨论了一些张量的创建方法如torch.CharTensor()、torch.FloatTensor()以及torch.zeros()等张量创建方法&#xff0c;但由于其仅仅介绍了cpu版本torch下张量的创建方法和只有具体数据类型张量&#xff0c;本节内容旨在补充gp…

数字示波器

数字示波器 综述&#xff1a;本文讲述了数字示波器的电路组成。 一&#xff0e;定义 显示电信号波形的仪器 二&#xff0e;组成 由模拟前端处理电路、电源电路、单片机电路、控制电路、触发电路、校准电路组成。 1&#xff09;模拟前端处理电路 将输入的模拟信号处理后传…

2024中国医药企业项目管理大会将于7月在京召开

“创新是企业之魂”&#xff0c;对于医药企业来说药品创新研发能力很大程度上决定了公司核心竞争力和可持续发展能力。新药研发具有高投入、高成本、高风险、高收益、长周期等特点&#xff0c;从药物的发现研发到临床试验到获批生产上市销售是一个充满风险挑战的较为漫长历程&a…

判断点在多边形内的算法

在计算几何中&#xff0c;判定点是否在多边形内&#xff0c;是个非常有趣的问题。通常有两种方法&#xff1a; 一、Crossing Number&#xff08;交叉数&#xff09; 它计算从点P开始的射线穿过多边形边界的次数。当“交叉数”是偶数时&#xff0c;点在外面;当它是奇数时&…

基于8086毫秒数码管计时器仿真设计

**单片机设计介绍&#xff0c;基于8086毫秒数码管计时器仿真设计 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于8086毫秒数码管计时器仿真设计概要主要关注于利用8086微处理器实现毫秒级别的计时功能&#xff0c;并通过数码管显示时间…

action method

package cn.hello01;import com.opensymphony.xwork2.Action; import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport{//增加public String save(){System.out.println("保存");return Action.SUCCESS;}//删除public String …

RESTful的优点

优点 1.通过url对资源定位&#xff0c;语义清晰&#xff1b; 2.通过HTTP谓词表示不同的操作&#xff0c;接口自描述&#xff1b; 3.可以对GET、PUT、DELETE请求重试&#xff08;幂等的&#xff09;&#xff1b; 4.可以对GET请求做缓存&#xff1b; 5.通过HTTP状态码反映服务器端…

SQLite3进行数据库各项常用操作

目录 前言1、SQLite介绍2、通过SQLite创建一个数据库文件3、往数据库文件中插入数据4、数据库文件信息查询5、修改数据库中的内容6、删除数据库中的内容 前言 本文是通过轻量化数据库管理工具SQLite进行的基础操作和一些功能实现。 1、SQLite介绍 SQLite是一个广泛使用的嵌入…

Docker镜像构建

Docker镜像构建 1. docker commit 平常我们都是从公共仓库拉取镜像&#xff0c;我们也可以从容器中构建我们自己的镜像。 需求&#xff1a; 1. 基础镜像centos 2. 安装jdk 3. 安装nginx1.1 创建容器 # 拉取镜像 docker pull centos:7 # 创建容器 docker run -di --name ce…

鸿蒙实战开发-如何使用三方库

使用三方库 在使用三方库之前&#xff0c;需要安装 ohpm&#xff0c;并在环境变量中配置。 在项目目录的Terminal窗口执行ohpm命令下载依赖 ohpm install yunkss/eftool 命令运行成功后&#xff0c;在项目的oh-package.json5文件中会自动添加上依赖&#xff0c;如下所示&am…

Python读取PDF文字转txt,解决分栏识别问题,能读两栏

搜索了一下&#xff0c;大致有这些库能将PDF转txt 1. PyPDF/PyPDF2&#xff08;截止2024.03.28这两个已经合并成了一个&#xff09;pypdf PyPI 2. pdfplumber GitHub - jsvine/pdfplumber: Plumb a PDF for detailed information about each char, rectangle, line, et cete…

react 面试题(2024 最新版)

1. 对 React 的理解、特性 React 是靠数据驱动视图改变的一种框架&#xff0c;它的核心驱动方法就是用其提供的 setState 方法设置 state 中的数据从而驱动存放在内存中的虚拟 DOM 树的更新 更新方法就是通过 React 的 Diff 算法比较旧虚拟 DOM 树和新虚拟 DOM 树之间的 Chan…

Docker搭建LNMP环境实战(07):安装nginx

1、模拟应用场景描述 假设我要搭建一个站点&#xff0c;假设虚拟的域名为&#xff1a;api.test.site&#xff0c;利用docker实现nginxphp-fpmmariadb部署。 2、目录结构 2.1、dockers根目录 由于目前的安装是基于Win10VMWareCentOS虚拟机&#xff0c;同时已经安装了VMWareT…

【React】vite + react 项目,配置项目路径别名 @

vite react 项目&#xff0c;配置项目路径别名 1 安装 types/node2 在 vite.config.ts 中添加配置&#xff1a;3 配置路径别名的提示 使用 vite 开发 react 项目时&#xff0c;可以通过一下步骤配置路径别名&#xff1a; 1 安装 types/node npm i -D types/node2 在 vite.con…

vue3组合式函数

vue3的组合式函数的作用是封装和复用响应式状态的函数。只能在setup 标签的script标签汇总或者setup函数中使用。 普通的函数只能调用一次&#xff0c;但是组合式函数接受到响应式参数&#xff0c;当该值发生变化时&#xff0c;也会触发相关函数的重新加载。 如下 定义了一个…