前言
- 遥感影像道路提取技术在多个领域具有极其重要的应用价值。在城市规划中,它能够快速更新城市道路网络,为城市扩展和土地利用规划提供精准的数据支持,帮助规划者更好地理解城市空间结构和发展趋势。在交通管理方面,该技术可以优化交通流量分析,通过实时监测道路状况,为交通信号控制和拥堵管理提供决策依据,提升城市交通运行效率。在灾害应急领域,遥感影像道路提取能够辅助灾害评估与救援路径规划,快速定位受损道路和通行路径,为救援行动争取宝贵时间。此外,它还支持道路规划与设计,通过提供高精度的道路网络数据,帮助工程师进行更合理的道路布局和基础设施建设。在农业与农村地区,该技术可用于道路规划,促进农村交通网络的优化和农业资源的高效利用。同时,遥感影像道路提取为智能交通和自动驾驶提供了高精度地图,确保车辆能够准确识别道路边界和交通标志,提升行驶安全性。随着技术的不断发展,遥感影像道路提取的应用将更加广泛,为社会经济的可持续发展提供强有力的数据支持。
一、环境配置
基于深度学习的图像处理,几乎都面临着一个问题,那就是环境的配置,博主亦是如此。
首先说一下,博主的显卡是RTX5080,原先的电脑是3050的,本来利用第二部分的代码是可以利用3050处理的,但是由于换成了5080的,反而处理不了了,因此,博主就发现cuda可能装的不合适,只能升级到最新的12.8.

由于显卡的架构比较新,旧版本的torch还没有支持。就会出现上面的这种情况。这时候,就先看了一下自己的电脑的cuda的最高可到12.8,所以就下载了下面这几个。

cuda12.8

cudnn

直接csdn上搜索如何安装即可。给一个范例
安装anaconda,官网

在anaconda里,创建一个pytorch_env的环境:
conda create –n pytorch_env python=3.9

输入y

激活一下环境
conda activate pytorch_env
安装pytorch,官网
我们可以在conda里用这段代码去安装,但是下载速度特别缓慢,因为这个库可能是新出的,所以其他的清华源之类的还不存在。
pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128
所以,我就想着用离线安装的方法 
离线下载: 网址
torch2.8.0
torchaudio2.6.0
torchvision0.22.0

下载后,直接如下离线安装,三个都是如此。

安装好后进行验证即可
python
>>> import torch # 如果pytorch安装成功即可导入
>>> print(torch.cuda.is_available()) # 查看CUDA是否可用
>>> print(torch.cuda.device_count()) # 查看可用的CUDA数量
>>> print(torch.version.cuda) # 查看CUDA的版本号
显示为true即说明安装成功。
二、代码下载

感兴趣的朋友可以直接去这里下载:
> https://github.com/zlckanata/DeepGlobe-Road-Extraction-Challenge
三、数据下载
遥感影像道路提取数据集:
数据集介绍
网址:http://deepglobe.org/challenge.html


这里提供另外一个下载地址
数据集下载连接:
链接:https://pan.baidu.com/s/1Gt2L4N_bq0wmfc50ke1QcQ
提取码:arq2
在深度学习中,大尺寸图像会占用大量内存,裁剪到较小的尺寸可以减少内存使用,提高计算效率。
四、影像裁剪
import os
from skimage import io, transform
import cv2
import numpy as np
image_dir = 'dataset/train'
image_list = os.listdir(image_dir)
im_sz = 512 # 要分成的小块大小
step = im_sz # 512 #相当于没有overlap,重叠的像素数为0
save_dir = 'dataset/train_seg'
# 如果这个文件夹不存在,则创建出来
if not os.path.exists(save_dir):
os.makedirs(save_dir)
times_all = 0
for image_name in image_list:
img, mak = None, None
if (image_name.split('.')[1] == 'jpg'):
img = io.imread(os.path.join(image_dir, image_name))
h, w, _ = img.shape
print(img.shape)
else:
mask = io.imread(os.path.join(image_dir, image_name), as_gray=True)
print(mask.shape)
h, w = mask.shape
name = image_name.split('_')[0] # 把前面的图像编号取出来
x_index = np.arange(0, h - im_sz, step).tolist() # (0,1024-1024,768)
y_index = np.arange(0, w - im_sz, step).tolist()
print(x_index)
# list[-1],表示列表最后一个元素,带负号的是从后往前找元素
# 判断最后一个分割点是不是正好能够把图像右边界分割下来,若不是,加入
if x_index[-1] != (h - im_sz):
x_index.append(h - im_sz)
if y_index[-1] != (w - im_sz):
y_index.append(w - im_sz)
# enumerate(),从0开始,0、1、2、3·····
for ind_x, col in enumerate(x_index):
for ind_y, row in enumerate(y_index):
if (img is not None):
patch = img[col:col + im_sz, row:row + im_sz, :]
print(col)
print(col + im_sz)
io.imsave(f'{save_dir}/{name}_{ind_x}_{ind_y}_sat.jpg', patch)
else:
patch_gt = mask[col:col + im_sz, row:row + im_sz]
# 确保mask是uint8类型
patch_gt = (patch_gt * 255).astype(np.uint8) # 将浮点型转换为0-255的整数
io.imsave(f'{save_dir}/{name}_{ind_x}_{ind_y}_mask.png', patch_gt)
五、数据划分
将标注的遥感图片划分为训练集、验证集和测试集。
import os
import shutil
import random
# 源文件夹路径
source_folder = 'dataset/train_seg'
# 目标文件夹路径
train_folder = 'dataset/train_set'
val_folder = 'dataset/val_set'
test_folder = 'dataset/test_set'
# 创建目标文件夹
os.makedirs(train_folder


3808

被折叠的 条评论
为什么被折叠?



