Saltar a contenido

2. Entrenamiento de modelos usando aprendizaje por transferencia

En esta lección, aprenderemos cómo entrenar un modelo de detección de objetos usando aprendizaje por transferencia. Estas técnicas reducen el esfuerzo computacional y mejoran el rendimiento del modelo, incluso con datasets pequeños.

Primero, añadimos el módulo de ayuda:

addpath('help-module');

Entrenamiento

Parámetros requeridos de YOLO

Los siguientes parámetros son obligatorios al configurar una sesión de entrenamiento de YOLO:

  • configFile (str) : Ruta al archivo de configuración (normalmente en formato .yaml) que define la estructura del dataset y las clases. Este archivo debe incluir las rutas a los conjuntos de entrenamiento, validación y, opcionalmente, prueba, así como la lista de nombres de las clases. Como ejemplo, el archivo que usaremos en este tutorial es data.yaml, que ya contiene toda la estructura definida.
  • baseModel (str): Este parámetro especifica qué modelo se utilizará para el entrenamiento. Permite continuar el entrenamiento de un modelo previamente entrenado o iniciar el entrenamiento desde un modelo YOLO preentrenado. Puedes elegir entre diferentes versiones de YOLO, tareas (por ejemplo, detección de objetos, segmentación, clasificación) y tamaños de modelo. Para estos tutoriales, usaremos YOLOv8 para detección de objetos. Los modelos preentrenados disponibles, ordenados de menor a mayor, son: yolov8n.pt, yolov8s.pt, yolov8m.pt, yolov8l.pt, yolov8x.pt. En estas lecciones se recomienda usar modelos más pequeños (por ejemplo, yolov8n.pt o yolov8s.pt) para acelerar el entrenamiento y la velocidad de inferencia.
  • MaxEpochs (int): Este parámetro establece el número máximo de épocas para el entrenamiento, donde una época es una pasada completa por todas las imágenes del dataset de entrenamiento. Aumentar este valor suele mejorar el rendimiento del modelo, pero también incrementa el tiempo de entrenamiento.
  • ImageSize (list[int]): Tamaño (en píxeles) al que se redimensionarán todas las imágenes antes del entrenamiento. Tamaños mayores pueden mejorar la precisión, pero requieren más recursos computacionales.

En el siguiente código, definimos los valores de estos parámetros requeridos. Usa estos parámetros para acelerar la ejecución:

configFile = fullfile(pwd, 'datasets', 'fruits_3_4998', 'data.yaml');
baseModel = 'yolov8s-oiv7.pt';
options.MaxEpochs = 1;
options.ImageSize = [256 256 3];

Visualización de las capas de YOLO

El siguiente código permite visualizar la arquitectura y los parámetros de un modelo YOLOv8:

det = yolov8ObjectDetector2('yolov8s');
Pretrained yolov8s network already exists.
% Analizar el modelo cargado
analyzeNetwork(det.Network);

Este comando abre una nueva ventana que muestra todas las capas y parámetros del modelo YOLO que se está utilizando. Ten en cuenta que las distintas variantes de YOLOv8 (por ejemplo, yolov8s, yolov8m, etc.) difieren no solo en el número de parámetros, sino también ligeramente en su complejidad arquitectónica.

En el caso de YOLOv8, el modelo suele constar de 23 bloques principales. Estos se pueden agrupar en tres componentes principales:

  • Backbone (primeros 10 bloques): Responsable de extraer características de la imagen de entrada.
  • Neck (siguientes 12 bloques): Combina características a distintas escalas para mejorar el rendimiento de detección.
  • Head (último bloque): Responsable de predecir bounding boxes, etiquetas de clase y puntuaciones de confianza.

Parámetro de congelación de capas para aprendizaje por transferencia

Una de las principales ventajas de los modelos YOLO es que vienen preentrenados. Entrenar un modelo de detección de objetos desde cero suele requerir millones de imágenes y una potencia computacional considerable. Este problema puede resolverse usando aprendizaje por transferencia, que consiste en tomar un modelo que ya ha sido entrenado en un dataset grande y reentrenarlo ligeramente usando un conjunto mucho más pequeño de datos nuevos.

El aprendizaje por transferencia es especialmente eficaz en visión por computador porque las redes neuronales convolucionales (CNN), que son la base de YOLO (y de todos los modelos de detección de objetos), aprenden características de forma jerárquica. Las capas iniciales detectan características de bajo nivel, como bordes y texturas, mientras que las capas más profundas capturan patrones más complejos y estructuras de objetos. Esta jerarquía hace que las primeras capas sean altamente reutilizables en distintas tareas.

image_0.png

Normalmente, las capas iniciales responsables de la extracción de características (el backbone) se congelan durante el entrenamiento, lo que significa que sus pesos no se actualizan. Esto permite que el modelo conserve las características visuales generales aprendidas de datasets grandes. Mientras tanto, las capas posteriores se ajustan finamente sobre el nuevo dataset para adaptarse a la tarea específica.

En algunos escenarios, todo el modelo puede ajustarse finamente usando una tasa de aprendizaje menor, permitiendo que se adapte gradualmente a los nuevos datos mientras se minimiza el riesgo de sobrescribir conocimiento preentrenado valioso.

Por eso usamos YOLOv8. Viene preentrenado en datasets grandes como COCO (por ejemplo, yolov8n.pt, yolov8s.pt) u Open Image V7 (por ejemplo, yolov8n-oiv7.pt, yolov8s-oiv7.pt). Usar estos modelos reduce significativamente el tiempo de entrenamiento y mejora el rendimiento, incluso con datasets más pequeños.

Elegir qué capas congelar

