深度学习/语义分割入门笔记(一)——遥感影像数据集及标签制作+arcgis批量矢量转栅格

目录

一、目的

二、深度学习?语义分割?

三、遥感数据集及标签的制作

数据集制作步骤:

批量矢量转栅格步骤:

四、参考视频/文章:


一、目的

对遥感影像进行语义分割。初学看了很多教程,网上这方面内容较多同时也十分杂乱,选择价值高的信息也成为了一个费时费力的难点,总结了一下最近几天看的各种内容,做个笔记。

二、深度学习?语义分割?

深度学习的课程可谓是十分之多,很多都是关注公众号或者加微信来卖课,大家自己斟酌。这里推荐b站白嫖。基础背景不再多说,这里主要记录我遇到的问题。

目前深度学习的主要三个方向分别是图像分类、目标检测和语义分割:

  • 其中图像分类主要针对图片,比如识别一张动物的照片是猫是狗;
  • 目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,进行定位和生成标记物体的边界框;
  • 语义分割主要针对像素点进行分类,把每一个像素点都标注上其对应的类别。

根据自己的研究目的来选择相应的方法手段,这里我的需求是针对像素点的语义分割。

三、遥感数据集及标签的制作

【最新笔记在​​​​​​​【实验笔记】谷歌地图配准哨兵二号影像制作遥感影像数据集-CSDN博客

看了很多教程,目前深度学习数据集的制作主要分为手动和半自动两类。对于一般的不含地理信息的图片(RGB三通道图像或者灰色单通道图像)可以采用半自动的方法进行制作,主流软件有label me、anylabeling等。对于图像的格式介绍在这里关于数据集处理的若干格式-CSDN博客

在遥感图像中,不同于普通图片,通常是包含更多信息比如地理信息以及多个光谱波段的栅格数据,后缀一般为tif,多光谱的遥感影像对于地物识别具有重要意义,自然不能舍弃。我参考了b站一个up的arcgis pro + anylabeling半自动制作遥感影像数据集,最后发现软件并不支持我的四通道16位的tif数据(也可能是我没弄明白),最终选择了手动划分的方法。

数据集制作步骤:

1、使用arcgis pro打开遥感影像。

2、生成随机点。点击【视图】-【地理处理】-【创建随机点】,按照需求填写输出信息。

3、建立缓冲区。【地理处理】-【缓冲区】,同上根据需求填入信息。

4、输出数据集。【地理处理】-【导出训练数据进行深度学习】。

5、数据集标签制作。在arcmap中打开tif,对其进行标注。这里以其中一个为例进行说明。

  • 导入tif影像;
  • 新建shp面要素,导入选择与tif源文件相同的坐标系。

  • 右击shp打开属性表,添加字段class_id;

 

  • 开始编辑,将需要分类的要素进行框选,框选后在属性表中对class_id字段进行赋值。

  • 需要说明的是,这里分为二分类和多分类。也就是可以手动将不同类型的部分都划分出来,分类赋不同的值,也可以使用二分类,将需要提取的内容赋值为1,其他部分全部赋值为0。这里我使用二分类。标注完成。

6、批量面转栅格。上述标注的标签为shp格式,还需要将shp面要素转为tif格式来使用。单个转的话,arcgis工具箱【转换工具】-【转为栅格】-【面转栅格】设置好与原tif相同的像元大小,以及上述标注的“class_id”字段即可。但由于数据集一般过大,这里建议使用批量的方法来处理。

批量矢量转栅格步骤:

 注意这里选择【系统解释器】,不要选第一个【虚拟环境】,会发生不幸!

  • 代码编写:(这里我的字段用的是id)
# coding=utf-8
import os
import arcpy
from arcpy import env

# 设置工作空间为包含 shp 文件的目录
env.workspace = r"D:\DayDayUP\Eco_data\DeepData\shp"

# 设置保存转化后的影像路径
save_path = r"D:\DayDayUP\Eco_data\DeepData\label"

# 判断保存路径是否存在,如果不存在则创建
if not os.path.exists(save_path):
    os.mkdir(save_path)

# 获取工作空间中的所有 shp 文件
shp_files = arcpy.ListFeatureClasses("*.shp")

# 设置像元大小
cell_size = 10.0

# 遍历每个 shp 文件
for shp_file in shp_files:
    # 构建输出的 tif 文件路径,使用原始 shp 文件名字加上 .tif 后缀
    output_tif = os.path.join(save_path, "{}.tif".format(os.path.splitext(shp_file)[0]))

    # 获取 shp 文件的空间参考信息
    spatial_ref = arcpy.Describe(shp_file).spatialReference

    # 进行 FeatureToRaster 转换
    arcpy.FeatureToRaster_conversion(shp_file, "Id", output_tif, cell_size)

    # 更新生成的栅格的空间参考
    arcpy.DefineProjection_management(output_tif, spatial_ref)

    print("已经完成 {} 的转换。".format(shp_file))

运行成功后可以在label文件夹里看到,所有的tif文件,用arcgsi打开发现,地理坐标被保存。至此完成遥感影像数据集的制作。

四、参考视频/文章:

深度学习语义分割遥感数据集制作流程_哔哩哔哩_bilibili

如何制作遥感深度学习标签&样本(1)_哔哩哔哩_bilibili

飞桨领航团计算机视觉项目实战营_哔哩哔哩_bilibili