UNetFormer实验笔记
实验复现过程
下载数据集
自行百度搜索网盘下载;
或官网下载
注意:loveDA测试集没有标签
支持的网络
文件夹结构
1 | airs |
环境
1 | conda create -n airs python=3.8 |
预训练权重
百度网盘 : 1234
数据处理
在终端的D:\project\pythonProject\project\airs位置
LoveDA
分别执行下面四条语句
1 | python GeoSeg/tools/loveda_mask_convert.py --mask-dir data/LoveDA/Train/Rural/masks_png --output-mask-dir data/LoveDA/Train/Rural/masks_png_convert |
Vaihingen
生成训练集
1 | python GeoSeg/tools/vaihingen_patch_split.py --img-dir "data/vaihingen/train_images" --mask-dir "data/vaihingen/train_masks" --output-img-dir "data/vaihingen/train/images_1024" --output-mask-dir "data/vaihingen/train/masks_1024" --mode "train" --split-size 1024 --stride 512 |
生成测试集
1 | python GeoSeg/tools/vaihingen_patch_split.py --img-dir "data/vaihingen/test_images" --mask-dir "data/vaihingen/test_masks_eroded" --output-img-dir "data/vaihingen/test/images_1024" --output-mask-dir "data/vaihingen/test/masks_1024" --mode "val" --split-size 1024 --stride 1024 --eroded |
生成用于可视化的masks_1024_rgb(RGB 格式真值标签)。
1 | python GeoSeg/tools/vaihingen_patch_split.py --img-dir "data/vaihingen/test_images" --mask-dir "data/vaihingen/test_masks" --output-img-dir "data/vaihingen/test/images_1024" --output-mask-dir "data/vaihingen/test/masks_1024_rgb" --mode "val" --split-size 1024 --stride 1024 --gt |
至于验证集,你可以从训练集中选择一些图像来构建它。
训练
1 | python GeoSeg/train_supervision.py -c GeoSeg/config/loveda/unetformer.py |
loveda数据集,unetformer模型
1 | python GeoSeg/train_supervision.py -c GeoSeg/config/Vaihingen/unetformer.py |
Vaihingen数据集,unetformer模型
测试
LoveDA
1 | python GeoSeg/loveda_test.py -c GeoSeg/geoseg/unetformer.py -o fig_results/loveda/loveda_test --rgb -t d4 --val |
-t : 数据增强,可以是 [None, ‘lr’, ‘d4’],默认为 None,‘lr’ 是翻转 TTA,‘d4’ 是多尺度 TTA
–val : 生成评价指标
Vaihingen
1 | python GeoSeg/vaihingen_test.py -c GeoSeg/config/vaihingen/unetformer.py -o fig_results/vaihingen/unetformer --rgb -t d4 |
论文结果
| Method | Dataset | F1 | OA | mIoU |
|---|---|---|---|---|
| UNetFormer | UAVid | - | - | 67.63 |
| UNetFormer | Vaihingen | 90.30 | 91.10 | 82.54 |
| UNetFormer | Potsdam | 92.64 | 91.19 | 86.52 |
| UNetFormer | LoveDA | - | - | 52.97 |
| FT-UNetFormer | Vaihingen | 91.17 | 91.74 | 83.98 |
| FT-UNetFormer | Potsdam | 93.22 | 91.87 | 87.50 |
实验结果
在LoveDA数据集跑unetformer模型
在Vaihingen数据集跑unetformer模型
坑
1、预训练权重无法下载问题
训练中
1 | ## Training |
报错
Mapping deprecated model name swsl_resnet18 to current resnet18.fb_swsl_ig1b_ft_in1k.
‘(MaxRetryError("HTTPSConnectionPool(host=‘huggingface.co’, port=443): Max retries exceeded with url: /timm/resnet18.fb_swsl_ig1b_ft_in1k/resolve/main/model.safetensors (Caused by Pro
xyError(‘Cannot connect to proxy.’, timeout(’_ssl.c:1114: The handshake operation timed out’)))"), ‘(Request ID: cc793089-b4d7-4003-9af8-63c759cfbd9a)’)’ thrown while requesting HEAD https://huggingface.co/timm/resnet18.fb_swsl_ig1b_ft_in1k/resolve/main/model.safetensorsraise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host=‘huggingface.co’, port=443): Max retries exceeded with url: /timm/resnet18.fb_swsl_ig1b_ft_in1k/resolve/main/model.safetensors (Caused by ProxyError(‘Cannot connect to proxy.’, timeout(‘_ssl.c:1114: The handshake operation timed out’)))
解决
运行
1 | import timm |
{‘url’: ‘https://dl.fbaipublicfiles.com/semiweaksupervision/model_files/semi_weakly_supervised_resnet18-118f1556.pth’, ‘hf_hub_id’: ‘timm/resnet18.fb_swsl_ig1b_ft_in1k’, ‘architecture’: ‘resnet18’, ‘tag’: ‘fb_swsl_ig1b_ft_in1k’, ‘custom_load’: False, ‘input_size’: (3, 224, 224), ‘fixed_input_size’: False, ‘interpolation’: ‘bilinear’, ‘crop_pct’: 0.875, ‘crop_mode’: ‘center’, ‘mean’: (0.485, 0.456, 0.406), ‘std’: (0.229, 0.224, 0.225), ‘num_classes’: 1000, ‘pool_size’: (7, 7), ‘first_conv’: ‘conv1’, ‘classifier’: ‘fc’, ‘license’: ‘cc-by-nc-4.0’, ‘origin_url’: ‘https://github.com/facebookresearch/semi-supervised-ImageNet1K-models’}
按此地址https://dl.fbaipublicfiles.com/semiweaksupervision/model_files/semi_weakly_supervised_resnet18-118f1556.pth
把权重文件下载下来
手动加载权重
在airs\GeoSeg\geoseg\models\UNetFormer.py中
1 | pretrained_cfg = timm.models.create_model('resnet18.fb_swsl_ig1b_ft_in1k').default_cfg # 新加 |
2、多进程问题
问题
raise RuntimeError(f’DataLoader worker (pid(s) {pids_str}) exited unexpectedly’) from e
RuntimeError: DataLoader worker (pid(s) 20644, 20204, 2244, 20904) exited unexpectedly
解决
num_workers是Dataloader的概念,默认值是0。num_workers是告诉DataLoader实例要使用多少个子进程进行数据加载(和CPU有关,和GPU无关)
1 | train_loader = DataLoader(dataset=train_dataset, |
3、相对引用问题
问题
from …geoseg.losses import * ImportError:
attempted relative import with no known parent package
解决
情况1:不能运行
法1:放到同一文件夹下(最简单)
法2:
1 | python |
显示:[‘’, ‘D:\Miniconda3\envs\airs\python38.zip’, ‘D:\Miniconda3\envs\airs\DLLs’,…],第一个元素为空。
1 | >> pythonpath = os.path.abspath(sys.path[0]) |
在测试一下
1 | >> sys.path |
显示:[‘D:\project\pythonProject\project\airs’,‘D:\Miniconda3\envs\airs\python38.zip’, ‘D:\Miniconda3\envs\airs\DLLs’,…]
一句话
1 | import sys |
-
其它情况
引用标红,但仍可运行




