Swin Transformer环境配置的一些问题,主要是ModuleNotFoundError: No module named ‘mmcv._ext’
Swin Transformer环境配置的一些问题
前段时间进行了swin Transformer环境的搭建,我是基于分割的,但是大差不差
Windows10配置流程
参考AI浩博主的文章:
链接: AI浩.
文章基于ADE2016做处理,我只配环境,要实战去看这个博主,
链接: 代码地址.
下载完代码直接在pycharm中打开(最好是管理员模式,这样能避免很多奇奇怪怪的bug)
创建新环境:
这里网上比较多,就不多赘述了,记得装cuda这个环境配置可以参考b站up小土堆,自己搜就可以了
检查cuda版本
python -c 'import torch;print(torch.__version__)'
我的结果如下:
配置编译器(需要vs2019版本,更高版本的不可以)
总结一下,要下vs2019,gcc,git,cmake(我只说第一个vs2019,其他一样的操作,后边三个我不知道是不是刚需,但是很好处理教程很多直接搜就行,环境变量配置完记得重启一下电脑,这玩意不重启不更新)
下载过程参考(建议按默认路径下c盘,因为下d盘我找不到对应路径了):
链接: VS2019下载.
下载完需要配置环境变量:
右键我的电脑,点属性出现这个界面点高级系统设置:
然后环境变量:
在系统变量找到PATH点编辑,新建系统变量就好了,变量地址填下边的:
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64
14.29.30133这个文件夹可能有点不一样,但是都是一串数字,最好自己找,不要复制
这些搞完准备工作基本ok,剩下的在pytorch的cmd中直接跑就行
安装必要的环境(这是我尝试的对我有效的)
pip install cython matplotlib opencv-python
pip install -U openmim
mim install mmcv-full==1.7.2
pip install mmsegmentation
虽然swin Transformer要求上是mmcv<=1.4.0版本,我卡了好几天一直是寄的,下了1.7.2的就好了
缺其他的package直接自己手动 pip 就 ok 了。
我最后的环境(我的torch是2.1.2版本(如果是gpu的记得下对应的cuda版本,我的是cuda118的最好能配置在环境变量,前边提到的up主 pytorch小土堆 里边会讲),torchvision的对应版本是0.16.2):
下载 Swin-T 预训练模型
链接如下:https://github.com/SwinTransformer/storage/releases/download/v1.0.1/upernet_swin_tiny_patch4_window7_512x512.pth
也可以直接到官网去下其他版本的看自己需求,直接搜就完事,下载完后复制到项目的根目录。
修改./demo/image_demo.py
from argparse import ArgumentParser
from mmseg.apis import inference_segmentor, init_segmentor, show_result_pyplot
from mmseg.core.evaluation import get_palette
def main():
parser = ArgumentParser()
parser.add_argument('--img', default='demo.png', help='Image file')
parser.add_argument('--config', default='../configs/swin/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k.py', help='Config file')
parser.add_argument('--checkpoint', default='../upernet_swin_tiny_patch4_window7_512x512.pth', help='Checkpoint file')
parser.add_argument(
'--device', default='cuda:0', help='Device used for inference')
parser.add_argument(
'--palette',
default='ade20k',
help='Color palette used for segmentation map')
args = parser.parse_args()
# build the model from a config file and a checkpoint file
model = init_segmentor(args.config, args.checkpoint, device=args.device)
# test a single image
result = inference_segmentor(model, args.img)
# show the results
show_result_pyplot(model, args.img, result, get_palette(args.palette))
if __name__ == '__main__':
main()
最后结果:
到这里环境基本没问题,我运行有警告:
查了相关资料是因为MMCV v2.0.0 版本的一些变更和即将过时的功能,以及 Torch 的一些内部更改。不过,程序没有报错并且成功加载了本地路径的模型文件,应该问题不大。
ModuleNotFoundError: No module named 'mmcv._ext’问题解决
大家可以先试试,不行去论坛看看有没有:
https://github.com/open-mmlab/mmdetection/issues/3271
网上的处理方法有2种:
1、按照torch和cuda版本选择安装(这个最多,但是我没用)
pip uninstall mmcv
pip install mmcv-full=={mmcv_version} -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.8.0/index.html
{mmcv_version}改成你需要下的版本,cu111/torch1.8.0对应你的cuda和torch版本,pip list自己看一下,也可以去官网看:
链接:https://github.com/open-mmlab/mmcv
2、按照源码编译
详细可以参考 霜frosty的文章Win10环境下(cuda11.2)安装mmcv和mmdetection
不过我的是精简版了
git clone https://github.com/open-mmlab/mmcv.git
cd mmcv
pip install -r requirements/optional.txt
python setup.py build_ext
python setup.py develop
最后两个运行setup.py文件的都运行时间挺长,要构建代码,如果你运行时间太短,多半是寄了,但是这玩意很玄学,运气好一次就好,运气不好跟我一样卡个一两天
可以运行这段代码验证是否成功:
python .dev_scripts/check_installation.py
我成功的办法和上边流程中一样,来找办法的可以直接试试:
pip install -U openmim
mim install mmcv-full==1.7.2
pip install mmsegmentation
大功告成,卡了一两天的问题就这样解决了,源码编译也试了,但是寄了
2024/3/19日晚7点补充
发现忘记写apex的安装流程了,补充一下。
简单介绍一下,Apex模块是一个用于在PyTorch中实现混合精度训练和分布式训练的工具包。它提供了一些优化器和调度器,以及一些用于减少精度损失的函数。Apex模块在使用NVIDIA的混合精度训练技术时非常有用,该技术可以加速训练过程并减少显存消耗。(咱们一般也是单显卡先跑着玩,我只是多下了不过应该不影响)
apex下载其实和那个从源码编译mmcv和mmdet很像,跑下边代码就行(懒得话直接pip install apex
但是经验告诉我用的时候可能会报错):
git clone https://github.com/NVIDIA/apex.git
cd apex
python setup.py install
看了几篇博客总结了一下,要是安不上第三局话可以换成下边的:
1、pip install -v --no-cache-dir ./
2、python setup.py install --cpp_ext --cuda_ext
3、python3 setup.py install
2024/3/20日上午9点补充
昨晚试着跑train函数结果寄了,主要是版本问题,报错问题是:
AttributeError: 'int' object has no attribute 'type'
然后我在github上找到了对应的issue:
AttributeError: ‘int’ object has no attribute ‘type’
对应找到的办法就是:
不过要注意这个版本对应的python版本不能太高,我用的3.8,重新用conda创建的环境,顺便算是学习了一下,要看有没有对于版本你的torch可以去下边链接看torch_stable
最后放上结果(正在跑还没跑完,跑完看看效果):