提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
工作流程
前言
随着人工智能的不断发展,深度学习被利用的越来越广泛。但是在使用神经网络进行训练之前最重要的是要有良好的数据集,而给数据集打标签工作特别的耗费人力。
结合地信专业,我想利用高空间分辨率的无人机影像或遥感影像来创建一个关于某类植物的数据集,所以对大量的影像进行打标签工作是必不可少的,但是现在流行的打标签软件,例如labelimg、labelme等软件并不适合遥感影像数据集的打标签工作。
原因有二:一是主流的打标签软件是在已经裁剪好的图片进行打标签,而遥感影像要保证样本的数据量通常需要设置比较高的重叠度去对影像裁剪,这就使得我们如果用labelimg去打标签的话,同一个样本需要打五次标签,这无疑增加了很多工作量;二是,对于同一个地方的遥感影像通常会有多时段的数据样本,这样如果我们每次都按照传统的打标签方法会导致工作量成倍数增长。因此,如果我们使用arcgis对遥感影像进行打标签工作能够很好的帮我们解决这两个问题。使用arcgis打标签可以在我们对一整幅遥感影像的样本处理好后再进行切片导出,可以按照重叠度导出,轻松增加多倍的样本数据量。
使用arcgis进行打标签还有一个好处就是可以导出当前不同深度网络使用的不同数据集。
一、所用工具
在arcgis导出训练样本数据集使用到的工具是【导出深度学习的训练数据】,该工具只有在ArcGIS Pro版本或Arcmap10.7 以上的版本才会有。该工具的英文名为【ExportTrainingDataForDeepLearning】。
二、使用步骤
1.创建一个面.shp文件,坐标系要和影像图保持一致。
2.打开矢量数据的编辑器,用圆或矩形对样本打标签。然后打开编辑器的属性面板,打完标签后就可填上类别。
3.添加分类标签
在属性表里面新建一个名为value或是classvalue的字段,字段类型要为长整形或短整型,字符串不行。由于我训练的是二分类模型,所以我把样本的类名全部设置为1(因为导出样本数据集的工具不能识别字符串字段,有点反人类),后期可用代码把1改为所要的正确类名。这里其实改不改差别都不大,后期要在.json分类文件里设置好就可以。
4.导出深度网络训练数据集。
按照提示输入即可,生成后会发现目标目录已经生成好数据集了。
5.用代码修改样本的类名
import os
paths = r'C:\Users\Alai\Desktop\新建文件夹2\labels' # 数据集的标签目录
files = []
old = '<name>1</name>' # 需要替换的字符
new = '<name>Pomelotree</name>'
for file in os.listdir(paths):
if file.endswith('.xml'):
files.append(paths + '\\'+file)
for file in files:
with open(file, "r", encoding="utf-8") as f:
lines = f.readlines()
with open(file, "w", encoding="utf-8") as f_w:
for line in lines:
if old in line:
line = line.replace(old, new)
f_w.write(line)