La elección de cuántas capas de YOLOv8 congelar depende de lo parecido que sea tu dataset objetivo a los datos preentrenados. YOLOv8 tiene 22 capas que se pueden congelar: las primeras 10 extraen características genéricas (bordes, texturas, formas), mientras que las capas posteriores se especializan en detección. Dado que nuestras clases (manzana, naranja, pera) están bien representadas en COCO y Open Images V7, los dominios coinciden bastante. Esto nos permite congelar la mayoría de las capas para mantener intactas las características generales y ajustar finamente solo las capas de nivel superior para nuestras frutas, lo que acelera el entrenamiento y reduce el riesgo de sobreajuste.

Para congelar capas específicas durante el entrenamiento, usamos el parámetro freeze de la siguiente manera:

optionalArgs = {'freeze', 15};

Hay parámetros adicionales disponibles para configurar el modelo, que se explicarán en la Lección 4: Experimentación.

Inicio del entrenamiento

A continuación, entrenamos el modelo YOLO con los parámetros que definimos anteriormente. Esto puede tardar aproximadamente 2 minutos.

[yolov8Det, results] = trainYOLOv8ObjectDetector( ...
    configFile, ...
    baseModel, ...
    options, ...
    optionalArgs{:});
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: Terminated
    ExecutionMode: OutOfProcess

