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
Excelente 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
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
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.
Hola, tuve el mismo problema. Lo resolví instalando las versiones más recientes de las librerías.
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"withopen(config_util_path,"r")as f: content = f.read()content = content.replace("tf.gfile.GFile","tf.io.gfile.GFile")withopen(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.
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:
Lookinginindexes: 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(fromversions: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.0Tensorflow 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.
Me auto respondo:
Cambie la versión a la 2.8.0 y funcionó :) :)
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)
Hola 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
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.
Cuál es la razón de que al final del pipeline_config.eval_input_reader tenemos que indexar el [0]?
Hola 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]
Veo que mas adelante en la clase usamos
!pip install tf-models-official==2.7.0
Pero ¿Como se supone que usaremos esta libreria?
La 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
¿Este modelo también es válido para segmentación?
Hola 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
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ó.
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.
#### 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.
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.
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.