En términos de pruebas objetivo, los algoritmos YOLO y SSD son más populares. Este artículo registra cómo usar YOLO-V5 para la detección de objetivos. Debido a que la longitud total es muy larga, se divide en dos capítulos. Este artículo es la primera parte. Registra cómo ejecutar el código Yolo-V5 y realizar capacitación y probar el conjunto de datos COCO128. La siguiente parte registrará cómo marcar los datos y capacitar a su conjunto de datos.
Directorio de artículos
- 1. Introducción
- 2. Modelo de Yolo
- 3. Entorno de configuración
- 4. Prueba simple
- 5. Descargue el conjunto de datos COCO128
- 6. Empiece a entrenar
- 7. Visualización de evaluación del modelo
- 8. Sube la imagen para las pruebas
- 9. Materiales de referencia
Yolo se llama solo mira una vez (solo necesitas verlo una vez). Al procesar imágenes de redes neuronales convolucionales, el núcleo de la convolución debe ser escaneado por la imagen, mientras que Yolo divide una imagen en innumerables cuadrados para determinar la posibilidad del objetivo de cada cuadrado por la máquina. La teoría específica es más complicada. Si desea comprender el principio, recomiendo ver los dos videos a continuación.
El primero es el algoritmo Yolo explicado por Wu Enda (Portal)
El segundo es el algoritmo Yolo-V3 más claro de la estación B (Portal)
La versión V en Yolo IS, que representa la versión. Los fundadores de Yolo se han actualizado de V1 a V3, mientras que V4 y V5 están escritos por otro autor. V3 Versión.
Yolo-V5 tiene un total de cuatro modelos de pre-entrenamiento, V5S, V5M, V5L, V5X, S es pequeño, M es medio, L es grande. Por ejemplo, como modelo previo al entrenamiento.
El rendimiento específico de los cuatro modelos se muestra a continuación:
Mi entorno de computadora:
Configuración de hardware: GPU2060, 32 g de memoria;
Configuración del software: Ventana 10, IDE: Pycharm 2020, Python: 3.8, Versión de PytorchGPU
Use Git Bash para descargar el código fuente YOLOV5:
git clone https://github.com/ultralytics/yolov5
O también puede copiar la conexión para descargar el archivo zip
Después de cerrar el código fuente de Yolov5, hay un archivo requisitos.txt, que enumera algunos de los archivos de la biblioteca que deben instalarse
requirements.txt
# base ----------------------------------------matplotlib>=3.2.2numpy>=1.18.5opencv-python>=4.1.2PillowPyYAML>=5.3.1scipy>=1.4.1torch>=1.7.0torchvision>=0.8.1tqdm>=4.41.0# logging -------------------------------------tensorboard>=2.4.1# wandb# plotting ------------------------------------seaborn>=0.11.0pandas# export --------------------------------------# coremltools>=4.1# onnx>=1.9.0# scikit-learn==0.19.2 # for coreml quantization
Se puede ejecutar directamente en la terminal
pip install -r requirements.txt
El sistema lo ayudará a instalar todas las necesidades, pero algunas bibliotecas son relativamente grandes, es fácil instalar errores y se recomienda instalar instalación manual.
Después de completar la descarga, la composición del archivo se muestra en la figura a continuación:
El último yolov5s.pt es un archivo de peso modelo y debe descargarse adicional.
(Puede responder "yolo" en la cuenta pública de WeChat "Tengo un plan" y obtener el enlace de descarga de todos los archivos)
Después de configurar el entorno, puede iniciar una prueba simple.
El archivo de datos/imágenes proporciona dos imágenes predeterminadas de dos pruebas
Abrimos el archivo Detect.py y vemos la función principal
if __name__ == '__main__': parser = argparse.ArgumentParser() parser.add_argument('--weights', nargs='+', type=str, default='yolov5s.pt', help='model.pt path(s)') parser.add_argument('--source', type=str, default='data/images', help='source') # file/folder, 0 for webcam parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)') parser.add_argument('--conf-thres', type=float, default=0.25, help='object confidence threshold') parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS') parser.add_argument('--max-det', type=int, default=1000, help='maximum number of detections per image') parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu') parser.add_argument('--view-img', action='store_true', help='display results') parser.add_argument('--save-txt', action='store_true', help='save results to *.txt') parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels') parser.add_argument('--save-crop', action='store_true', help='save cropped prediction boxes') parser.add_argument('--nosave', action='store_true', help='do not save images/videos') parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --class 0, or --class 0 2 3') parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS') parser.add_argument('--augment', action='store_true', help='augmented inference') parser.add_argument('--update', action='store_true', help='update all models') parser.add_argument('--project', default='runs/detect', help='save results to project/name') parser.add_argument('--name', default='exp', help='save results to project/name') parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment') parser.add_argument('--line-thickness', default=3, type=int, help='bounding box thickness (pixels)') parser.add_argument('--hide-labels', default=False, action='store_true', help='hide labels') parser.add_argument('--hide-conf', default=False, action='store_true', help='hide confidences') opt = parser.parse_args()
Se encuentra que es realizado por líneas de comando analizadores, y el valor predeterminado en cada elemento es el valor predeterminado.
Al ver el contenido de - Souce, eligió la carpeta de imágenes, es decir, para probar todos los contenidos en la carpeta.
Ejecute el Detect.py, puede encontrar que hay dos imágenes más en la carpeta Runs/Detect/Exp, estos dos son los resultados de detección
Se puede ver que el efecto sigue siendo muy obvio.
El conjunto de datos de Coco es un conjunto de datos de 80 clases. Su contenido incluye cosas comunes en la vida, como aviones, trenes y automóviles. COCO128 son 128 imágenes en Coco.
En la carpeta Scripts descargada, hay un archivo de configuración con Coco128.yaml. Después de abrir, puede encontrar el enlace de descarga.
# download command/URL (optional)download: https://github.com/ultralytics/yolov5/releases/download/v1.0/coco128.zip# train and val data as 1) directory: path/images/, 2) file: path/images.txt, or 3) list: [path1/images/, path2/images/]train: ../coco128/images/train2017/ # 128 imagesval: ../coco128/images/train2017/ # 128 images# number of classesnc: 80# class namesnames: [ 'person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light', 'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow', 'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee', 'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard', 'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple', 'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch', 'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone', 'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear', 'hair drier', 'toothbrush' ]# with open('data/coco.yaml') as f:# d = yaml.safe_load(f) # dict# for i, x in enumerate(d['names']):# print(i, x)
También puede ejecutar Train.py sin descargar, lo descargará automáticamente para usted, pero puede descargarlo y cargarla manualmente si la red no es buena. La he subido a la cuenta pública de WeChat "Tengo uno" y responder " Yolo "puedes verlo.
Tenga en cuenta que el conjunto de datos descargado debe colocarse debajo de la carpeta atada con yolov5.
Aquí hay un poco de suplemento para el archivo de configuración. Train: Conjunto de capacitación representativa, Val representa un conjunto de verificación, NC representa la clasificación, los nombres indican una pestaña de clasificación.
Ejecutar Train.py directamente, pero su tamaño por lotes predeterminado es relativamente grande, y puede haber una situación de memoria de video insuficiente. Simplemente ajuste el tamaño de lote. Lo ajusto a 8. Las épocas predeterminadas son 300 veces, lo que es más de tiempo. El primer uso se puede ajustar más pequeño.
Puede ajustar directamente los números, o puede ingresar en el terminal
train.py --epochs 10
Los 10 aquí cubrirán los 300 predeterminados.
Sin embargo, también uso las 300 veces predeterminadas para entrenar. La captura de pantalla de entrenamiento es la siguiente:
Un total de 0.7 horas.
Después de que la capacitación sea exitosa, habrá un aviso:
Le ayudará a guardar dos modelos, Last Model Last.PT.PT. El mejor modelo Best.
Además, se guardará mucha información en el archivo Runs/Train/Exp.
Por ejemplo, el etiquetado y la prueba de algún lote
Marca:
prueba:
Se puede ver que el efecto sigue siendo bastante bueno.
En la carpeta entrenada, además de algunas imágenes mencionadas anteriormente, hay algunas imágenes para mostrar indicadores de evaluación del modelo.
El significado de estos indicadores no se investigará cuidadosamente por el momento, y se resumirá por separado en el futuro.
Además, también puede usar la herramienta de visualización Tensorboard
Ingrese en la terminal
tensorboard --logdir=runs
Saltará de un enlace local
http://localhost:6006/
Después de hacer clic, ingresará una nueva página, que puede ajustarse dinámicamente y visual, lo cual es muy conveniente y hermoso.
Para probar el efecto real del modelo, descargué una imagen de Internet y me puse en datos/imágenes
Modifique el valor predeterminado de Souce en Detect.py Data/Images/Plane.jpg
Después de ejecutar, puede ver los resultados en ejecuciones/detectar
¡Tres aviones fueron completamente detectados!