windows下跑通transformer 实现图像分割,3060基于cuda11.3+torch1.10+torchvision1.11

首先环境部署cuda11.3 和torch1.10 vs2019(默认安装即可)这些不再赘述。

接下来比较重要的是:一些依赖的环境

本人的依赖环境如下:

很多博客上讲安装mmcv1.3.3 本人亲测 会报错

MMCV==1.3.13 is used but incompatible. Please install mmcv>=[1, 1, 4], <=[1,3, 0】

所以直接pip install mmcv-full==1.3.0即可 前提是安装好vs2019有c++环境 会自己编译好

直接pip mmcv-full==1.3.0 报错的小伙伴 先pip install pytest-runner

不要在意anaconda的环境名字。

安装pycocotools

附上百度,下载好后直接pip install xxxx.tar:

链接:https://pan.baidu.com/s/1H9PJR21y6o-nwMEv-xx5aw 
提取码:coco 
从github下载Swin Transformer的源码(https://github.com/SwinTransformer/Swin-Transformer-Semantic-Segmentation

下载完成后 pip install -r requirements.txt 不管有没有新安装包,每下都去pip 一下以防万一

下载预训练模型 三个模型都在里面

链接:https://pan.baidu.com/s/14NHo8RjPALf7-iHqixIa_A 
提取码:swin 

修改下参数 已经备注好要修改的地方

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()
    #修改1:图像路径
    parser.add_argument('--img', default='demo.png', help='Image file')
    #修改2 初始化模型py文件
    parser.add_argument('--config', default='../configs/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k.py', help='Config file')
    #修改3 模型pth文件
    parser.add_argument('--checkpoint', default='../upernet_swin_base_patch4_window7_512x512.pth', help='Checkpoint file')
    parser.add_argument(
        '--device', default='cuda:0', help='Device used for inference')
    #修改4 default 改为ade20k
    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()

直接run  demo下的image_demo.py

会报错 _specify_ddp_gpu_num

EncoderDecoder: UPerHead: 'super' object has no attribute '_specify_ddp_gpu_num'

是因为1.10版本的torch 没有_specify_ddp_gpu_num方法 被修改了

查阅[Fix] Fix SyncBN build in PyTorch 1.9 by xvjiarui · Pull Request #1138 · open-mmlab/mmcv · GitHub

因此找到parrots_wrapper.py文件:

anaconda3\envs\torch1.8\Lib\site-packages\mmcv\utils\parrots_wrapper.py第85-87行直接注释

anaconda3\envs\torch1.8\Lib\site-packages\mmcv\cnn\bricks\norm.py 第109-110 直接注释

再次运行

Transformer是一种非常强大的神经网络架构,最初是为自然语言处理任务设计的。然而,近年来,人们开始将Transformer应用于计算机视觉任务,比如图像分割。 在传统的图像分割方法中,常用的是基于卷积神经网络(Convolutional Neural Networks, CNNs)的方法,如U-Net、FCN等。而基于Transformer图像分割方法则是过将图像划分为一系列的小块,并使用Transformer进行像素级别的分类和预测。 具体实现图像分割Transformer网络架构有不同的变种,但一般包含以下步骤: 1. 数据预处理:首先,需要将图像划分为小块,这些小块称为图像的“补丁”(patches)。每个补丁都是一个包含图像中一部分像素值的小矩阵。 2. 特征提取:接下来,对于每个补丁,使用一个预训练的卷积神经网络(如ResNet)来提取特征。这些特征将作为输入传递给Transformer模型。 3. Transformer编码器:过将特征向量输入Transformer编码器中,对图像中每个位置进行特征编码,并利用自注意力机制来捕捉全局上下文信息。 4. 解码器和预测:在编码器的输出上,可以使用解码器来生成分割掩码。解码器可以是一个简单的全连接层,也可以是一个带有Transformer结构的神经网络。最终,使用像素级别的分类器对每个补丁进行预测,得到最终的分割结果。 需要注意的是,由于Transformer在处理图像时需要大量的计算资源和内存,因此在实际应用中,人们常会使用一些技巧和优化方法来加速和改进图像分割的性能。 希望我对你的问题有所帮助!如果你还有其他问题,请随时提问。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值