cuando configuramos el archivo pipline.config
tuve que importar numpy antes de importar tensorfow me daba un problema de versionado con numpy import numpy as np import tensorflow as tf hay sigues normal el script
cuando configuramos el archivo pipline.config
tuve que importar numpy antes de importar tensorfow me daba un problema de versionado con numpy import numpy as np import tensorflow as tf hay sigues normal el script
No se si no entendi bien el codigo, pero a lo que vi no hicimos ningun data augmentation, solo editamos el pipeline pero no tocamos la parte de data augmentation, el titulo quedaria mejor como "configuracion de pipeline"
¿Como resuelvo este error?:

probe reinstalar numpy, tensorflow y incluso tratar de usar "import numpy as np" como explicaba otro comentario pero nada
Hola. Escribo esto en Marzo de 2024. No me es posible avanzar con el curso debido al versionamiento de las librerías. Solicito su ayuda con una solución actualizada que sirva. También sería excelente que actualizaran el curso.
el profesor hizo una configuración general del pipeline, se entiendo que por tiempo no se puede profundizar en cada uno de los parámetros de este chichero.
Les recomiendo que revisen con una lupa cada una de sus configuraciones ya que la cantidad de opciones es muy amplia
Estaba corriendo el modelo en Colab, pero al tratar de instalar las versiones indicadas de las librerias me encontre con varios problemas, entre ellos:
!pip install tensorflow==2.7.0 print("Tensorflow version:", tf.version)
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/
ERROR: Could not find a version that satisfies the requirement tensorflow==2.7.0 (from versions: 2.8.0rc0, 2.8.0rc1, 2.8.0, 2.8.1, 2.8.2, 2.8.3, 2.8.4, 2.9.0rc0, 2.9.0rc1, 2.9.0rc2, 2.9.0, 2.9.1, 2.9.2, 2.9.3, 2.10.0rc0, 2.10.0rc1, 2.10.0rc2, 2.10.0rc3, 2.10.0, 2.10.1, 2.11.0rc0, 2.11.0rc1, 2.11.0rc2, 2.11.0, 2.11.1, 2.12.0rc0, 2.12.0rc1, 2.12.0, 2.13.0rc0)
ERROR: No matching distribution found for tensorflow==2.7.0
Tensorflow version: 2.12.0
lo que indica que ya no esta disponible esta versión.
Y ahora ? que se puede hacer?
Consulta: no se podría trabajar con las versiones actualizadas de cada libreria ?
Muchas gracias por su respuesta.
Hola, ¿alguien más tiene este error? module 'tensorflow' has no attribute 'gfile' en el comando: config = config_util.get_configs_from_pipeline_file(target_config)
El Data Augmentation es una técnica que permite aumentar artificialmente el tamaño del conjunto de datos generando versiones modificadas de las imágenes originales. Esto es útil tanto para equilibrar las clases como para mejorar la generalización del modelo. Algunas de las transformaciones más comunes incluyen:
Rotación: Rotar la imagen en un rango de grados (por ejemplo, entre -40 y +40 grados).
Volteo (Flip): Invertir la imagen horizontal o verticalmente.
Escalado: Cambiar el tamaño de la imagen sin modificar su proporción original.
Desplazamiento (Shift): Desplazar la imagen hacia arriba, abajo, izquierda o derecha.
Ruido: Agregar ruido aleatorio para hacer que las imágenes sean más diversas.
Ajuste de brillo o contraste: Modificar los niveles de brillo o contraste para simular diferentes condiciones de iluminación.
Recorte aleatorio (Random cropping): Recortar aleatoriamente una parte de la imagen.
Estas transformaciones no cambian el contenido esencial de la imagen, pero permiten que el modelo vea múltiples variaciones de una misma imagen durante el entrenamiento, lo que lo hace más robusto.
Veo que mas adelante en la clase usamos !pip install tf-models-official==2.7.0 Pero ¿Como se supone que usaremos esta libreria?
Carlos Isael Ramírez González
No se si no entendi bien el codigo, pero a lo que vi no hicimos ningun data augmentation, solo editamos el pipeline pero no tocamos la parte de data augmentation, el titulo quedaria mejor como "configuracion de pipeline"
Jesús Lautaro Careglio Albornoz
¿Como resuelvo este error?:
probe reinstalar numpy, tensorflow y incluso tratar de usar "import numpy as np" como explicaba otro comentario pero nada
Adonai Vera
ProfesorExcelente pregunta Jesus Lautaro y gracias por tomarte el tiempo de escribirlas sé que esta pregunta ayudara a muchos otros estudiantes. El problema principal radica en las nuevas versiones de TensorFlow, debido a la actualización se están presentando incompatibilidad entre versiones, la forma más sencilla de solucionarlo es asignarle a nuestro google colab cuales son las versiones que necesitamos. Para eso en el apartado
# Instalamos los paquetes necesarios para que funcione desde la Colab !pip install tf_slim !pip install tf-models-official !pip install lvis
lo modificaremos por
!pip install avro-python3 !pip install tf_slim==1.1.0 !pip install tf-models-official==2.7.0 !pip install lvis !pip install tensorflow_io==0.23.1 !pip install keras==2.7.0 !pip install opencv-python-headless==4.5.2.52
Y ya debería funcionar, porfavor pruebalo y quedo super atento.
PDT: Ya estamos trabajando con el equipo de Platzi para que quede en el Jupyter del curso.
Saludos
Cristian Barros
Hola. Escribo esto en Marzo de 2024. No me es posible avanzar con el curso debido al versionamiento de las librerías. Solicito su ayuda con una solución actualizada que sirva. También sería excelente que actualizaran el curso.
MICHAEL LEONARDO AGUAS MURILLO
Hola, tuve el mismo problema. Lo resolví instalando las versiones más recientes de las librerías.
import os import pandas as pd import json import pickle import zipfile import shutil !pip install avro-python3 !pip install !pip install tf_slim !pip install tf-models-official !pip install lvis !pip install tensorflow_io !pip install keras !pip install opencv-python-headless
Brandon F Vargas Garcia
Raul Perez-Alejo Neyra
el profesor hizo una configuración general del pipeline, se entiendo que por tiempo no se puede profundizar en cada uno de los parámetros de este chichero.
Les recomiendo que revisen con una lupa cada una de sus configuraciones ya que la cantidad de opciones es muy amplia
Rafael Rivera
Rafael Rivera
Me auto respondo:
Cambie la versión a la 2.8.0 y funcionó :) :)
Cristian Ivan Valdez Solis
Hola, ¿alguien más tiene este error? module 'tensorflow' has no attribute 'gfile' en el comando: config = config_util.get_configs_from_pipeline_file(target_config)
Adonai Vera
ProfesorHola Cristian, Ese error ocurre por incompatibilidad entre librería, te recomiendo reiniciar el notebook e instalar las versiones indicadas en el blog. Librería a importar blog
Me cuentas si se soluciona. Saludos
Jhon Freddy Tavera Blandon
El Data Augmentation es una técnica que permite aumentar artificialmente el tamaño del conjunto de datos generando versiones modificadas de las imágenes originales. Esto es útil tanto para equilibrar las clases como para mejorar la generalización del modelo. Algunas de las transformaciones más comunes incluyen:
Rotación: Rotar la imagen en un rango de grados (por ejemplo, entre -40 y +40 grados).
Volteo (Flip): Invertir la imagen horizontal o verticalmente.
Escalado: Cambiar el tamaño de la imagen sin modificar su proporción original.
Desplazamiento (Shift): Desplazar la imagen hacia arriba, abajo, izquierda o derecha.
Ruido: Agregar ruido aleatorio para hacer que las imágenes sean más diversas.
Ajuste de brillo o contraste: Modificar los niveles de brillo o contraste para simular diferentes condiciones de iluminación.
Recorte aleatorio (Random cropping): Recortar aleatoriamente una parte de la imagen.
Estas transformaciones no cambian el contenido esencial de la imagen, pero permiten que el modelo vea múltiples variaciones de una misma imagen durante el entrenamiento, lo que lo hace más robusto.
Sebastian Sarasti
Adonai Vera
ProfesorHola Sebastian, La razón es por la estructura del pipeline, la idea es que lo agregues en eval_input_reader, especificametne en label_map_path, accedemos como un diccionario a la variable y a su primer elemento label_map_path. Sin embargo el eval_input_reader es una lista, entonces debes acceder primero a la lista y por eso agregar el [0]
Sin el [0]
print(pipeline_config.eval_input_reader) [label_map_path: "PATH_TO_BE_CONFIGURED" shuffle: false num_epochs: 1 tf_record_input_reader { input_path: "PATH_TO_BE_CONFIGURED" } ]
Con el [0]
print(pipeline_config.eval_input_reader[0]) label_map_path: "PATH_TO_BE_CONFIGURED" shuffle: false num_epochs: 1 tf_record_input_reader { input_path: "PATH_TO_BE_CONFIGURED" }
saludos
Carlos Isael Ramírez González
Veo que mas adelante en la clase usamos !pip install tf-models-official==2.7.0 Pero ¿Como se supone que usaremos esta libreria?
Adonai Vera
ProfesorLa biblioteca tf-models-official proporciona implementaciones oficiales de modelos populares de aprendizaje profundo para TensorFlow.
La gran ventaja es que te permite cargar modelos pre-entrenados directamente desde TensorFlow, y ya vienen configurados y listos para usar. https://github.com/tensorflow/models
me cuentas, saludos
María Camila Durango Barrera
Profesor¿Este modelo también es válido para segmentación?
Adonai Vera
ProfesorHola Maria Camila, Este modelo y la configuración es para detección de objetos (Localización y clasificación), si deseas crear un modelo de segmentación te recomiendo uNet o Yolo V7.
Saludos
Brandon F Vargas Garcia
Hola, comparto mi solución debido a los problemas con las dependencias de tensorflow que se han actualizado muchisimo y dejado varios modelos para aprender object-detection un tanto desactualizados:
1.- Clonamos el repo de models de tf que está un tanto incompatible con versiones actuales:
# Clone the TensorFlow Models repository (if not already cloned) !git clone https://github.com/tensorflow/models.git %cd /content/models/research # Copy setup.py from object_detection to research !cp object_detection/packages/tf2/setup.py . # Compile .proto files !protoc object_detection/protos/*.proto --python_out=. # Install the Object Detection API !pip install . !pip uninstall protobuf -y !pip install protobuf==3.20.3 !pip show protobuf import os os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] = "python"
2.- Importamos las librerias:
import tensorflow as tf print(tf.__version__) import os import pandas as pd import json import pickle import zipfile import shutil from object_detection.utils import config_util from object_detection.protos import pipeline_pb2 from google.protobuf import text_format
Con estó me funcionó.
Mario Alexander Vargas Celis
MICHAEL LEONARDO AGUAS MURILLO
Buenas.
Para los que tengan problemas con el versionado de las librerías. Para la fecha que elaboro el proyecto (Junio 2024) me funcionó usar las versiones más reciente de todas las librerías.
import os import pandas as pd import json import pickle import zipfile import shutil !pip install avro-python3 !pip install !pip install tf_slim !pip install tf-models-official !pip install lvis !pip install tensorflow_io !pip install keras !pip install opencv-python-headless
Jesus Lopez
De este codigo:
pipeline_config = pipeline_pb2.TrainEvalPipelineConfig
with tf.io.gfile.GFile(target_config, "r") as f:
proto_str = f.read()
text_format.Merge(proto_str, pipeline_config)
Tengo el siguiente error:
AttributeError: 'google.protobuf.pyext._message.FieldProperty' object has no attribute 'SetInParent'
Hola crisba, también tengo el mismo problema es Julio del 2025, momentáneamente lo he solucionado, espero te ayude, usa tensorflow v2.19:
1-Primero clonamos el repositorio de models de tensorflow y usamos una versión de protocolbuffers que si se soporte:
# Clone the TensorFlow Models repository (if not already cloned) !git clone https://github.com/tensorflow/models.git %cd /content/models/research # Copy setup.py from object_detection to research !cp object_detection/packages/tf2/setup.py . # Compile .proto files !protoc object_detection/protos/*.proto --python_out=. # Install the Object Detection API !pip install . !pip uninstall protobuf -y !pip install protobuf==3.20.3 !pip show protobuf import os os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] = "python" ```2.- Después importamos las librerias que usaremos para el entrenamiento ya que te pedirá reiniciar tu entorno colab en el bloque anterior: ```js import tensorflow as tf print(tf.__version__) import os import pandas as pd import json import pickle import zipfile import shutil from object_detection.utils import config_util from object_detection.protos import pipeline_pb2 from google.protobuf import text_format ```Con esto queda solucionado todo lo relacionado a los problemas que yo me enfrenté, puede que los tuyos, sean distintos. PD: con el código de *<u>config\_util.py </u>*que es almenos el que me causó problemas porque decia que gfile no era clase de tf se soluciona cambiando por `tf.io.gfile.GFile` aunque teoricamente no deberia pasar ya que en el archivo aparece un`import tensorflow.compat.v1 as tf`, pero en caso de que salga este error en vez que cambies manualmente los codigos para poner .io. entremedio usa este bloque: ```js import os config_util_path = "/content/models/research/object_detection/utils/config_util.py" with open(config_util_path, "r") as f: content = f.read() content = content.replace("tf.gfile.GFile", "tf.io.gfile.GFile") with open(config_util_path, "w") as f: f.write(content)
Me comentas si te sirvió como a mí, saludos; disculpa si no se ve bien formateado cada code block pero en los comentarios de platzi solo puedes insertar un codeblock, pero si insertas mas se ve como texto normal, de todos modos subiré cada codeblock por separado en caso de que no se formatee correctamente, estarán en comentarios.
Estaba corriendo el modelo en Colab, pero al tratar de instalar las versiones indicadas de las librerias me encontre con varios problemas, entre ellos:
!pip install tensorflow==2.7.0 print("Tensorflow version:", tf.version)
Looking in indexes: https://pypi.org/simple, https://us-python.pkg.dev/colab-wheels/public/simple/ ERROR: Could not find a version that satisfies the requirement tensorflow==2.7.0 (from versions: 2.8.0rc0, 2.8.0rc1, 2.8.0, 2.8.1, 2.8.2, 2.8.3, 2.8.4, 2.9.0rc0, 2.9.0rc1, 2.9.0rc2, 2.9.0, 2.9.1, 2.9.2, 2.9.3, 2.10.0rc0, 2.10.0rc1, 2.10.0rc2, 2.10.0rc3, 2.10.0, 2.10.1, 2.11.0rc0, 2.11.0rc1, 2.11.0rc2, 2.11.0, 2.11.1, 2.12.0rc0, 2.12.0rc1, 2.12.0, 2.13.0rc0) ERROR: No matching distribution found for tensorflow==2.7.0 Tensorflow version: 2.12.0
lo que indica que ya no esta disponible esta versión.
Y ahora ? que se puede hacer?
Consulta: no se podría trabajar con las versiones actualizadas de cada libreria ?
Muchas gracias por su respuesta.
El balanceo de clases y la **data augmentation** son pasos importantes en el procesamiento de datos para modelos de visión computarizada, especialmente cuando trabajamos con conjuntos de datos desequilibrados o insuficientes. Aquí te explico ambos conceptos y cómo implementarlos en TensorFlow.
### 1. **Balanceo de Imágenes**
El balanceo de clases es esencial cuando las clases en un conjunto de datos están desproporcionadas, es decir, cuando algunas clases tienen muchas más imágenes que otras. Esto puede llevar a que el modelo esté sesgado hacia las clases mayoritarias.
#### Métodos comunes para el balanceo:
- **Oversampling**: Se replican las imágenes de las clases minoritarias hasta equilibrar la proporción.
- **Undersampling**: Se reduce el número de imágenes de las clases mayoritarias.
- **Data Augmentation**: Generación de nuevas imágenes mediante transformaciones.
En TensorFlow, puedes combinar tf.data.Dataset con técnicas de data augmentation para balancear el conjunto de datos.
### 2. **Data Augmentation**
La **data augmentation** aumenta la diversidad de datos mediante transformaciones aleatorias, ayudando a mejorar la generalización del modelo. Algunas transformaciones comunes incluyen:
- Rotación
- Volteo horizontal o vertical
- Zoom y recorte
- Ajuste de brillo y contraste
- Desplazamientos horizontales o verticales
### Implementación de Balanceo y Data Augmentation en TensorFlow
#### Paso 1: Definir las transformaciones de data augmentation
Usaremos las capas de tf.keras.layers para definir transformaciones de data augmentation que se aplicarán a cada imagen durante el entrenamiento.
from tensorflow.keras import layers data\_augmentation = tf.keras.Sequential(\[   layers.RandomFlip("horizontal\_and\_vertical"), # Volteo horizontal y vertical   layers.RandomRotation(0.2), # Rotación   layers.RandomZoom(0.1), # Zoom   layers.RandomContrast(0.2), # Contraste ])
#### Paso 2: Aplicar data augmentation y balanceo al conjunto de datos
Suponiendo que tienes tu conjunto de datos cargado en formato TFRecord, puedes aplicar data\_augmentation y balancear las clases mediante oversampling.
import tensorflow as tf \# Función de preprocesamiento y augmentación def preprocess\_and\_augment(image, label):   image = tf.image.resize(image, \[128, 128]) # Ajuste de tamaño   image = tf.cast(image, tf.float32) / 255.0 # Normalización   image = data\_augmentation(image) # Aplicación de augmentación   return image, label \# Cargar el conjunto de datos train\_dataset = tf.data.TFRecordDataset('train\_data.tfrecord') train\_dataset = train\_dataset.map(parse\_tfrecord\_fn) \# Balanceo mediante oversampling def balance\_dataset(dataset, minority\_class\_size, batch\_size=32):   minority\_class = dataset.filter(lambda image, label: label == 1)   majority\_class = dataset.filter(lambda image, label: label == 0)   \# Oversampling de la clase minoritaria   minority\_class = minority\_class.repeat(int(minority\_class\_size / len(minority\_class)))   \# Mezclar y combinar ambas clases   balanced\_dataset = majority\_class.concatenate(minority\_class)   balanced\_dataset = balanced\_dataset.shuffle(buffer\_size=1000).batch(batch\_size).prefetch(tf.data.AUTOTUNE)       return balanced\_dataset \# Aplicar preprocess y augmentación train\_dataset = train\_dataset.map(preprocess\_and\_augment) train\_dataset = balance\_dataset(train\_dataset, minority\_class\_size=1000)
#### Paso 3: Entrenamiento con dataset balanceado y aumentado
Usa el conjunto de datos balanceado y aumentado en el modelo para el entrenamiento.
\# Definición del modelo (Ejemplo) model = tf.keras.Sequential(\[   layers.Conv2D(32, (3, 3), activation='relu', input\_shape=(128, 128, 3)),   layers.MaxPooling2D((2, 2)),   layers.Conv2D(64, (3, 3), activation='relu'),   layers.MaxPooling2D((2, 2)),   layers.Conv2D(64, (3, 3), activation='relu'),   layers.Flatten(),   layers.Dense(64, activation='relu'),   layers.Dense(10, activation='softmax') # Asumiendo 10 clases ]) \# Compilación y entrenamiento model.compile(optimizer='adam',   loss='sparse\_categorical\_crossentropy',   metrics=\['accuracy']) model.fit(train\_dataset, epochs=10)
### Explicación del código
1. **Definición de data augmentation**: Creamos una secuencia de capas de augmentación con tf.keras.layers.
2. **Balanceo del dataset**: Usamos oversampling de la clase minoritaria repitiéndola hasta equilibrar las clases.
3. **Preprocesamiento y augmentación**: Ajustamos el tamaño, normalizamos, y aplicamos augmentación a cada imagen del conjunto.
4. **Entrenamiento**: Entrenamos el modelo con el dataset balanceado y aumentado.
Esta combinación de data augmentation y balanceo mejora la capacidad del modelo para generalizar y reducir el sesgo hacia clases más representadas.