prefacio
Hay una corriente puntuaciones de clasificación de imágenes de detección remotas basadas en la profundidad de aprendizaje de los siguientes problemas: a los datos de imagen limitada de banda alta, la información espectral no es rico, el límite rico de la característica de modelo de aprendizaje, en cierta medida, lo que resulta en la precisión de clasificación bajo imagen; 2. hay una característica interna fenómeno errores de clasificación y función de frontera incompleto y otras cuestiones.
Para resolver los problemas anteriores, la presente Bowen, describe un método para dividir los datos de elevación de unión semántica. cifras normalizadas muestran que el modelo (normalizado modelo de superficie digital, NDSM) registros incluyen todos los datos relativos a la altura por encima de la planta baja de la información, para reflejar la verdadera altura de características de la superficie. Esta información tiene un papel importante distinguir diferentes tipos de función (por ejemplo, la construcción y el suelo, los árboles y la vegetación baja, etc.) en la clasificación de imágenes.
El dataloader unión NDSM (pytorch)
La idea principal de la primera sección con el DSM y se calcula restando el NDSM DTM, en forma de numpy Guardar y, a continuación, superpone a los datos de vídeo como una cuarta banda, y a continuación, una serie de operaciones para la mejora de datos. La visualización de datos pertinente, el efecto es el siguiente:
class RSDataset(torch.utils.data.Dataset):
"""Dataset to concate multiple input images stored in slippy map format.
"""
def __init__(self, inputs, inputs_ndsm, target, debug = False,test = False):
super().__init__()
self.test = test
if debug == False:
self.inputs = Path(inputs).files()
self.inputs_ndsm = Path(inputs_ndsm).files()
if self.test == False:
self.target = Path(target).files()
else:
self.inputs = Path(inputs).files()[:1000]
self.inputs_ndsm = Path(inputs_ndsm).files()[:1000]
if self.test == False:
self.target = Path(target).files()
self.test_transform =Compose([ImageToTensor()])
self.transform1 = iaa.SomeOf((1,4),[
iaa.Crop(px=(0, 16)),
iaa.Sharpen((0.0, 1.0)),
iaa.Fliplr(0.5),
iaa.Flipud(0.5),
iaa.Affine(rotate=(-90, 90)), # rotate by -45 to 45 degrees (affects segmaps)
], random_order=True)
self.transform = JointCompose(
[
JointTransform(ImageToTensor(), MaskToTensor())
]
)
def __len__(self):
# return len(self.target)
return len(self.inputs)
def __getitem__(self, i):
# at this point all transformations are applied and we expect to work with raw tensors
images = np.array(io.imread(self.inputs[i]),dtype=np.float32)
ndsm = np.load(self.inputs_ndsm[i]).astype(np.float32)
ndsm = (ndsm+1.5)/22*255
h, w, c = images.shape
temp = np.zeros((h, w, c + 1))
temp[:, :, :3] = images
temp[:, :, 3] = ndsm
images = temp
if self.test == False:
mask = np.array(Image.open(self.target[i]).convert("L"))/255
mask = np.reshape(mask,(h, w, 1))
seq_det = self.transform1.to_deterministic() #
segmap = ia.SegmentationMapOnImage(mask, shape=mask.shape, nb_classes=2)
images = seq_det.augment_image(images)
mask = seq_det.augment_segmentation_maps([segmap])[0].get_arr_int().astype(np.uint8)
mask = np.reshape(mask,(h, w))
images, mask = images.copy(), mask.copy()
images, mask = self.transform(images, mask)
return images, mask
else:
return self.test_transform(images)
Sobre la revisión de la capa de red
Es por lo general la primera capa de la red de cuatro canales de tres canales cambió, el enfoque específico puede referirse a otro de mi entrada en el blog .
material de referencia
Xu Huimin, Qi Hua, Ke Sur, y así sucesivamente. Imagen de alta resolución Clasificación estudio en profundidad de la unión NDSm [J]. Topografía y Cartografía de 2019 (8): 63-67. DOI: 10.13474 / j. CNKI. 11- 2246.2019.0253.