False
is instance freeze
New https://pypi.org/project/ultralytics/8.3.174 available  Update with 'pip install -U ultralytics'
Ultralytics YOLOv8.2.66  Python-3.11.5 torch-2.7.0+cpu CPU (11th Gen Intel Core(TM) i5-1135G7 2.40GHz)
□[34m□[1mengine\trainer: □[0mtask=detect, mode=train, model=yolov8s-oiv7.pt, data=C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\data.yaml, epochs=1, time=None, patience=100, batch=16, imgsz=256, save=True, save_period=-1, cache=False, device=None, workers=8, project=None, name=first, exist_ok=False, pretrained=True, optimizer=auto, verbose=True, seed=0, deterministic=True, single_cls=False, rect=False, cos_lr=False, close_mosaic=10, resume=False, amp=True, fraction=1.0, profile=False, freeze=15, multi_scale=False, overlap_mask=True, mask_ratio=4, dropout=0.0, val=True, split=val, save_json=False, save_hybrid=False, conf=None, iou=0.7, max_det=300, half=False, dnn=False, plots=True, source=None, vid_stride=1, stream_buffer=False, visualize=False, augment=False, agnostic_nms=False, classes=None, retina_masks=False, embed=None, show=False, save_frames=False, save_txt=False, save_conf=False, save_crop=False, show_labels=True, show_conf=True, show_boxes=True, line_width=None, format=torchscript, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=None, workspace=4, nms=False, lr0=0.01, lrf=0.01, momentum=0.937, weight_decay=0.0005, warmup_epochs=3.0, warmup_momentum=0.8, warmup_bias_lr=0.1, box=7.5, cls=0.5, dfl=1.5, pose=12.0, kobj=1.0, label_smoothing=0.0, nbs=64, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, bgr=0.0, mosaic=1.0, mixup=0.0, copy_paste=0.0, auto_augment=randaugment, erasing=0.4, crop_fraction=1.0, cfg=None, tracker=botsort.yaml, save_dir=C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\runs\detect\first
Overriding model.yaml nc=601 with nc=3

                   from  n    params  module                                       arguments                     
  0                  -1  1       928  ultralytics.nn.modules.conv.Conv             [3, 32, 3, 2]                 
  1                  -1  1     18560  ultralytics.nn.modules.conv.Conv             [32, 64, 3, 2]                
  2                  -1  1     29056  ultralytics.nn.modules.block.C2f             [64, 64, 1, True]             
  3                  -1  1     73984  ultralytics.nn.modules.conv.Conv             [64, 128, 3, 2]               
  4                  -1  2    197632  ultralytics.nn.modules.block.C2f             [128, 128, 2, True]           
  5                  -1  1    295424  ultralytics.nn.modules.conv.Conv             [128, 256, 3, 2]              
  6                  -1  2    788480  ultralytics.nn.modules.block.C2f             [256, 256, 2, True]           
  7                  -1  1   1180672  ultralytics.nn.modules.conv.Conv             [256, 512, 3, 2]              
  8                  -1  1   1838080  ultralytics.nn.modules.block.C2f             [512, 512, 1, True]           
  9                  -1  1    656896  ultralytics.nn.modules.block.SPPF            [512, 512, 5]                 
 10                  -1  1         0  torch.nn.modules.upsampling.Upsample         [None, 2, 'nearest']          
 11             [-1, 6]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           
 12                  -1  1    591360  ultralytics.nn.modules.block.C2f             [768, 256, 1]                 
 13                  -1  1         0  torch.nn.modules.upsampling.Upsample         [None, 2, 'nearest']          
 14             [-1, 4]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           
 15                  -1  1    148224  ultralytics.nn.modules.block.C2f             [384, 128, 1]                 
 16                  -1  1    147712  ultralytics.nn.modules.conv.Conv             [128, 128, 3, 2]              
 17            [-1, 12]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           
 18                  -1  1    493056  ultralytics.nn.modules.block.C2f             [384, 256, 1]                 
 19                  -1  1    590336  ultralytics.nn.modules.conv.Conv             [256, 256, 3, 2]              
 20             [-1, 9]  1         0  ultralytics.nn.modules.conv.Concat           [1]                           
 21                  -1  1   1969152  ultralytics.nn.modules.block.C2f             [768, 512, 1]                 
 22        [15, 18, 21]  1   2117209  ultralytics.nn.modules.head.Detect           [3, [128, 256, 512]]          
YOLOv8s summary: 225 layers, 11,136,761 parameters, 11,136,745 gradients, 28.7 GFLOPs

Transferred 349/355 items from pretrained weights
□[34m□[1mTensorBoard: □[0mStart with 'tensorboard --logdir C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\runs\detect\first', view at http://localhost:6006/
Freezing layer 'model.0.conv.weight'
Freezing layer 'model.0.bn.weight'
Freezing layer 'model.0.bn.bias'
Freezing layer 'model.1.conv.weight'
Freezing layer 'model.1.bn.weight'
Freezing layer 'model.1.bn.bias'
Freezing layer 'model.2.cv1.conv.weight'
Freezing layer 'model.2.cv1.bn.weight'
Freezing layer 'model.2.cv1.bn.bias'
Freezing layer 'model.2.cv2.conv.weight'
Freezing layer 'model.2.cv2.bn.weight'
Freezing layer 'model.2.cv2.bn.bias'
Freezing layer 'model.2.m.0.cv1.conv.weight'
Freezing layer 'model.2.m.0.cv1.bn.weight'
Freezing layer 'model.2.m.0.cv1.bn.bias'
Freezing layer 'model.2.m.0.cv2.conv.weight'
Freezing layer 'model.2.m.0.cv2.bn.weight'
Freezing layer 'model.2.m.0.cv2.bn.bias'
Freezing layer 'model.3.conv.weight'
Freezing layer 'model.3.bn.weight'
Freezing layer 'model.3.bn.bias'
Freezing layer 'model.4.cv1.conv.weight'
Freezing layer 'model.4.cv1.bn.weight'
Freezing layer 'model.4.cv1.bn.bias'
Freezing layer 'model.4.cv2.conv.weight'
Freezing layer 'model.4.cv2.bn.weight'
Freezing layer 'model.4.cv2.bn.bias'
Freezing layer 'model.4.m.0.cv1.conv.weight'
Freezing layer 'model.4.m.0.cv1.bn.weight'
Freezing layer 'model.4.m.0.cv1.bn.bias'
Freezing layer 'model.4.m.0.cv2.conv.weight'
Freezing layer 'model.4.m.0.cv2.bn.weight'
Freezing layer 'model.4.m.0.cv2.bn.bias'
Freezing layer 'model.4.m.1.cv1.conv.weight'
Freezing layer 'model.4.m.1.cv1.bn.weight'
Freezing layer 'model.4.m.1.cv1.bn.bias'
Freezing layer 'model.4.m.1.cv2.conv.weight'
Freezing layer 'model.4.m.1.cv2.bn.weight'
Freezing layer 'model.4.m.1.cv2.bn.bias'
Freezing layer 'model.5.conv.weight'
Freezing layer 'model.5.bn.weight'
Freezing layer 'model.5.bn.bias'
Freezing layer 'model.6.cv1.conv.weight'
Freezing layer 'model.6.cv1.bn.weight'
Freezing layer 'model.6.cv1.bn.bias'
Freezing layer 'model.6.cv2.conv.weight'
Freezing layer 'model.6.cv2.bn.weight'
Freezing layer 'model.6.cv2.bn.bias'
Freezing layer 'model.6.m.0.cv1.conv.weight'
Freezing layer 'model.6.m.0.cv1.bn.weight'
Freezing layer 'model.6.m.0.cv1.bn.bias'
Freezing layer 'model.6.m.0.cv2.conv.weight'
Freezing layer 'model.6.m.0.cv2.bn.weight'
Freezing layer 'model.6.m.0.cv2.bn.bias'
Freezing layer 'model.6.m.1.cv1.conv.weight'
Freezing layer 'model.6.m.1.cv1.bn.weight'
Freezing layer 'model.6.m.1.cv1.bn.bias'
Freezing layer 'model.6.m.1.cv2.conv.weight'
Freezing layer 'model.6.m.1.cv2.bn.weight'
Freezing layer 'model.6.m.1.cv2.bn.bias'
Freezing layer 'model.7.conv.weight'
Freezing layer 'model.7.bn.weight'
Freezing layer 'model.7.bn.bias'
Freezing layer 'model.8.cv1.conv.weight'
Freezing layer 'model.8.cv1.bn.weight'
Freezing layer 'model.8.cv1.bn.bias'
Freezing layer 'model.8.cv2.conv.weight'
Freezing layer 'model.8.cv2.bn.weight'
Freezing layer 'model.8.cv2.bn.bias'
Freezing layer 'model.8.m.0.cv1.conv.weight'
Freezing layer 'model.8.m.0.cv1.bn.weight'
Freezing layer 'model.8.m.0.cv1.bn.bias'
Freezing layer 'model.8.m.0.cv2.conv.weight'
Freezing layer 'model.8.m.0.cv2.bn.weight'
Freezing layer 'model.8.m.0.cv2.bn.bias'
Freezing layer 'model.9.cv1.conv.weight'
Freezing layer 'model.9.cv1.bn.weight'
Freezing layer 'model.9.cv1.bn.bias'
Freezing layer 'model.9.cv2.conv.weight'
Freezing layer 'model.9.cv2.bn.weight'
Freezing layer 'model.9.cv2.bn.bias'
Freezing layer 'model.12.cv1.conv.weight'
Freezing layer 'model.12.cv1.bn.weight'
Freezing layer 'model.12.cv1.bn.bias'
Freezing layer 'model.12.cv2.conv.weight'
Freezing layer 'model.12.cv2.bn.weight'
Freezing layer 'model.12.cv2.bn.bias'
Freezing layer 'model.12.m.0.cv1.conv.weight'
Freezing layer 'model.12.m.0.cv1.bn.weight'
Freezing layer 'model.12.m.0.cv1.bn.bias'
Freezing layer 'model.12.m.0.cv2.conv.weight'
Freezing layer 'model.12.m.0.cv2.bn.weight'
Freezing layer 'model.12.m.0.cv2.bn.bias'
Freezing layer 'model.22.dfl.conv.weight'
C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\win64\python\Lib\site-packages\ultralytics\engine\trainer.py:268: FutureWarning: `torch.cuda.amp.GradScaler(args...)` is deprecated. Please use `torch.amp.GradScaler('cuda', args...)` instead.
  self.scaler = torch.cuda.amp.GradScaler(enabled=self.amp)

□[34m□[1mtrain: □[0mScanning C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\train\labels.cache... 1019 images, 136 backgrounds, 13 corrupt: 100%|##########| 1019/1019 [00:00<?, ?it/s]
□[34m□[1mtrain: □[0mScanning C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\train\labels.cache... 1019 images, 136 backgrounds, 13 corrupt: 100%|##########| 1019/1019 [00:00<?, ?it/s]
□[34m□[1mtrain: □[0mWARNING ⚠️ C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\train\images\0510fe79-68bd-4b4a-951f-dab86920adeb.png: ignoring corrupt image/label: negative label values [  -0.047368]
□[34m□[1mtrain: □[0mWARNING ⚠️ C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\train\images\0eaaca45-2f14-4cef-87e4-25c02c6bf3b2.png: ignoring corrupt image/label: negative label values [  -0.018722]
□[34m□[1mtrain: □[0mWARNING ⚠️ C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\train\images\15aef5fc-3df2-4f0e-8dd8-95ea8c730407.png: ignoring corrupt image/label: negative label values [  -0.022958]
□[34m□[1mtrain: □[0mWARNING ⚠️ C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\train\images\175a13d3-1a18-428a-a577-48807a5871fe.png: ignoring corrupt image/label: negative label values [  -0.083108]
□[34m□[1mtrain: □[0mWARNING ⚠️ C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\train\images\23232dd4-2cb4-4229-b335-98862a76323a.png: ignoring corrupt image/label: negative label values [  -0.049029]
□[34m□[1mtrain: □[0mWARNING ⚠️ C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\train\images\3d14a064-5447-4257-a19d-ab909a56da01.png: ignoring corrupt image/label: negative label values [  -0.016604]
□[34m□[1mtrain: □[0mWARNING ⚠️ C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\train\images\55c845f7-6a6e-4b05-9ad6-c50cb78e9874.png: ignoring corrupt image/label: negative label values [  -0.063713]
□[34m□[1mtrain: □[0mWARNING ⚠️ C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\train\images\757484cc-6ad5-4ad9-b03b-b0b4ce7ef7ee.png: ignoring corrupt image/label: negative label values [  -0.054816]
□[34m□[1mtrain: □[0mWARNING ⚠️ C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\train\images\7bbc8b1d-26fb-4268-8d72-6c10bdedce90.png: ignoring corrupt image/label: negative label values [  -0.046767]
□[34m□[1mtrain: □[0mWARNING ⚠️ C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\train\images\8b961909-3110-4bc8-b08f-f6bb6eee123a.png: ignoring corrupt image/label: negative label values [   -0.02139]
□[34m□[1mtrain: □[0mWARNING ⚠️ C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\train\images\d402070d-cb8b-4109-aea2-7b33f01cadad.png: ignoring corrupt image/label: negative label values [  -0.015335]
□[34m□[1mtrain: □[0mWARNING ⚠️ C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\train\images\f8891e69-28dd-4fc8-8a2e-4d1ad88145b8.png: ignoring corrupt image/label: negative label values [  -0.059821]
□[34m□[1mtrain: □[0mWARNING ⚠️ C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\train\images\fef31132-3b8d-48f2-9493-1e522dde091c.png: ignoring corrupt image/label: negative label values [  -0.075973]
C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\win64\python\Lib\site-packages\torch\utils\data\dataloader.py:665: UserWarning: 'pin_memory' argument is set as true but no accelerator is found, then device pinned memory won't be used.
  warnings.warn(warn_msg)

□[34m□[1mval: □[0mScanning C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\val\labels.cache... 144 images, 0 backgrounds, 0 corrupt: 100%|##########| 144/144 [00:00<?, ?it/s]
□[34m□[1mval: □[0mScanning C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\val\labels.cache... 144 images, 0 backgrounds, 0 corrupt: 100%|##########| 144/144 [00:00<?, ?it/s]
Plotting labels to C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\runs\detect\first\labels.jpg... 
□[34m□[1moptimizer:□[0m 'optimizer=auto' found, ignoring 'lr0=0.01' and 'momentum=0.937' and determining best 'optimizer', 'lr0' and 'momentum' automatically... 
□[34m□[1moptimizer:□[0m AdamW(lr=0.001429, momentum=0.9) with parameter groups 57 weight(decay=0.0), 64 weight(decay=0.0005), 63 bias(decay=0.0)
□[34m□[1mTensorBoard: □[0mmodel graph visualization added ✅
Image sizes 256 train, 256 val
Using 0 dataloader workers
Logging results to □[1mC:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\runs\detect\first□[0m
Starting training for 1 epochs...

      Epoch    GPU_mem   box_loss   cls_loss   dfl_loss  Instances       Size

  0%|          | 0/63 [00:00<?, ?it/s]
        1/1         0G     0.9298      3.627     0.9719         69        256:   0%|          | 0/63 [00:01<?, ?it/s]
        1/1         0G     0.9298      3.627     0.9719         69        256:   2%|1         | 1/63 [00:01<01:51,  1.79s/it]
        1/1         0G     0.9627      3.689     0.9906         73        256:   2%|1         | 1/63 [00:04<01:51,  1.79s/it]
        1/1         0G     0.9627      3.689     0.9906         73        256:   3%|3         | 2/63 [00:04<02:13,  2.19s/it]
        1/1         0G     0.9275      3.788      1.002         58        256:   3%|3         | 2/63 [00:06<02:13,  2.19s/it]
        1/1         0G     0.9275      3.788      1.002         58        256:   5%|4         | 3/63 [00:06<02:13,  2.22s/it]
        1/1         0G     0.9068      3.739     0.9966         54        256:   5%|4         | 3/63 [00:09<02:13,  2.22s/it]
        1/1         0G     0.9068      3.739     0.9966         54        256:   6%|6         | 4/63 [00:09<02:21,  2.39s/it]
        1/1         0G     0.9173      3.631      1.002         57        256:   6%|6         | 4/63 [00:12<02:21,  2.39s/it]
        1/1         0G     0.9173      3.631      1.002         57        256:   8%|7         | 5/63 [00:12<02:29,  2.57s/it]
        1/1         0G     0.9202      3.549      1.009         67        256:   8%|7         | 5/63 [00:14<02:29,  2.57s/it]
        1/1         0G     0.9202      3.549      1.009         67        256:  10%|9         | 6/63 [00:14<02:23,  2.51s/it]
        1/1         0G     0.9254      3.444       1.02         66        256:  10%|9         | 6/63 [00:16<02:23,  2.51s/it]
        1/1         0G     0.9254      3.444       1.02         66        256:  11%|#1        | 7/63 [00:16<02:09,  2.31s/it]
        1/1         0G      0.923      3.352       1.02         73        256:  11%|#1        | 7/63 [00:18<02:09,  2.31s/it]
        1/1         0G      0.923      3.352       1.02         73        256:  13%|#2        | 8/63 [00:18<01:59,  2.16s/it]
        1/1         0G     0.9153      3.242      1.015         65        256:  13%|#2        | 8/63 [00:20<01:59,  2.16s/it]
        1/1         0G     0.9153      3.242      1.015         65        256:  14%|#4        | 9/63 [00:20<01:52,  2.08s/it]
        1/1         0G     0.9033      3.136       1.01         52        256:  14%|#4        | 9/63 [00:21<01:52,  2.08s/it]
        1/1         0G     0.9033      3.136       1.01         52        256:  16%|#5        | 10/63 [00:21<01:47,  2.02s/it]
        1/1         0G     0.9005      3.025      1.012         66        256:  16%|#5        | 10/63 [00:23<01:47,  2.02s/it]
        1/1         0G     0.9005      3.025      1.012         66        256:  17%|#7        | 11/63 [00:24<01:44,  2.02s/it]
        1/1         0G     0.8889      2.926      1.007         63        256:  17%|#7        | 11/63 [00:25<01:44,  2.02s/it]
        1/1         0G     0.8889      2.926      1.007         63        256:  19%|#9        | 12/63 [00:25<01:40,  1.97s/it]
        1/1         0G     0.8769      2.819      1.004         59        256:  19%|#9        | 12/63 [00:27<01:40,  1.97s/it]
        1/1         0G     0.8769      2.819      1.004         59        256:  21%|##        | 13/63 [00:27<01:36,  1.93s/it]
        1/1         0G     0.8719      2.757      1.003         40        256:  21%|##        | 13/63 [00:29<01:36,  1.93s/it]
        1/1         0G     0.8719      2.757      1.003         40        256:  22%|##2       | 14/63 [00:29<01:35,  1.96s/it]
        1/1         0G     0.8685      2.685      1.003         84        256:  22%|##2       | 14/63 [00:31<01:35,  1.96s/it]
        1/1         0G     0.8685      2.685      1.003         84        256:  24%|##3       | 15/63 [00:31<01:34,  1.97s/it]
        1/1         0G       0.86      2.605     0.9977         76        256:  24%|##3       | 15/63 [00:33<01:34,  1.97s/it]
        1/1         0G       0.86      2.605     0.9977         76        256:  25%|##5       | 16/63 [00:33<01:31,  1.94s/it]
        1/1         0G     0.8428      2.519     0.9916         64        256:  25%|##5       | 16/63 [00:35<01:31,  1.94s/it]
        1/1         0G     0.8428      2.519     0.9916         64        256:  27%|##6       | 17/63 [00:35<01:27,  1.91s/it]
        1/1         0G     0.8388      2.441      0.992         55        256:  27%|##6       | 17/63 [00:37<01:27,  1.91s/it]
        1/1         0G     0.8388      2.441      0.992         55        256:  29%|##8       | 18/63 [00:37<01:24,  1.88s/it]
        1/1         0G       0.84      2.373     0.9888         79        256:  29%|##8       | 18/63 [00:39<01:24,  1.88s/it]
        1/1         0G       0.84      2.373     0.9888         79        256:  30%|###       | 19/63 [00:39<01:21,  1.85s/it]
        1/1         0G      0.835       2.31     0.9859         53        256:  30%|###       | 19/63 [00:40<01:21,  1.85s/it]
        1/1         0G      0.835       2.31     0.9859         53        256:  32%|###1      | 20/63 [00:40<01:19,  1.84s/it]
        1/1         0G     0.8379      2.257     0.9843         93        256:  32%|###1      | 20/63 [00:42<01:19,  1.84s/it]
        1/1         0G     0.8379      2.257     0.9843         93        256:  33%|###3      | 21/63 [00:42<01:17,  1.84s/it]
        1/1         0G     0.8338      2.203     0.9858         67        256:  33%|###3      | 21/63 [00:44<01:17,  1.84s/it]
        1/1         0G     0.8338      2.203     0.9858         67        256:  35%|###4      | 22/63 [00:44<01:14,  1.83s/it]
        1/1         0G     0.8331      2.148     0.9844         68        256:  35%|###4      | 22/63 [00:46<01:14,  1.83s/it]
        1/1         0G     0.8331      2.148     0.9844         68        256:  37%|###6      | 23/63 [00:46<01:13,  1.83s/it]
        1/1         0G     0.8254      2.099     0.9816         49        256:  37%|###6      | 23/63 [00:48<01:13,  1.83s/it]
        1/1         0G     0.8254      2.099     0.9816         49        256:  38%|###8      | 24/63 [00:48<01:10,  1.82s/it]
        1/1         0G     0.8228      2.055     0.9807         74        256:  38%|###8      | 24/63 [00:49<01:10,  1.82s/it]
        1/1         0G     0.8228      2.055     0.9807         74        256:  40%|###9      | 25/63 [00:49<01:09,  1.82s/it]
        1/1         0G     0.8168       2.01      0.977         68        256:  40%|###9      | 25/63 [00:51<01:09,  1.82s/it]
        1/1         0G     0.8168       2.01      0.977         68        256:  41%|####1     | 26/63 [00:51<01:05,  1.77s/it]
        1/1         0G     0.8111      1.967     0.9749         82        256:  41%|####1     | 26/63 [00:53<01:05,  1.77s/it]
        1/1         0G     0.8111      1.967     0.9749         82        256:  43%|####2     | 27/63 [00:53<01:02,  1.74s/it]
        1/1         0G     0.8055      1.927     0.9738         76        256:  43%|####2     | 27/63 [00:54<01:02,  1.74s/it]
        1/1         0G     0.8055      1.927     0.9738         76        256:  44%|####4     | 28/63 [00:54<01:00,  1.72s/it]
        1/1         0G     0.8027      1.896     0.9747         55        256:  44%|####4     | 28/63 [00:56<01:00,  1.72s/it]
        1/1         0G     0.8027      1.896     0.9747         55        256:  46%|####6     | 29/63 [00:56<00:58,  1.72s/it]
        1/1         0G        0.8      1.864     0.9742         72        256:  46%|####6     | 29/63 [00:58<00:58,  1.72s/it]
        1/1         0G        0.8      1.864     0.9742         72        256:  48%|####7     | 30/63 [00:58<00:56,  1.72s/it]
        1/1         0G     0.7944      1.829     0.9732         56        256:  48%|####7     | 30/63 [01:00<00:56,  1.72s/it]
        1/1         0G     0.7944      1.829     0.9732         56        256:  49%|####9     | 31/63 [01:00<00:55,  1.73s/it]
        1/1         0G     0.7917      1.795     0.9737         64        256:  49%|####9     | 31/63 [01:02<00:55,  1.73s/it]
        1/1         0G     0.7917      1.795     0.9737         64        256:  51%|#####     | 32/63 [01:02<00:58,  1.90s/it]
        1/1         0G     0.7873      1.764     0.9697         69        256:  51%|#####     | 32/63 [01:04<00:58,  1.90s/it]
        1/1         0G     0.7873      1.764     0.9697         69        256:  52%|#####2    | 33/63 [01:04<01:01,  2.04s/it]
        1/1         0G      0.787      1.738     0.9682         52        256:  52%|#####2    | 33/63 [01:06<01:01,  2.04s/it]
        1/1         0G      0.787      1.738     0.9682         52        256:  54%|#####3    | 34/63 [01:06<00:59,  2.04s/it]
        1/1         0G     0.7849      1.713     0.9681         63        256:  54%|#####3    | 34/63 [01:08<00:59,  2.04s/it]
        1/1         0G     0.7849      1.713     0.9681         63        256:  56%|#####5    | 35/63 [01:08<00:52,  1.88s/it]
        1/1         0G     0.7815      1.692      0.967         71        256:  56%|#####5    | 35/63 [01:10<00:52,  1.88s/it]
        1/1         0G     0.7815      1.692      0.967         71        256:  57%|#####7    | 36/63 [01:10<00:50,  1.86s/it]
        1/1         0G     0.7792      1.668      0.966         77        256:  57%|#####7    | 36/63 [01:11<00:50,  1.86s/it]
        1/1         0G     0.7792      1.668      0.966         77        256:  59%|#####8    | 37/63 [01:11<00:45,  1.74s/it]
        1/1         0G     0.7767      1.641     0.9655         55        256:  59%|#####8    | 37/63 [01:13<00:45,  1.74s/it]
        1/1         0G     0.7767      1.641     0.9655         55        256:  60%|######    | 38/63 [01:13<00:42,  1.69s/it]
        1/1         0G     0.7738      1.619     0.9645         59        256:  60%|######    | 38/63 [01:14<00:42,  1.69s/it]
        1/1         0G     0.7738      1.619     0.9645         59        256:  62%|######1   | 39/63 [01:14<00:40,  1.68s/it]
        1/1         0G     0.7722      1.597     0.9632         79        256:  62%|######1   | 39/63 [01:16<00:40,  1.68s/it]
        1/1         0G     0.7722      1.597     0.9632         79        256:  63%|######3   | 40/63 [01:16<00:41,  1.81s/it]
        1/1         0G     0.7683      1.577     0.9616         80        256:  63%|######3   | 40/63 [01:18<00:41,  1.81s/it]
        1/1         0G     0.7683      1.577     0.9616         80        256:  65%|######5   | 41/63 [01:18<00:39,  1.78s/it]
        1/1         0G     0.7645      1.554     0.9601         59        256:  65%|######5   | 41/63 [01:20<00:39,  1.78s/it]
        1/1         0G     0.7645      1.554     0.9601         59        256:  67%|######6   | 42/63 [01:20<00:36,  1.72s/it]
        1/1         0G     0.7644      1.541     0.9603         42        256:  67%|######6   | 42/63 [01:21<00:36,  1.72s/it]
        1/1         0G     0.7644      1.541     0.9603         42        256:  68%|######8   | 43/63 [01:21<00:34,  1.72s/it]
        1/1         0G     0.7588      1.523     0.9583         59        256:  68%|######8   | 43/63 [01:24<00:34,  1.72s/it]
        1/1         0G     0.7588      1.523     0.9583         59        256:  70%|######9   | 44/63 [01:24<00:36,  1.93s/it]
        1/1         0G     0.7553      1.506      0.956         58        256:  70%|######9   | 44/63 [01:27<00:36,  1.93s/it]
        1/1         0G     0.7553      1.506      0.956         58        256:  71%|#######1  | 45/63 [01:27<00:41,  2.31s/it]
        1/1         0G     0.7536      1.489      0.955         48        256:  71%|#######1  | 45/63 [01:30<00:41,  2.31s/it]
        1/1         0G     0.7536      1.489      0.955         48        256:  73%|#######3  | 46/63 [01:30<00:42,  2.51s/it]
        1/1         0G     0.7496      1.472     0.9532         58        256:  73%|#######3  | 46/63 [01:32<00:42,  2.51s/it]
        1/1         0G     0.7496      1.472     0.9532         58        256:  75%|#######4  | 47/63 [01:32<00:38,  2.38s/it]
        1/1         0G     0.7499      1.458     0.9536         60        256:  75%|#######4  | 47/63 [01:34<00:38,  2.38s/it]
        1/1         0G     0.7499      1.458     0.9536         60        256:  76%|#######6  | 48/63 [01:34<00:34,  2.28s/it]
        1/1         0G     0.7497      1.442     0.9519         60        256:  76%|#######6  | 48/63 [01:36<00:34,  2.28s/it]
        1/1         0G     0.7497      1.442     0.9519         60        256:  78%|#######7  | 49/63 [01:36<00:31,  2.24s/it]
        1/1         0G     0.7487      1.431     0.9503         57        256:  78%|#######7  | 49/63 [01:38<00:31,  2.24s/it]
        1/1         0G     0.7487      1.431     0.9503         57        256:  79%|#######9  | 50/63 [01:38<00:28,  2.19s/it]
        1/1         0G     0.7491      1.417     0.9517         49        256:  79%|#######9  | 50/63 [01:40<00:28,  2.19s/it]
        1/1         0G     0.7491      1.417     0.9517         49        256:  81%|########  | 51/63 [01:40<00:25,  2.11s/it]
        1/1         0G     0.7476      1.407     0.9512         62        256:  81%|########  | 51/63 [01:42<00:25,  2.11s/it]
        1/1         0G     0.7476      1.407     0.9512         62        256:  83%|########2 | 52/63 [01:42<00:23,  2.09s/it]
        1/1         0G     0.7443      1.391     0.9499         54        256:  83%|########2 | 52/63 [01:44<00:23,  2.09s/it]
        1/1         0G     0.7443      1.391     0.9499         54        256:  84%|########4 | 53/63 [01:44<00:20,  2.04s/it]
        1/1         0G     0.7434      1.377     0.9505         65        256:  84%|########4 | 53/63 [01:46<00:20,  2.04s/it]
        1/1         0G     0.7434      1.377     0.9505         65        256:  86%|########5 | 54/63 [01:46<00:18,  2.07s/it]
        1/1         0G     0.7416      1.365     0.9503         60        256:  86%|########5 | 54/63 [01:49<00:18,  2.07s/it]
        1/1         0G     0.7416      1.365     0.9503         60        256:  87%|########7 | 55/63 [01:49<00:16,  2.07s/it]
        1/1         0G     0.7406      1.354     0.9508         61        256:  87%|########7 | 55/63 [01:51<00:16,  2.07s/it]
        1/1         0G     0.7406      1.354     0.9508         61        256:  89%|########8 | 56/63 [01:51<00:14,  2.11s/it]
        1/1         0G     0.7386      1.341     0.9497         66        256:  89%|########8 | 56/63 [01:53<00:14,  2.11s/it]
        1/1         0G     0.7386      1.341     0.9497         66        256:  90%|######### | 57/63 [01:53<00:12,  2.07s/it]
        1/1         0G      0.737       1.33     0.9496         57        256:  90%|######### | 57/63 [01:55<00:12,  2.07s/it]
        1/1         0G      0.737       1.33     0.9496         57        256:  92%|#########2| 58/63 [01:55<00:10,  2.09s/it]
        1/1         0G     0.7359       1.32     0.9494         79        256:  92%|#########2| 58/63 [01:57<00:10,  2.09s/it]
        1/1         0G     0.7359       1.32     0.9494         79        256:  94%|#########3| 59/63 [01:57<00:08,  2.08s/it]
        1/1         0G     0.7359      1.309     0.9487         83        256:  94%|#########3| 59/63 [01:59<00:08,  2.08s/it]
        1/1         0G     0.7359      1.309     0.9487         83        256:  95%|#########5| 60/63 [01:59<00:06,  2.19s/it]
        1/1         0G     0.7341        1.3     0.9478         76        256:  95%|#########5| 60/63 [02:01<00:06,  2.19s/it]
        1/1         0G     0.7341        1.3     0.9478         76        256:  97%|#########6| 61/63 [02:01<00:04,  2.18s/it]
        1/1         0G      0.732      1.288     0.9469         64        256:  97%|#########6| 61/63 [02:04<00:04,  2.18s/it]
        1/1         0G      0.732      1.288     0.9469         64        256:  98%|#########8| 62/63 [02:04<00:02,  2.20s/it]
        1/1         0G     0.7312      1.277      0.946         70        256:  98%|#########8| 62/63 [02:06<00:02,  2.20s/it]
        1/1         0G     0.7312      1.277      0.946         70        256: 100%|##########| 63/63 [02:06<00:00,  2.12s/it]
        1/1         0G     0.7312      1.277      0.946         70        256: 100%|##########| 63/63 [02:06<00:00,  2.00s/it]

                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95):   0%|          | 0/5 [00:00<?, ?it/s]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95):  20%|##        | 1/5 [00:03<00:14,  3.68s/it]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95):  40%|####      | 2/5 [00:06<00:09,  3.17s/it]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95):  60%|######    | 3/5 [00:09<00:06,  3.04s/it]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95):  80%|########  | 4/5 [00:12<00:02,  2.98s/it]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|##########| 5/5 [00:13<00:00,  2.40s/it]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|##########| 5/5 [00:13<00:00,  2.73s/it]
                   all        144        426      0.856      0.824      0.905      0.722

1 epochs completed in 0.041 hours.
Optimizer stripped from C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\runs\detect\first\weights\last.pt, 22.5MB
Optimizer stripped from C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\runs\detect\first\weights\best.pt, 22.5MB

Validating C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\runs\detect\first\weights\best.pt...
Ultralytics YOLOv8.2.66  Python-3.11.5 torch-2.7.0+cpu CPU (11th Gen Intel Core(TM) i5-1135G7 2.40GHz)
YOLOv8s summary (fused): 168 layers, 11,126,745 parameters, 0 gradients, 28.4 GFLOPs

                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95):   0%|          | 0/5 [00:00<?, ?it/s]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95):  20%|##        | 1/5 [00:02<00:09,  2.27s/it]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95):  40%|####      | 2/5 [00:04<00:06,  2.22s/it]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95):  60%|######    | 3/5 [00:06<00:04,  2.27s/it]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95):  80%|########  | 4/5 [00:08<00:02,  2.20s/it]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|##########| 5/5 [00:10<00:00,  1.82s/it]
                 Class     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|##########| 5/5 [00:10<00:00,  2.01s/it]
                   all        144        426      0.856      0.823      0.905      0.722
                 apple         69        153      0.792      0.944      0.933      0.829
                orange         51         84      0.947      0.833      0.948      0.777
                  pear         72        189      0.829      0.692      0.834      0.561
Speed: 0.5ms preprocess, 58.1ms inference, 0.0ms loss, 1.0ms postprocess per image
Results saved to □[1mC:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\runs\detect\first□[0m
Ultralytics YOLOv8.2.66  Python-3.11.5 torch-2.7.0+cpu CPU (11th Gen Intel Core(TM) i5-1135G7 2.40GHz)
YOLOv8s summary (fused): 168 layers, 11,126,745 parameters, 0 gradients, 28.4 GFLOPs

□[34m□[1mPyTorch:□[0m starting from 'C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\runs\detect\first\weights\best.pt' with input shape (1, 3, 256, 256) BCHW and output shape(s) (1, 7, 1344) (21.4 MB)

□[34m□[1mONNX:□[0m starting export with onnx 1.16.1 opset 14...
□[34m□[1mONNX:□[0m export success ✅ 1.2s, saved as 'C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\runs\detect\first\weights\best.onnx' (42.5 MB)

Export complete (3.3s)
Results saved to □[1mC:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\runs\detect\first\weights□[0m
Predict:         yolo predict task=detect model=C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\runs\detect\first\weights\best.onnx imgsz=256  
Validate:        yolo val task=detect model=C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\runs\detect\first\weights\best.onnx imgsz=256 data=C:\Users\Noel Nathan\Desktop\Universidad\8tQuadrimestre\tfg\from-code-to-robot\computer_vision\datasets\fruits_3_4998\data.yaml  
Visualize:       https://netron.app

Continuar un entrenamiento

Si el proceso de entrenamiento se interrumpe por cualquier motivo, puede reanudarse usando la opción resume. Esta funcionalidad carga los pesos del último modelo guardado y también restaura el estado del optimizador, el planificador de tasa de aprendizaje y el número de época. Esto permite continuar el proceso de entrenamiento sin interrupciones desde el punto donde se dejó.

model_folder = fullfile(pwd, 'runs', 'detect', 'train3', 'weights', 'best.pt');
yolov8Det = trainYOLOv8ObjectDetector( ...
    configFile, ...
    model_folder, ...
    options, ...
    'resume', true ...                    
);

Para más detalles, consulta la sección Resume Training en la documentación oficial.

Reentrenar un modelo

Alternativamente, puedes continuar entrenando un modelo ya entrenado usándolo como punto de partida en lugar de un modelo base como yolov8n.pt o yolov8s.pt. En este caso, simplemente cargas los pesos del modelo previamente entrenado.

Sin embargo, a diferencia de la opción resume, este enfoque no restaura el estado del optimizador, el plan de tasa de aprendizaje ni el número de época. Estos parámetros se reinician, y el entrenamiento empieza desde la época 1 con las opciones de entrenamiento actuales.

Este método es útil cuando quieres ajustar finamente un modelo más adelante o adaptarlo a un nuevo dataset, pero sin continuar exactamente desde donde terminó el entrenamiento anterior.

model_folder = fullfile(pwd, 'runs', 'detect', 'train1', 'weights', 'best.pt');
yolov8Det = trainYOLOv8ObjectDetector( ...
    configFile, ...
    baseModel, ...
    options
    optionalArgs{:});

Cargar un modelo

Al entrenar un modelo YOLO, los pesos entrenados normalmente se guardan en el directorio runs/detect/train@/weights, donde @ es un contador incremental (por ejemplo, train1, train2, etc.) para evitar sobrescribir ejecuciones anteriores.

Si esta carpeta no se crea, es probable que la configuración de YOLO no se haya configurado correctamente durante el paso 1. Instalación.md. Para resolverlo, vuelve a ejecutar esa sección y asegúrate de que todo esté correctamente configurado.

Dentro de la carpeta weights, encontrarás varios archivos de modelo, incluidos last.pt, best.pt y best.onnx. La función utils.loadModel siempre carga el modelo best.onnx desde la carpeta seleccionada.

Por lo tanto, en el siguiente código debes cargar el modelo desde la primera ejecución de entrenamiento:

modelPath = fullfile(pwd, 'runs', 'detect', 'first', 'weights');
configFile = fullfile(pwd, 'datasets', 'fruits_3_4998', 'data.yaml');

yolov8Det = utils.loadModel(modelPath, configFile);

Predicción

En esta sección, usamos el modelo que entrenamos anteriormente para detectar frutas en las siguientes imágenes.

utils.detectAndDisplayImage(yolov8Det, 'pear.jpg'); 

figure_0.png

utils.detectAndDisplayImage(yolov8Det, 'apple.jpg');

figure_1.png

utils.detectAndDisplayImage(yolov8Det, 'orange.jpg');

figure_2.png

Como se observa en los resultados, el modelo produce un número excesivo de detecciones, lo que genera una salida con baja precisión.

Analizaremos este tema en detalle en la siguiente lección.