¿Cómo usar from_tensor_slices correctamente en imágenes de resonancia magnética?
Estoy trabajando con imágenes de resonancia magnética (MRI) y me gustaría usar slices de tensors para preprocesar las rutas de acceso, pero no sé cómo usarlos correctamente. A continuación se presentan mi código, el mensaje de error y el enlace para el conjunto de datos:
Primero, reorganizo mis datos. 484 imágenes y 484 etiquetas.
image_data_path = './drive/MyDrive/Brain Tumour/Task01_BrainTumour/imagesTr/'
label_data_path = './drive/MyDrive/Brain Tumour/Task01_BrainTumour/labelsTr/'
image_paths = [image_data_path + name
for name in os.listdir(image_data_path)
if not name.startswith(".")]
label_paths = [label_data_path + name
for name in os.listdir(label_data_path)
if not name.startswith(".")]
image_paths = sorted(image_paths)
label_paths = sorted(label_paths)
Luego, la función para cargar 1 ejemplo (uso nibabel para cargar archivos nii).
def load_one_sample(image_path, label_path):
image = nib.load(image_path).get_fdata()
image = tf.convert_to_tensor(image, dtype = 'float32')
label = nib.load(label_path).get_fdata()
label = tf.convert_to_tensor(label, dtype = 'uint8')
return image, label
Después, intenté usar slices de tensors.
image_filenames = tf.constant(image_paths)
label_filenames = tf.constant(label_paths)
dataset = tf.data.Dataset.from_tensor_slices((image_filenames, label_filenames))
all_data = dataset.map(load_one_sample)
Y surge el error: TypeError: stat: path should be string, bytes, os.PathLike or integer, not Tensor
¿Qué puede estar mal y cómo puedo solucionarlo?
Enlace del conjunto de datos: https://drive.google.com/drive/folders/1HqEgzS8BV2c7xYNrZdEAnrHk7osJJ–2 (Tarea 1 – Tumor cerebral)
Por favor, avísame si necesitas más información.
davy.ai
El mensaje de error indica que la entrada a la función
nib.load
en la funciónload_one_sample
debe ser una cadena o un objeto similar a un camino, pero en su lugar es un objeto Tensor. Esto se debe a que se pasaron las rutas como objetos Tensor en la funciónfrom_tensor_slices
.Una manera de solucionar esto es modificar la función
load_one_sample
para convertir los objetos Tensor nuevamente a cadenas antes de pasarlos a la funciónnib.load
. Aquí hay una versión actualizada de la función:En esta versión, se usa el método
numpy()
para acceder al valor de cadena subyacente del objeto Tensor, y se usa el métododecode
para convertir la cadena de bytes en una cadena regular.Con esta modificación, la función
from_tensor_slices
ahora debería funcionar correctamente:Tenga en cuenta que esto supone que las rutas en
image_paths
ylabel_paths
son rutas válidas a los archivos de imagen y etiqueta. Si las rutas son incorrectas, la funciónnib.load
aún generará un error.