YOLOX es un modelo de detección de objetos de código abierto. Configurar su entorno en sistemas Windows requiere seguir una serie de pasos técnicos para garantizar un funcionamiento correcto. A continuación, se describe el procedimiento detallado.
Pasos de Configuración Inicial
Primero, se debe clonar el repositorio oficial de YOLOX desde GitHub a una ubicación local. Luego, se crea un entorno virtual usando conda o se reutiliza uno existente. Es recomendable verificar las dependencias listadas en el archivo requirements.txt e instalar las que falten.
Dentro del directorio raíz del proyecto, se abre una terminal y se activa el entorno conda correspondiente. Para compilar e instalar el paquete en modo desarrollo, ejecutar:
python setup.py develop
Si la instalación es exitosa, se mostrarán mensajes de confirmación.
Instalación de Componentes Adicionales
El siguiente paso es instalar pycocotools. Se puede obtener directamente desde el repositorio de COCO API. Clonar el repositorio y navegar a la carpeta PythonAPI. Antes de ejecutar el script de instalación, es necesario modificar el archivo setup.py para evitar errores comunes en Windows, como el fallo relacionado con el parámetro de compilación "/Wno-cpp". Realizar los ajustes pertinentes y luego ejecutar:
python setup.py build_ext --inplace
python setup.py build_ext install
Posteriormente, instalar el módulo apex de NVIDIA. Clonar su repositorio y ejecutar:
git clone https://github.com/NVIDIA/apex
cd apex
python setup.py install
Prueba del Modelo
Para verificar la instalación, descargar un modelo preentrenado desde los benchmarks oficiales de YOLOX y ubicarlo en el directorio raíz. Ejecutar una inferencia de ejemplo usando el siguiente comando, ajustando las rutas y parámetros según sea necesario:
python .\tools\demo.py image -f exps/default/yolox_l.py -c yolox_l.pth --path .\assets\dog.jpg --conf 0.25 --nms 0.45 --tsize 640 --save_result --device cpu
El modelo yolox_l proporciona resultados adecuados en la mayoría de los casos.
Resolución de Errores de Importación
En entornos como VSCode, es común encontrar errores del tipo "No module named xxx" al ejecutar scripts de entrenamiento. Una solución rápida es añadir el directorio padre al sistema de rutas dentro del script. Por ejemplo, al inicio de train.py:
import sys
sys.path.append("../")
Los errores de improtación suelen deberse a conflictos de nombres o rutas incorrectas. Por ejemplo, si un módulo tiene el mismo nombre que un archivo local, Python puede no resolverlo correctamente. Para solucionar esto, se pueden realizar ajustes específicos:
- En archivos como
yolo_head.py, cambiar importaciones relativas a absolutas, evitando referencias al paquete principal si hay conflicto. - Si se encuentra el error "attempted relative import with no known parent package", modificar las sentencias de importación para incluir explícitamente el paquete padre o agregar la ruta adecuada a
sys.path. - Para archivos fuera del paquete principal, como scripts de datos, importar directamente desde los módulos internos sin usar prefijos ambiguos.
Entrenamiento con Conjuntos de Datos Personalizados
Para entrenar YOLOX con un conjunto de datos en formato VOC, es necesario adaptar algunas partes del código. El proceso implica modificar el archivo de experimento y la lógica de carga de datos.
Crear un archivo de experimento personalizado basado en las configuraciones existentes, como exps/custom/yolox_voc/yolox_voc_s.py. Ajustar parámetros como el número de clases y el tamaño de entrada. En train.py, establecer este archivo como predeterminado o pasarlo como argumento.
Para evitar duplicar el conjunto de datos, se puede modificar la función get_yolox_datadir() en yolox/data/dataloading.py para que apunte al directorio real del dataset. Esto implica definir una variable global que indique la ruta correcta, como la carpeta que contiene VOCdevkit.
Además, actualizar los archivos de configuración de clases, como voc_classes.py, para incluir las categorías personalizadas. Si los datos incluyen subdivisiones de clases, consolidarlas en las etiquetas correspondientes dentro del dataset.
Finalmente, asegurar que los archivos de índice, como aquellos en VOC2007/ImageSets/Main, coincidan con las referencias en el código, o bien modificar el código para leer los nombres de archivo adecuados.