【在线备忘录】使用segformer分割图像

segformer

【注册数据集与训练】

1.使用labelme打标签。

标签的种类和BGR颜色、图像的扩展名在【D:\projects\code\SegFormer-master\mmseg\datasets\insulate.py】【D:\projects\code\labelme_main\labels_insulate.txt】(数据集)中修改,作为labelme2voc/coco.py的输入。
多个类的修改:D:\projects\code\SegFormer-master\mmseg\datasets\__init__.py
D:\projects\code\SegFormer-master\local_configs\_base_\datasets\insulate_class1.py(数据集相对路径)
D:\projects\code\SegFormer-master\local_configs\segformer\B1\segformer.b1.512x512.ade.160k-insulate.py

注:可使用D:\projects\code\f\f_remove_BMPwithoutJSON.py移除文件夹中没有对应json文件的bmp图像。也可创造标签为空的json。

2.将json转换为voc和coco的数据类型。

运行【D:\projects\code\labelme_main\general_json2yolo.py】 修改"–input_dir",“–output_dir”,"–labels"参数,用【D:\projects\code\json2yolo-master\labelme2voc.py】 得到.txt标签文件。 (老版本需要在coco生成的annotation.json文件中删掉所有的JPEGImage\ 才能运行。)
划分脚本 parser.add_argument(‘–annotation_path’, default=os.path.join(dataroot, ‘JPEGImages’), type=str, help=‘input xml label path’) # 从Labels改成JPEGImages可不用生成txt和coco。训练只需要原图和掩膜。

3.配置数据的根目录文件夹后划分数据集。

(配置路径参考【D:\projects\code\SegFormer-master\local_configs\_base_\datasets\insulate_0913.py】。)
在自定义根目录后下手动配置文件夹:【JPEGImages中存所有bmp/png(注意不能是jpg,用于训练),可来自voc所得文件夹。只支持一种格式,因为mmseg\datasets中有限制),【labels中存所有txt,原在labels/annotations里)】 ,【SegmentationClass(来自voc所得文件夹的SegmentationClassPng,为用于训练的掩膜)】

使用【spilt_train.py】【spilt_test.py】划分数据集。修改【spilt_train.py】中的annotation_path。
可运行D:\projects\code\f\f_copy_LabelImages_testset.py,将属于测试集的带标签图像从voc文件夹复制到原始测试集同级路径,方便测试后对比

4.训练。

配置【tool/train.py】的’–work-dir’。
检查【mmseg\datasets\insulate.py和__init__.py】
注:数据集(包括data_root源数据和dataset_type标签类型)
‘–config’已在【D:\projects\code\SegFormer-master\local_configs\segformer\B1\segformer.b1.512x512.ade.160k-insulate.py】中的_base_ 列表的【D:\projects\code\SegFormer-master\local_configs\_base_\datasets\insulate_0915_class1.py】中设置。
‘…/…/base/schedules/schedule_160k_adamw.py’ 设置checkpoint,如模型保存周期等,D:\projects\code\SegFormer-master\tools\benchmark.py的’–log-interval’设置日志间隔。
注:.\SegFormer-master\local_configs\_base_\models\segformer.py修改类别的损失权重。类别数(class_weight列表长度)需和.\SegFormer-master\local_configs\SegFormer\B1\SegFormer.b1.512x512.ade.160k-insulate.py中num_classes一致。(现不确定)

若报错类似:

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 20-21: truncated \xXX escape

可能是因为转义字符r在这个项目中对\x不起作用。c:\user同理,可以通过改为’/'解决。

预训练:【tool/train.py】 中,有:

  if args.resume_from is not None:
        cfg.resume_from = args.resume_from

【测试】

【tool/test.py】

parser.add_argument('--config', default=r'',help='test config file path')  

和train中的config一致。

颜色渲染修改:
D:\projects\code\SegFormer-master\mmseg\datasets\insulate.py

batch_size修改:

data = dict(samples_per_gpu=2)
PALETTE = [[120, 120, 120], [0, 255, 0]]

指标:

D:\projects\code\SegFormer-master\mmseg\core\evaluation\metrics.py  (五层调用)
         float: Overall accuracy on all images.
         ndarray: Per category accuracy, shape (num_classes, ).
         ndarray: Per category evalution metrics, shape (num_classes, ).
def total_intersect_and_union(results,

若测试ok品,
则修改D:\projects\code\SegFormer-master\local_configs\segformer\B1\segformer.b1.512x512.ade.160k-insulate_selectOK.py和D:\projects\code\SegFormer-master\local_configs_base_\datasets\insulate_selectOK.py并在test.py中调用,

test=dict(
    type=dataset_type,
    data_root=data_root,
    img_dir='',
    # split=r'D:\projects\insulate\jinan\0915\ok\ok_XiAn.txt',
    split=r'D:\projects\insulate\jinan\noOil\0915\ok\ok.txt',
    ann_dir='SegmentationClass',
    pipeline=test_pipeline)

split中存放test图像的文件名(不含扩展名),使用D:\projects\code\f\f_imgsname2txt.py得到该txt文件。

注 看前景类的指标(背景占比大)

single_gpu_test函数用于结果可视化,可输出其他调试信息。

dataset = build_dataset(cfg.data.test)  

# 输出mmseg.datasets图像文件名
for img_info in dataset.img_infos:
    filename = img_info['filename']
    print(filename)

最后

Creating a custom model to detect your objects is an iterative process
of collecting and organizing images, labeling your objects of
interest, training a model, deploying it into the wild to make
predictions, and then using that deployed model to collect examples of
edge cases to repeat and improve.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值