Saltar a contenido

Instalación

Introducción

Introducción

Este módulo muestra cómo detectar objetos en imágenes utilizando la red de aprendizaje profundo You Only Look Once versión 8 (YOLOv8).

El contenido de visión por computador se divide en cinco lecciones:

  1. Instalación: En esta lección instalarás todas las herramientas y librerías necesarias para trabajar con visión por computador en MATLAB.
  2. Entrenamiento de modelos mediante aprendizaje por transferencia: Esta lección cubre los conceptos básicos del entrenamiento de un modelo YOLO y explica cómo el aprendizaje por transferencia puede mejorar el rendimiento y reducir el tiempo de entrenamiento.
  3. Postprocesamiento: Esta lección presenta técnicas de postprocesamiento que mejoran el rendimiento del modelo después del entrenamiento, incluyendo el filtrado y el refinamiento de las detecciones.
  4. Evaluación: Esta lección se centra en la evaluación de modelos de detección de objetos utilizando métricas estándar y técnicas de visualización. Cubre el cálculo de estas métricas y proporciona pautas para su correcta interpretación.
  5. Experimentación: Esta lección final proporciona una exploración más profunda del entrenamiento de modelos. Introduce hiperparámetros clave, muestra la aplicación de técnicas de aumento de datos y explica cómo diseñar experimentos para evaluar diferentes configuraciones de entrenamiento.

Toolboxes requeridos

Para ejecutar este proyecto o lección, se requieren los siguientes toolboxes:

  • Computer Vision Toolbox™
  • Deep Learning Toolbox™
  • Parallel Computing Toolbox™

Comprobar la instalación de los toolboxes en MATLAB

Puedes utilizar el código siguiente para comprobar automáticamente si todos los toolboxes requeridos están instalados:

% Lista de toolboxes requeridos
requiredToolboxes = [
    "Computer Vision Toolbox"
    "Deep Learning Toolbox"
    "Parallel Computing Toolbox"
];

% Obtener los toolboxes instalados y convertir los nombres a un array de strings
toolboxTable = matlab.addons.installedAddons;
installedNames = string(toolboxTable.Name);

% Comprobar si faltan toolboxes
missing = ~ismember(requiredToolboxes, installedNames);

% Informe
if any(missing)
    missingList = requiredToolboxes(missing);
    error("Faltan toolboxes requeridos:\n%s\n\nPor favor, instálalos mediante Home > Add-Ons > Get Add-Ons.", ...
        strjoin(missingList, newline));
else
    disp("✅ Todos los toolboxes requeridos están instalados.");
end
✅ All required toolboxes are installed.

Cómo instalar los toolboxes que faltan

Si falta algún toolbox:

  1. Ve a la pestaña Home en MATLAB.
  2. Haz clic en Add-Ons > Get Add-Ons.
  3. Busca el toolbox que falta por su nombre.
  4. Haz clic en Install.

Instrucciones de configuración

Añadir la ruta del módulo de ayuda

Añade la ruta al módulo de ayuda para que MATLAB pueda acceder a los scripts de esta carpeta:

addpath('help-module');

Instalar Python y las librerías requeridas

Utiliza el siguiente comando para instalar Python y las librerías necesarias. Esto puede tardar más de 5 minutos:

yolo.installUltralytics();

Después de ejecutar este código, debería aparecer una carpeta win64 en caso de que estés usando Windows; en caso contrario, glnxa64.

Descargar el dataset

Para descargar el dataset:

(No está actualizado, es otro dataset, no lo descargues)

%disp("descargar datos")
download data
%yolo.helper.downloadMultiClassData()
Downloading multiclass object detection dataset...

Comprobar que YOLO funciona

Cargar el detector de objetos YOLOv8 y ejecutar la inferencia:

% Cargar el modelo YOLO v8
det = yolov8ObjectDetector2('yolov8s');
Pretrained yolov8s network already exists.
% Leer la imagen de prueba.
I = imread(fullfile('datasets/fruits_3_4998/example','orange.jpg'));

