Select to view content in your preferred language

Export Training Data For Deep Learning: Invalid Feature Class

177
1
09-15-2024 06:38 PM
Labels (3)
JustinBooz
New Contributor

Hello!

I am trying to train a deep learning model to identify wetlands in several thousand historic topographic maps. I am setting up the DL training session currently (breaking maps into "chips"-- code below). All of my files are properly named with .shp, and .tif extensions in their respective folders. I'm stumped. Any ideas would be welcome. 

#Read in libraries/extensions
import arcpy
arcpy.CheckOutExtension("ImageAnalyst")
arcpy.env.overwriteOutput = True
from arcpy.ia import *
from arcpy import env
from arcpy.sa import *
import os

# Define input folders
in_fold = "C:/Users/jub718/Documents/GulfofMaine/Wetlands_ML/"
in_toposF = in_fold + "Raster/"
in_wetlandsF = in_fold + "Data_Layers/"
in_quadsF = in_fold + "Masks/"
chips_outF = in_fold + "/processing/goa_Chips/"
to_8bitF = in_fold + "/processing/goa_8bit/"

#create new directories
os.mkdir(chips_outF)
os.mkdir(to_8bitF)

#List all topo maps
arcpy.env.workspace = in_toposF
chips = arcpy.ListRasters()
print(chips)


#Make list and remove file extensions
chip_n = list()
for c in chips:
    c1 = os.path.basename(c)
    c2 = os.path.splitext(c1)[0]
    chip_n.append(c2)
print(chip_n)

import arcpy
import os
from arcpy.ia import ExportTrainingDataForDeepLearning

for cr in chip_n:
    # Set workspace
    arcpy.env.workspace = in_toposF

    # Set local variables and make folders
    cr_parts = cr.split('_')
    if len(cr_parts) > 3:
        quadNm = f"{cr_parts[1]}_{cr_parts[3]}".replace(" ", "_")
    else:
        quadNm = cr.replace(" ", "_")

    subdir = os.path.join(chips_outF, cr)
    out_folder = os.path.join(in_fold, "processing", "goa_Chips")

    # Ensure the output folder exists
    if not os.path.exists(out_folder):
        os.makedirs(out_folder)

    # Read in topo
    in_raster = os.path.join(in_toposF, f"{cr}.tif")

    # Copy topo to 8-bit PNG
    in_raster2 = arcpy.CopyRaster_management(in_raster, os.path.join(to_8bitF, f"{cr}.png"), "", "", 256, "NONE", "NONE", "8_BIT_UNSIGNED", "NONE", "NONE", "PNG", "NONE")

    # Read in wetlands
    in_wetlands = os.path.join(in_wetlandsF, f"{cr}.shp")
    in_training = os.path.join(in_wetlandsF, f"{cr}.shp")
    arcpy.env.workspace = in_toposF

    # Define image chip parameters
    image_chip_format = "PNG"
    tile_size_x = 256
    tile_size_y = 256
    stride_x = 128
    stride_y = 128
    output_nofeature_tiles = "ONLY_TILES_WITH_FEATURES"
    metadata_format = "Classified_Tiles"
    start_index = 0
    class_value_field = "value"
    buffer_radius = 0
    in_mask_polygons = os.path.join(in_quadsF, f"{cr}.shp")
    rotation_angle = 0
    reference_system = "MAP_SPACE"
    processing_mode = "PROCESS_AS_MOSAICKED_IMAGE"
    blacken_around_feature = "NO_BLACKEN"
    crop_mode = "FIXED_SIZE"
    in_instance_data = None
    instance_class_value_field = "classvalue"
    min_polygon_overlap_ratio = None
    in_class_data = in_wetlands

    # Validate feature classes
    if not arcpy.Exists(in_class_data):
        raise FileNotFoundError(f"Feature class {in_class_data} does not exist.")
    if not arcpy.Exists(in_mask_polygons):
        raise FileNotFoundError(f"Feature class {in_mask_polygons} does not exist.")

    # Create image chips
    ExportTrainingDataForDeepLearning(
        in_raster, out_folder, in_class_data, image_chip_format, tile_size_x, tile_size_y, stride_x, stride_y,
        output_nofeature_tiles, metadata_format, start_index, class_value_field, buffer_radius, in_mask_polygons,
        rotation_angle, reference_system, processing_mode, blacken_around_feature, crop_mode, in_raster2,
        in_instance_data, instance_class_value_field, min_polygon_overlap_ratio
    )

 

0 Kudos
1 Reply
ShivaniPathak
Esri Contributor

Hi,

Can you please share the full error trace. Does the feature layers have column named "value" in integer. You can please check whether you are able to add the shapefiles in Pro and the input raster and feature layers are overlapping and in same coordinate system.

0 Kudos