mask2former训练自己的分割数据集(包含遇见的问题及解决办法)

一、环境配置

1.1 下载所需源码

mask2former:

https://github.com/facebookresearch/Mask2Former/tree/main

detectron2:

https://github.com/facebookresearch/detectron2

解压后,将两个文件夹放置同一目录。

1.2 配置环境

        1)anaconda下新建并激活虚拟环境

新建:
conda create -n mask2former python==3.8
激活:
source activate mask2former

        2)安装torch、torchvision

                在如下路径中,找对应的版本下载:

https://download.pytorch.org/whl/cu113

                我的是cu113,所需版本为:

                torch-1.12.1+cu113-cp38-cp38-linux_x86_64.whl

                torchvision-0.13.1+cu113-cp38-cp38-linux_x86_64.whl

                之后,运行如下命令即可:

pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple torch--***.whl

        3)安装detectron2

                cd到detectron2所在的根目录下,不要 cd 进detectron2文件夹:

python -m pip install -e detectron2

        4)安装mask2former所需环境和MSDA模块

                cd进mask2former文件夹,运行:

pip install -r requirements.txt

                然后,cd 进 mask2former/modeling/pixel_decoder/ops/目录下,运行:

sh make.sh

1.3 配置环境容易报错之处:

 1)MSDA编译时报错(上一步sh make.sh操作):

原因:setuptools版本过高,我安装的是setuptools=70,卸载安装为60版本即可:

pip install setuptools==60

        2)detectron2遇到:detectron2/_C.cpython-38-x86_64-linux-gnu.so: undefined symbol: _ZNK2at6Tensor7is_cudaEv

原因:更新torch版本后,Detectron2需要重新安装.

cd到detectron2所在目录:

python -m pip install -e detectron2

二、配置数据集

在项目根目录下创建数据集文件夹,例如:

datas
	|__train
		|__1.pg
		|__1.json
		|__2.jpg
		|__2.jsom
		|__3.jpg
		|__3.json
	|__val
		|__1.pg
		|__1.json

json2coco的转换:

json2coco.py:

import labelme2coco

# 设置LabelMe的json标注文件和图片文件所在的目录
labelme_folder = "/home/houxiangguan/HPA/hpa_train_val_data/mask2former/train"					# 修改为对应路径
# 设置导出文件的目录
export_dir = "/home/houxiangguan/HPA/hpa_train_val_data/mask2former"										# 修改为对应路径

# 设置训练集和验证集的切分比例
train_split_rate = 0.95
# 设置类别ID的起始值
category_id_start = 1

# 转换LabelMe注解到COCO格式
labelme2coco.convert(
    labelme_folder,
    export_dir,
    train_split_rate=train_split_rate,
    category_id_start=category_id_start
)

执行完后,会在hh文件夹下生成train_coco_format.json、val_coco_format.json。

三、修改代码

3.1 注册数据集

修改train_net.py如下:

if __name__ == "__main__":
    args = default_argument_parser().parse_args()
    print("Command Line Args:", args)

    register_coco_instances("my_dataset_train", {}, "datas/train_coco_format.json", "")
	register_coco_instances("my_dataset_val", {}, "datas/val_coco_format.json", "")

    launch(
        main,
        args.num_gpus,
        num_machines=args.num_machines,
        machine_rank=args.machine_rank,
        dist_url=args.dist_url,
        args=(args,),
    )

3.2 修改配置文件

修改configs/coco/instance-segmentatio/Base-COCO-InstanceSegmentation.yaml中修改为注册的数据集名:

DATASETS:
  TRAIN: ("my_dataset_train",)
  TEST: ("my_dataset_val",)

修改configs/coco/instance-segmentatio/maskformer2_R50_bs16_50ep.yaml中修改为分类识别个数:

NUM_CLASSES: 2				# 修改为识别类别个数

3.3 训练并预测

训练:

python train_net.py --num-gpus 0 --config-file configs/coco/instance-segmentation/maskformer2_R50_bs16_50ep.yaml
或
python train_net.py --num-gpus 0 --config-file configs/coco/instance-segmentation/maskformer2_R50_bs16_50ep.yaml  MODEL.WEIGHTS "weights/model_final_94dc52.pkl"

预测:

python demo/demo.py  --config-file ../configs/coco/instance-segmentation/maskformer2_R50_bs16_50ep.yaml --input "../datas/val/*.jpg" --confidence-threshold 0.3 --output "../output/test_mask/" --opts MODEL.WEIGHTS ../output/model_0024999.pth

### Mask2Former在语义分割任务中的最佳实践 Mask2Former作为一个通用的图像分割模型,成功地将多种类型的分割任务统一到了单一框架下。对于语义分割而言,这一架构通过引入掩码注意力变换器来增强对不同类别物体的理解能力[^1]。 #### 架构特点 - **多任务学习**:Mask2Former不仅支持传统的像素级分类(即语义分割),还能够处理实例级别的目标检测以及全景视图下的综合分析。 - **掩码注意力机制**:此特性允许网络更加关注输入图片中有意义的部分,并有效地抑制背景噪声的影响。具体来说,在编码过程中产生的特征会被转换成一系列可变长度的向量表示——这些被称为“掩码令牌”,它们随后被送入解码阶段以生成最终预测结果。 #### 实现细节 为了实现高效的训练过程并获得良好的性能表现,建议遵循以下指导原则: - 使用官方提供的开源代码库作为起点,该仓库包含了完整的实验配置文件、预训练权重以及其他辅助工具[^2]。 - 对于特定应用场景的数据集准备方面,应当确保标注数据的质量,特别是边界框和分割mask要尽可能精确无误;同时也要注意扩充样本数量以便更好地泛化至未知场景中去。 - 调整超参数时可以参照已有的研究工作成果,比如IdentityFormer、RandFormer等相似结构的成功案例所采用的一系列设置方案[^3]。 ```python import torch from mask2former import build_model, get_config_file_path config_path = get_config_file_path('semantic_segmentation') model = build_model(config_path) # 加载预训练权重 checkpoint = torch.load('/path/to/pretrained_weights.pth') model.load_state_dict(checkpoint['state_dict']) device = 'cuda' if torch.cuda.is_available() else 'cpu' model.to(device).eval() ```
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ghx3110

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值