% Cargar la red pequeña YOLO v8.
det = yolov8ObjectDetector2('yolov8s');
Pretrained yolov8s network already exists.
% Realizar la detección usando el modelo preentrenado.
[bboxes, scores, labels] = detect(det, I);

% Visualizar los resultados de detección.
annotations = string(labels) + ': ' + string(scores);
Iout = insertObjectAnnotation(I, 'rectangle', bboxes, annotations);
figure, imshow(Iout);

figure_0.png

Configuración de YOLO

Definir el entorno de Python

if (ispc)
    pyenv(Version="win64/python/python.exe", ExecutionMode = "OutOfProcess")
else
    pyenv(Version="glnxa64/python/bin/python3", ExecutionMode = "OutOfProcess")
end
ans = 
  PythonEnvironment with properties:

          Version: "3.11"
       Executable: "C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\win64\python\python.exe"
          Library: "C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\win64\python\python311.dll"
             Home: "C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\win64\python"
           Status: Loaded
    ExecutionMode: OutOfProcess
        ProcessID: "30028"
      ProcessName: "MATLABPyHost"
if isunix
    py.sys.setdlopenflags(int32(bitor(int64(py.os.RTLD_LAZY),int64(py.os.RTLD_DEEPBIND))));
end

Configurar los ajustes globales de YOLO

% setYoloSettings Define los ajustes globales de YOLO mediante el wrapper de Python.
%
% setYoloSettings(pythonObject, option, value) define la opción especificada
% de YOLO con el valor indicado usando el wrapper de Python.
py.trainYOLOv8Wrapper.setYoloSettings(py.str('tensorboard'), true);
settings_version 0.0.4
datasets_dir C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\Lessons\from-code-to-robot\computer_vision\datasets
weights_dir C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\Lessons\from-code-to-robot\computer_vision\weights
runs_dir C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\Lessons\from-code-to-robot\computer_vision\runs
uuid ec83097be249f049dc01533308f726e37a20a9a11e43afb8810c32587f8ec051
sync True
api_key 
openai_api_key 
clearml True
comet True
dvc True
hub True
mlflow True
neptune True
raytune True
tensorboard True
wandb True
True
runsDir = fullfile(pwd, 'runs'); % Une el directorio actual con la carpeta 'runs'
weightsDir = fullfile(pwd, 'weights'); % Une el directorio actual con la carpeta 'runs'
datasets_dir = fullfile(pwd, 'datasets');
py.trainYOLOv8Wrapper.setYoloSettings(py.str("runs_dir"), py.str(runsDir));
settings_version 0.0.4
datasets_dir C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\Lessons\from-code-to-robot\computer_vision\datasets
weights_dir C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\Lessons\from-code-to-robot\computer_vision\weights
runs_dir C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\Lessons\from-code-to-robot\computer_vision\runs
uuid ec83097be249f049dc01533308f726e37a20a9a11e43afb8810c32587f8ec051
sync True
api_key 
openai_api_key 
clearml True
comet True
dvc True
hub True
mlflow True
neptune True
raytune True
tensorboard True
wandb True
True
py.trainYOLOv8Wrapper.setYoloSettings(py.str("weights_dir"), py.str(weightsDir));
settings_version 0.0.4
datasets_dir C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\Lessons\from-code-to-robot\computer_vision\datasets
weights_dir C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\weights
runs_dir C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\runs
uuid ec83097be249f049dc01533308f726e37a20a9a11e43afb8810c32587f8ec051
sync True
api_key 
openai_api_key 
clearml True
comet True
dvc True
hub True
mlflow True
neptune True
raytune True
tensorboard True
wandb True
True
py.trainYOLOv8Wrapper.setYoloSettings(py.str("datasets_dir"), py.str(datasets_dir));
settings_version 0.0.4
datasets_dir C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\Lessons\from-code-to-robot\computer_vision\datasets
weights_dir C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\weights
runs_dir C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\runs
uuid ec83097be249f049dc01533308f726e37a20a9a11e43afb8810c32587f8ec051
sync True
api_key 
openai_api_key 
clearml True
comet True
dvc True
hub True
mlflow True
neptune True
raytune True
tensorboard True
wandb True
True