遥感影像语义分割自监督+对比学习-网络训练


前言

今天开始,要进行代码的学习,先将训练自监督网络的代码跑起来。

1. 数据集:

  1. 数据的获取
    Potsdam数据集下载链接
    百度网盘提取码:lala
    Vaihingen数据集下载链接
    百度网盘提取码:lala
    Toronto数据集下载链接
    百度网盘提取码:lala

  2. 数据集的介绍
    上述的数据详细介绍请大家移步至对应官网进行查看,其中有对应数据集的详细介绍
    数据集的官网

  3. 数据集的处理
    点击链接下载数据集处理源码

  4. 处理之后的数据集下载
    百度网盘提取码:lala

2.网络训练

作者提供的帮助文档中所给的命令是错误的,要用下面的这个:

python main_ss.py --root=./data_example/Potsdam --ex_mode=1 --self_mode=1 --self_max_epoch=400 --ft_max_epoch=150 --self_data_name=train --ft_train_name=trainR1

训练的前期准备:

1.数据集

  • 训练所使用的训练集为RGBIR模式的tif图片,其中RGB是颜色模式,分别代表Red, Green, Blue,是最广泛应用的色彩模式。IR是Infrared,即红外线,其波长(约760nm~1mm)比红光长,是不可见光。是一种四通道的图片。
  • 数据集中的图片是大图,要拆分之后才能用。代码如下:
import os
from skimage import io


def division(folder_in, folder_out, split_size=256):


    for tif_nanme in os.listdir(folder_in):
        imgPath = folder_in +'\\' +tif_nanme
        tif = io.imread(imgPath)  # 读取RGB原图像

        for i in range(int(tif.shape[0] /split_size)):
            for j in range(int(tif.shape[1] /split_size)):
                if tif.shape[-1]<=4:  # 处理多通道图片
                    img = tif[split_size * i: split_size * (i + 1), split_size * j: split_size * (j + 1), :]
                else:                 # 处理单通道图片
                    img = tif[split_size * i: split_size * (i + 1), split_size * j: split_size * (j + 1)]
                name = i * int(tif.shape[0] /split_size) + j
                # 让RGB图像和标签图像的文件名对应
                name_Path = folder_out + tif_nanme[:-4] + str(name) + '.tif'
                io.imsave(name_Path, img, check_contrast=False)


division(folder_in=r'D:\dataset\image',
         folder_out=r'./dataset/images/',
         split_size=256)
division(folder_in=r'D:\dataset\label',
         folder_out=r'./dataset/labels/',
         split_size=256)

2. 数据集索引文件生成

数据集目录结构如下:

  • train_lbl: 训练集标签图片
  • train_RGBIR: 训练集图片
  • val_lbl, val_RGBIR: 测试集的标签和图片
  • class_dict.txt: 元素种类信息
  • train_RGBIR: 训练集图片名(用于自监督训练)
  • trainR1_lbl.txt,trainR1_RGBIR.txt:训练集图片名(用于对比训练-微调)
  • val_lbl.txt, val_RGBIR.txt: 测试集的标签名和图片名
    在这里插入图片描述

准备好了训练所需要的图片后,现在开始生成用来索引图片的txt文件。代码如下:

def OutName_TXT(root_path='D:\\BaiduNetdiskDownload\\ISPRS-data-preprocessing\\Potsdam',
                datasets_name={
    
    'train': 13800, 'trainR1': 138, 'val': 1000}):
    for k, i in datasets_name.items():
        b = 0
        id_list = os.listdir(root_path)
        random.shuffle(id_list)
        f = open(k + '_RGBIR.txt', "w+")
        f1 = open(k + '_lbl.txt', "w+")
        for j in id_list[b:b+i]:
            f.write(j + "\n")
            f1.write(j + "\n")
        f.close()
        f1.close()
        print("Success crated {0}_lbl.txt and {0}_RGBIR.txt!".format(k))
OutName_TXT(root_path='D:\\BaiduNetdiskDownload\\ISPRS-data-preprocessing\\Potsdam\\images',
            datasets_name={
    
    'train': 13800, 'trainR1': 138, 'val': 1000})
# val为文件名字,100是训练集图片个数,是在训练集中随机抽取的

3. 开始训练

点击 “运行->编辑配置”,将运行所需的参数加入
–root=./data_example/Potsdam
–ex_mode=1
–self_mode=1
–self_max_epoch=400
–ft_max_epoch=150
–self_data_name=train
–ft_train_name=trainR1
在这里插入图片描述
配置好后,就可以进行运行和调试啦。

猜你喜欢

转载自blog.csdn.net/Gw2092330995/article/details/126099881