[Registro] Lectura y procesamiento de conjuntos de datos USSOCOM Urban3D

Introducción al contenido del conjunto de datos Urban3D

Las imágenes del conjunto de datos de Urban3D son imágenes RGB ortográficas con una resolución de 50 cm.
Utilice AWS para descargar datos de SpaceNet . La estructura de carpetas es:

|- 01-Provisional_Train
	|- GT
		|- GT中包含GTC,GTI,GTL.tif文件,GTL为ground truth building footprint。
	|- Inputs
		|- Inputs中包含DSM,DTM,RGB.tif文件,DSM为Digital Surface Models,DTM为Digital Terrain Models,normalized DSM (nDSM = DSM - DTM)
|- 02-Provisional_Test
|- 03-Sequestered_Test
|- 04-Unused_Data
|- AOI_polygons
|- Pretrained_Models
   |- 包含前6名参赛团队的模型

El tamaño de cada .tif es 2048*2048.

Lectura de conjuntos de datos Urban3D

from torchvision import transforms
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import sys
rgb = Image.open("/01-Provisional_Train/Inputs/JAX_Tile_016_RGB.tif")
dsm = Image.open("/01-Provisional_Train/Inputs/JAX_Tile_016_DSM.tif")
gtl = Image.open("/01-Provisional_Train/GT/JAX_Tile_016_GTL.tif")
print(rgb.size, dsm.size, gtl.size) >> (2048, 2048) (2048, 2048) (2048, 2048)
print(np.array(rgb).shape, np.array(dsm).shape, np.array(gtl).shape) >> (2048, 2048, 3) (2048, 2048) (2048, 2048)
print(np.array(rgb).dtype, np.array(dsm).dtype,  np.array(gtl).dtype) >> uint8 float32 uint8

fig = plt.figure()
plt.subplot(131)
plt.imshow(np.array(rgb))
plt.subplot(132)
plt.imshow(np.array(dsm))
plt.subplot(133)
plt.imshow(np.array(gtl))

print(np.max(gtl), np.min(gtl)) >> 6, 2

Lectura de datos Urban3D

Procesamiento Pytorch del conjunto de datos Urban3D

El uso del aprendizaje profundo requiere recortar los datos de Urban3D, que se utilizan aquí torchvision.transforms.RandomCrop. RandomCropSe puede aplicar directamente a archivos abiertos por PIL.Image y datos de tipo antorcha, pero no se puede aplicar a matrices numerosas. Para contenido específico, consulte numpy, PIL, tipo de tensor utilizado en torchvision.transforms

def type_convert(x):
    x_ = np.array(x).astype(np.float32)
    return x_
def to_tensor(x):
    x_ = np.expand_dims(x, axis=0)
    x_ = torch.from_numpy(x_)
    return x_
trans = transforms.Compose([
    transforms.RandomCrop(size=256),
    transforms.Lambda(type_convert),
    transforms.Lambda(to_tensor)
])

torch.random.manual_seed(16)
rgb_crop = trans(rgb)
torch.random.manual_seed(16)
dsm_crop = trans(dsm)
torch.random.manual_seed(16)
gtl_crop = trans(gtl)
print(rgb_crop.size(), dsm_crop.size(), gtl_crop.size())
fig = plt.figure()
plt.subplot(131)
plt.imshow(rgb_crop[0,:,:,0])
plt.subplot(132)
plt.imshow(dsm_crop[0,:,:])
plt.subplot(133)
plt.imshow(gtl_crop[0,:,:])

Después de RandomCrop

Al mismo tiempo, una cosa a tener en cuenta es que para garantizar la coherencia de los datos y las etiquetas después de RandomCrop, se debe establecer una semilla de número aleatorio. Para GTL, es necesario cambiar el valor de la etiqueta.

def type_convert_gtl(x):
    x_ = np.array(x).astype(np.float32)
    x_[x_==6]=1
    x_[x_==2]=0
    return x_

Supongo que te gusta

Origin blog.csdn.net/yaoyao_chen/article/details/132569477
Recomendado
Clasificación