深度学习/语义分割入门笔记(一)——遥感影像数据集及标签制作+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”字段即可。但由于数据集一般过大,这里建议使用批量的方法来处理。
批量矢量转栅格步骤:
- 使用工具:arcgis安装自带的python2.7+集成开发环境pycharm2022.3
- 软件下载:arcgis不必多说,pycharm的话,建议不要使用最新版,第一新版本某些功能不太稳定,第二2023.2不支持中文汉化包。官网下载地址:其他版本 - PyCharm (jetbrains.com)
- 软件激活:PyCharm 2022.3 激活破解码_安装教程 (持续更新~) - 异常教程 (exception.site)
- 环境配置:打开pycharm,选择【文件】-【新建项目】-【添加解释器】-【添加本地解释器】
注意这里选择【系统解释器】,不要选第一个【虚拟环境】,会发生不幸!
- 代码编写:(这里我的字段用的是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