五、代码实现深度学习河流训练样本数据的制作(软件操作后用代码完善训练样本)——获取样本图片对应的真实图片

部署运行你感兴趣的模型镜像

经过四、步骤的一系列操作(点击跳转软件如何操作~过程非常硬核)
我们获取了包含有河流样本的与真实DOM相同大小的标签图片
在这里插入图片描述
但是我们的训练样本是要与真实图片放在一起进行训练的
如下图
在这里插入图片描述
那么我得把DOM图片从文件夹里筛选出来
由于当时我是通过arcgis软件把包含有河流样本的方格筛选出来的
而图片无法通过这个过程进行筛选
最好是通过代码来进行
幸好当时改图片名字就是考虑到了这个问题

接下来就是要挑选出与标签具有相同名称的DOM图片了

Python批量复制指定文件名称的文件到目标文件夹

这部分参考这位博主的原文
真真的很有用
这里做一下简单记录
代码贴在下面了

# -*- coding: utf-8 -*-
"""
Created on Fri May 13 15:18:50 2022
@author:Laney_Midory
csdn:Laney_Midory
"""
import os
import shutil

filePath = r"C:\Users\Administrator\Desktop\water_train"  # 用于获取文件名称列表
old_path = r"D:\toWuda\DOM\CGdom-114(CK0-17)0.1m"  # 源文件夹
new_path = r"C:\Users\Administrator\Desktop\DOM"  # 目标文件夹

file_list = os.listdir(filePath)
 # print(file_list)
old_list = os.listdir(old_path)

for file in old_list:    
	if os.path.isfile(filePath+'\\'+file):        
		for i in range(len(file_list)):               
			if file_list[i] in old_list:                
				print('源文件:"'+file_list[i]+'",绝对路径:'+old_path+'\\'+file_list[i])                
				print('目标文件夹:'+new_path+'\\'+file_list[i])                
				shutil.copy(old_path+'\\'+file,new_path+'\\'+file)
print("复制完成")

但总是报错
在这里插入图片描述
于是我认真看了一下代码
发现代码出现了多余的部分才导致这个问题

我的情况是一个文件夹是需要获取的文件名称
一个文件夹是源文件夹
一个文件夹是需要移动到的目标文件夹
那么其实不需要写的那么复杂

我修改后果然就不会出现上述的问题了
同时我发现copy的速度较慢
move的速度快点
要是可以的话可以改成shutil.move

完美适合我的情况
代码如下:

# -*- coding: utf-8 -*-
"""
Created on Fri May 13 16:56:50 2022
@author:Laney_Midorycsdn:Laney_Midory"""
import os
import shutil
filePath = r"C:\Users\Administrator\Desktop\water_train"  # 用于获取文件名称列表
old_path = r"C:\Users\Administrator\Desktop\pic"  # 源文件夹
new_path = r"C:\Users\Administrator\Desktop\DOM"  # 目标文件夹

file_list = os.listdir(filePath) 
# print(file_list)
old_list = os.listdir(old_path)
for file in old_list:    
	if os.path.isfile(filePath+'\\'+file):            
		print('源文件:"'+file+'"')                       		
		shutil.copy(old_path+'\\'+file,new_path)
print("复制完成")

在这里插入图片描述
话说我还一直以为是图片放到硬盘里不好读取才会出现bug
把50多个G的图片拷到了桌面
等了将近一小时拷完
现在还把我的电脑弄卡了
C盘巨红
以后一定要认真看看代码
很可能需要自己修改一下

下面要做的

由于我的标签和原图名称一样还都是tif格式
不能放在同一个文件夹里
所以得对文件名处理一下

图片批量重命名—Python批量给文件名加后缀

我的原图后缀都是“_sat”
我的样本后缀都是“_mask”
所以图片需要重命名一下
而且
我的文件名太长了
在这里插入图片描述
也有太长的不需要的前缀
所以要在下划线处断开只保留后面
然后加上mask
效果如下
在这里插入图片描述
试运行之后成功在这里插入图片描述
接下来就是完整代码

# -*- coding: utf-8 -*-
"""
Created on Mon May 17 17:30:47 2022
@author:Laney_Midory
csdn:Laney_Midory
"""
import os
path = 'C:/Users/Administrator/Desktop/train-water/'
#path = 'C:/Users/Administrator/Desktop/test/'
file_names = os.listdir(path)

for temp in file_names:    
	img = os.path.join(path, temp)    
	fname, ext = os.path.splitext(img)    
	base_name = os.path.basename(fname)    
	base_name = base_name.split('_')    
	new_n = base_name[1] +base_name[2]+ '_mask' + ext

	print(os.path.join(path, new_n))    
	os.rename(os.path.join(path, temp), os.path.join(path, new_n))

os.path.splitext(“文件路径”) 分离文件名与扩展名;默认返回(fname,fextension)元组,可做分片操作

import os
path_01=‘D:/User/wgy/workplace/data/notMNIST_large.tar.gar’
path_02=‘D:/User/wgy/workplace/data/notMNIST_large’
root_01=os.path.splitext(path_01)
root_02=os.path.splitext(path_02)
print(root_01)
print(root_02)

结果:
(‘D:/User/wgy/workplace/data/notMNIST_large.tar’, ‘.gar’)
(‘D:/User/wgy/workplace/data/notMNIST_large’, ‘’)

os.path.basename()

