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.
- Licencias
- Código MIT, pesos MIT. Uso comercial
Instalación
YOLOv7 no necesita ningún extra más allá del paquete base.
pip install libreyoloPredicción
Los pesos se descargan de Hugging Face en el primer uso y se guardan en la caché local.
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)libreyolo predict model=LibreYOLO7b.pt source=https://raw.githubusercontent.com/LibreYOLO/libreyolo/release/libreyolo/assets/parkour.jpg save=TrueEl 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
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.train(data="my-dataset.yaml", epochs=300, imgsz=640, batch=16, lr0=0.01)libreyolo train model=LibreYOLO7b.pt data=my-dataset.yaml \ epochs=300 imgsz=640 batch=16 lr0=0.01from 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")metrics = model.val(data="my-dataset.yaml") print(metrics["metrics/mAP50-95"])print(metrics["metrics/mAP50"])libreyolo val model=LibreYOLO7b.pt data=my-dataset.yamlExportación
| Tarea | ONNX | TorchScript | ExecuTorch | TensorRT | OpenVINO | Paddle | MNN | RKNN | ncnn | TFLite | CoreML | Core AI |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Detection | Detection to ONNX: compatible | Detection to TorchScript: compatible | Detection to ExecuTorch: compatible | Detection to TensorRT: compatible | Detection to OpenVINO: compatible | Detection to Paddle: no compatible | Detection to MNN: no compatible | Detection to RKNN: no compatible | Detection to ncnn: compatible | Detection to TFLite: no compatible | Detection to CoreML: no compatible | Detection 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.
from libreyolo import LibreYOLO model = LibreYOLO("LibreYOLO7b.pt")model.export(format="onnx", imgsz=640)model.export(format="tensorrt", imgsz=640, half=True)libreyolo export model=LibreYOLO7b.pt format=onnx imgsz=640libreyolo export model=LibreYOLO7b.pt format=tensorrt imgsz=640 half=Truefrom 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.
| Archivo | Entrada (px) | Licencia de los pesos |
|---|---|---|
| Detection | ||
| LibreYOLO7b.pt | 640 | mit |
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.