YOLOv7

YOLOv7 es un detector de una sola etapa basado en anchors cuya cabeza añade offsets de conocimiento implícito aprendidos antes de la convolución final. LibreYOLO incluye su único tamaño publicado para detección.

Tareas
detection
Tamaños
b at 640 px
Instalación
pip install libreyolo
Nivel de compatibilidad
Compatible, desde v. Modelos entrenables de apoyo: se mantienen operativos en CI y reciben funciones cuando surge la oportunidad.
Proyecto original
YOLOv7 de MultimediaTechLab, MIT. Artículo, fuente
Licencias
Código MIT, pesos MIT. Uso comercial

Instalación

YOLOv7 no necesita ningún extra más allá del paquete base.

bash
pip install libreyolo

Predicción

Los pesos se descargan de Hugging Face en el primer uso y se guardan en la caché local.

Python
from libreyolo import LibreYOLO, SAMPLE_IMAGE model = LibreYOLO("LibreYOLO7b.pt")result = model(SAMPLE_IMAGE, save=True) for box in result.boxes:    print(box.cls, box.conf, box.xyxy)
CLI
libreyolo predict model=LibreYOLO7b.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=True

El objeto Results devuelto es el mismo que devuelve cada familia, así que cambiar a otro detector es un cambio de una línea. conf fija el umbral de confianza e iou el umbral de NMS que se aplica después de decodificar la cabeza basada en anchors. Consulta predicción para fuentes, streaming y manejo de resultados.

Variantes

LibreYOLO incluye un único tamaño, b. Upstream publica un solo modelo YOLOv7, así que no hay tamaño entre el que elegir.

Entrenamiento

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)
CLI
libreyolo train model=LibreYOLO7b.pt data=my-dataset.yaml \  epochs=300 imgsz=640 batch=16 lr0=0.01
Arranque en caliente desde un modelo nuevo
from libreyolo import LibreYOLO7 # pretrained=True siempre carga el checkpoint publicado LibreYOLO7b.pt,# sin importar con qué se construyó esta instancia. Construir la clase# directamente, en lugar de a través de LibreYOLO(), arranca sin ningún# peso cargado.model = LibreYOLO7(None, size="b")model.train(data="my-dataset.yaml", epochs=300, pretrained=True)

pretrained sí se lee, a diferencia del argumento del mismo nombre que no hace nada en algunas otras familias de aquí: pasa True para arrancar en caliente desde el checkpoint publicado LibreYOLO7b.pt (se descarga solo), o una ruta o un nombre para cualquier otra cosa. Ese checkpoint publicado es COCO de 80 clases, así que pedirlo sobre un modelo ya reconstruido para otro número de clases primero lo reconstruye de vuelta a 80, lo carga y después transfiere cada tensor cuya forma coincide al número de clases de la cabeza de destino en cuanto se lee el número de clases del dataset. resume=True no se puede combinar con pretrained. Si se deja en el valor por defecto None, el entrenamiento continúa desde aquello con lo que se construyó el modelo, o desde una inicialización aleatoria si no se cargó nada.

Si no se toca nada más, el trainer ejecuta 300 épocas con lr0=0.01, SGD con momentum 0.937, un warmup de 3 épocas, y la misma asignación SimOTA y la misma fase final de 15 épocas sin aumento de datos que usa YOLOX, adaptadas a la cabeza basada en anchors. La única diferencia: YOLOX añade durante esas épocas finales un refinamiento L1 de la regresión de boxes que v7 se salta, porque la función de pérdida SimOTA de v7 no lleva una rama L1 de offsets crudos que refinar.

Consulta entrenamiento para datasets, aumento de datos, multi-GPU y loggers.

Validación

val() devuelve un diccionario de claves metrics/ que cubren precisión, recall, mAP 50 y mAP 50-95, medidas contra cualquier dataset en el formato con el que entrenaste.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])
CLI
libreyolo val model=LibreYOLO7b.pt data=my-dataset.yaml

Exportación

TareaONNXTorchScriptExecuTorchTensorRTOpenVINOPaddleMNNRKNNncnnTFLiteCoreMLCore AI
DetectionDetection to ONNX: compatibleDetection to TorchScript: compatibleDetection to ExecuTorch: compatibleDetection to TensorRT: compatibleDetection to OpenVINO: compatibleDetection to Paddle: no compatibleDetection to MNN: no compatibleDetection to RKNN: no compatibleDetection to ncnn: compatibleDetection to TFLite: no compatibleDetection to CoreML: no compatibleDetection to Core AI: compatible

Un artefacto exportado se vuelve a cargar a través de LibreYOLO() por su sufijo de archivo, así que un archivo .onnx o .engine se comporta como un checkpoint y devuelve el mismo Results. Ejecutar el grafo en un runtime desnudo, sin LibreYOLO instalado, también está soportado, pero entonces el preprocesamiento y el postprocesamiento corren de tu cuenta.

Python
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)
CLI
libreyolo export model=LibreYOLO7b.pt format=onnx imgsz=640libreyolo export model=LibreYOLO7b.pt format=tensorrt imgsz=640 half=True
Usar el archivo exportado
from libreyolo import LibreYOLO, SAMPLE_IMAGE # La factoría enruta según el sufijo del archivo, así que un artefacto# exportado se carga como cualquier checkpoint y devuelve el mismo objeto Results.model = LibreYOLO("LibreYOLO7b.onnx")result = model(SAMPLE_IMAGE) print(result.boxes.xyxy)

Checkpoints

Todos los archivos de pesos publicados de esta familia.

ArchivoEntrada (px)Licencia de los pesos
Detection
LibreYOLO7b.pt640mit

Todos los archivos anteriores existen hoy en la organización de LibreYOLO y se descargan la primera vez que se usan.

Licencia

Comprueba la licencia en el repositorio de Hugging Face de los pesos concretos que descargues. Cada checkpoint de la organización de LibreYOLO incluye una, y no siempre es la misma en toda una familia. Ese repositorio es la fuente autorizada; el resumen siguiente describe qué se aplicaba cuando se verificó esta página por última vez.

Esta es una descripción de las licencias implicadas, no asesoramiento legal. Si la respuesta es importante a nivel comercial, lee las licencias y busca tu propio asesoramiento.

Trabajo original
YOLOv7, MultimediaTechLab
Licencia del proyecto original
MIT
Fuente del proyecto original
github.com/MultimediaTechLab/YOLO
Código de LibreYOLO
MIT
Pesos
MIT, republicados en huggingface.co/LibreYOLO
Interpretación
MIT is a permissive license, so these weights can be used in commercial and closed-source products. The one standing obligation is to keep the license text and the copyright notice, Kin-Yiu Wong and Hao-Tang Tsui, with any copy you redistribute. It places no condition on your own application code, and a model you train yourself on your own data is yours. The port follows the authors' MIT re-release of YOLOv7, not the GPL-3.0 WongKinYiu/yolov7 repository that carries the same model, so the permissive terms come from the source LibreYOLO actually derives from.

Cita

@inproceedings{wang2022yolov7,
      title={{YOLOv7}: Trainable Bag-of-Freebies Sets New State-of-the-Art for Real-Time Object Detectors},
      author={Wang, Chien-Yao and Bochkovskiy, Alexey and Liao, Hong-Yuan Mark},
      year={2023},
      booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
}

Copiado del bloque de cita de los autores en github.com/MultimediaTechLab/YOLO#citations.

Verificado con LibreYOLO v1.5.0. Las tablas de compatibilidad, los checkpoints y las cifras de rendimiento de esta página se generan a partir de la biblioteca publicada y los pesos publicados; no se escriben a mano.