函数作用:返回path最后的文件名
示例:
path=‘D:\file\cat\dog.jpg’
print(os.path.basename(path))
结果:
dog.jpg

想查看更多有关文件路径的操作可以查看这篇文章
结果如图:
在这里插入图片描述
同理对原图加上后缀并且重命名
最后就可以放在一个文件夹配好对啦
在这里插入图片描述
接下来就开始训练吧
样本顺利完成

以为这样就结束了么!!!!
oh no!!!
不要放心的太早
我检查了一下我的道路和河流样本
发现我确实在裁剪的时候删除掉了全黑的没有样本的图片
但是!!!
我的原图也有问题
道路和河流都会有白色的图片
这是本身数据的问题
不是我的操作的问题
在这里插入图片描述
对于道路来说,这种情况只会发生在边缘图片的区域
会出现白色部分
在这里插入图片描述
但对于河流来说
这些都是些什么图片!!!!!
这样的
在这里插入图片描述
这样的
在这里插入图片描述
河流水体出现白色的也太过分了吧
在这里插入图片描述
这还训练个鬼?不会对我的结果造成影响么

这是还没裁剪,还是6060大小的图片在这里插入图片描述
在这里插入图片描述
原图出现这个问题的图片真的非常多

接下来就是样本的问题
我发现一条很大的河流但是样本并没有画出来
这可怎么办
在这里插入图片描述
这是他本来就没有画的
我总不能无中生有吧
莫非要用激光雷达数据。。。。太无语了

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

<think>我们正在处理用户关于使用ArcGIS制作深度学习训练样本的问题。根据用户提供的引用内容,特别是引用[1]和引用[2],我们可以得知有两种主要的方法:一种是使用arcgispro软件进行批量制作,另一种是通过原图和shp文件批量制作样本图片。引用[1]提到arcgispro可以批量制作操作简单,避免了复杂的代码和环境问题。引用[2]则详细说明了如何只依靠原图和shp文件批量制作样本图片,但提到需要带有原图名称的方格面状文件,否则会增加难度。引用[3]则介绍了arcGISpro深度学习中的一些输出格式,如掩膜,用于对象检测。因此,我们可以为用户提供两种方法:方法一:使用ArcGISPro的深度学习工具(引用[1]和引用[3])方法二:使用原图和shp文件批量制作(引用[2])由于用户没有提供具体的样本类型(如对象检测、分割等),我们可以给出一般步骤,并建议用户根据具体任务选择合适的输出格式。下面我们将详细说明这两种方法。</think>### 如何使用 ArcGIS 制作深度学习训练样本 以下是基于 ArcGIS Pro 制作深度学习训练样本的两种常用方法,操作简单且支持批量处理: #### **方法一:使用内置深度学习工具** [^1][^3] 1. **准备数据** - 收集遥感影像源文件(如 TIFF/IMG 格式) - 准备对应的标注矢量文件(SHP 格式),包含目标对象的边界或掩膜 2. **导出训练样本** 在 ArcGIS Pro 中执行: ```python # 工具路径:地理处理 > 深度学习 > 导出训练数据 arcpy.ia.ExportTrainingDataForDeepLearning( in_raster="遥感影像.tif", # 输入影像 out_folder="训练样本输出路径", # 输出目录 in_classification_features="标注.shp", # 标注矢量 image_chip_format="PNG", # 切片格式 tile_size=256, # 切片大小(像素) stride_size=128, # 滑动步长 class_value_field="ClassValue" # 标注字段名 ) ``` **输出结果**: - `images` 文件夹:影像切片(如 `image_1.png`) - `labels` 文件夹:对应标签文件(如 `image_1.txt` 或 `image_1_mask.png`) 3. **支持的任务类型** - **目标检测**:生成边界框坐标文件(YOLO格式) - **语义分割**:生成掩膜图片(如道路/河流的PNG掩膜)[^3] --- #### **方法二:基于原图+矢量批量生成** [^2] 1. **创建鱼网格** - 使用 **"创建渔网"** 工具生成覆盖原图的方格网 - 关键步骤:在网格属性表中添加原图名称字段,确保与影像关联 2. **批量裁剪样本** ```python # 工具路径:地理处理 > 分析 > 叠加 > 相交 arcpy.analysis.Intersect( in_features=["标注.shp", "鱼网格.shp"], out_feature_class="样本标注.shp" # 带位置信息的标注 ) # 使用迭代器批量导出 for row in arcpy.da.SearchCursor("样本标注.shp", ["图名"]): arcpy.management.Clip( in_raster=row[0]+".tif", # 动态匹配原图 out_raster=f"样本_{row[0]}.png", clipping_geometry="样本标注.shp" ) ``` --- #### **关键技巧** 1. **标注规范化** - 矢量文件需包含明确分类字段(如 `ClassValue=1` 代表河流) - 使用 **"计算字段"** 统一标注值 2. **样本增强** - 调整 `ExportTrainingData` 中的 `旋转角度` 参数(如 90°, 180°)生成旋转样本 - 通过修改 `stride_size`(小于 `tile_size`)实现重叠采样 3. **格式转换** ArcGIS 支持直接导出为以下深度学习格式: ```mermaid graph LR A[ArcGIS输出] --> B[PASCAL_VOC格式] A --> C[KITTI检测格式] A --> D[掩膜PNG格式] ``` > **注意**:若需处理大规模数据,建议在 **地理处理** 中创建模型工具箱,将上述步骤封装为自动化流程[^1]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Laney_Midory

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值