Ejecute yolov5 en la CPU (pasos detallados + adecuado para comenzar)

Tabla de contenido

1. Crea un nuevo entorno

2. Importa la biblioteca de Pytorch

3. Nuevos proyectos

4. prueba

5. Preparar el conjunto de datos

Seis, modificar el archivo de configuración

7. Entrenamiento

Ocho, prueba de ejemplo

9. Conclusión


De manera predeterminada, todos tienen instalados Anaconda y Pycharm y conocen las operaciones básicas.

1. Crea un nuevo entorno

Abra la ventana cmd, ingrese conda create -n yolov5 python=3.7, presione Enter

Espere un momento, ingrese y, presione Entrar

Después de un tiempo, aparece listo, lo que indica que el nuevo entorno se creó con éxito.

Puede elegir el nombre a voluntad, pero se recomienda elegir el mismo nombre que yo. Se recomienda que todas las operaciones posteriores sean coherentes conmigo, para que todos puedan comenzar por primera vez; la versión del intérprete de Python debe elegir 3.7 , porque me he encontrado con problemas desconocidos antes de elegir 3.10

2. Importa la biblioteca de Pytorch

Mi computadora es una Thinkbook14p de R7-5800H, no hay una pantalla independiente, así que uso la versión CPU de PyTorch

Primero, ingrese conda active yolov5 en la ventana cmd, presione Enter y active el nuevo entorno que acaba de crear

Si (yolov5) aparece antes de la ruta, ¡la activación es exitosa!

Luego ingrese al sitio web oficial de PyTorch PyTorch , seleccione la siguiente configuración:

Copie la última línea de código en la ventana cmd y presione Entrar

Espere un momento, ingrese y, presione Entrar; espere un momento, aparece listo, lo que indica que la biblioteca de Pytorch se importó correctamente.

3. Nuevos proyectos

Primero descargue el paquete de instalación de yolov5 mirrors/ultralytics/yolov5 GitCode desde este sitio web

Una vez completada la descarga, descomprímala, haga clic con el botón derecho en la carpeta descomprimida y seleccione Abrir como proyecto Pycharm

La interfaz de Pycharm abierta se ve así:

Haga clic en <Sin intérprete> en la esquina inferior derecha y seleccione Agregar intérprete

Haga clic en el entorno Conda en el lado izquierdo de la interfaz emergente, haga clic en el entorno existente, seleccione el archivo ejecutable de python en el nuevo entorno creado anteriormente y haga clic en Aceptar

Puede ver que la esquina inferior derecha de la interfaz de Pycharm se ha convertido en Python3.7 (yolov5)

4. prueba

Abra el archivo requirements.txt, que contiene varios paquetes necesarios para ejecutar yolov5. Copie la primera línea del comando para ejecutar en la terminal

Este proceso puede ser rápido o lento, dependiendo de la velocidad de la red, espera tranquilo~ Puede haber problemas con la instalación de varios paquetes, no importa, ¡puedes encontrar la solución buscando la información del error en CSDN!

Después de que todo esté instalado, ejecute el archivo detect.py a la izquierda

Si no hay ningún error después de la operación, y las siguientes dos imágenes procesadas aparecen en el directorio runs\detect\exp de la izquierda, significa que no hay ningún problema con las operaciones anteriores, ¡felicidades! los preparativos han terminado

5. Preparar el conjunto de datos

Siga mi método para crear las siguientes carpetas vacías en la ruta principal de yolov5 para facilitar la administración posterior

Descargué el conjunto de datos de reconocimiento de perros y gatos de datos de entrenamiento proporcionados por el blogger en este artículo Zhihu - Zhihu , hay 25000 imágenes después de la descompresión, obviamente es imposible usarlas todas. Seleccioné las primeras 121 imágenes de gatos y las copié en la carpeta yolov5-master\own_datas\images\train como conjunto de entrenamiento.

Luego ingrese pip install pyqt5 labelme en la terminal Pycharm y presione Enter. Estas dos bibliotecas se utilizan para etiquetar conjuntos de datos.

Una vez completada la instalación, ingrese labelme en la terminal y presione Enter

Aparecerá una ventana y el conjunto de entrenamiento se marcará en esta ventana.

Haga clic en Abrir directorio en la esquina superior izquierda, seleccione la carpeta yolov5-master\own_datas\images\train y aparecerán las imágenes del conjunto de entrenamiento. Haga clic con el botón derecho y seleccione Crear rectángulo para encuadrar al gato en la imagen.

Una vez completada la selección del cuadro, ingrese el nombre de la etiqueta gato, haga clic en Aceptar y la etiqueta se guardará. Si hay varios gatos, continúe seleccionando

Después de seleccionar todo el marco de la imagen, haga clic en Siguiente imagen a la izquierda y guarde el archivo de etiqueta en la ruta yolov5-master\own_datas\labels\json de acuerdo con el aviso. El formato del archivo es .json

Después de media hora...

Después de marcar todas las imágenes, puede ver 121 archivos .json correspondientes a la misma cantidad de imágenes en el conjunto de entrenamiento en la carpeta yolov5-master\own_datas\labels\json

Aún no ha terminado, porque yolov5 solo puede reconocer etiquetas en formato .txt, y necesita convertir el archivo .json en un archivo .txt

Cree un nuevo archivo json2txt.py en la carpeta yolov5-master

Copie el siguiente código en él:

import json
import os

name2id = {'cat': 0}  # 标签名称


def convert(img_size, box):
    dw = 1. / (img_size[0])
    dh = 1. / (img_size[1])
    x = (box[0] + box[2]) / 2.0 - 1
    y = (box[1] + box[3]) / 2.0 - 1
    w = box[2] - box[0]
    h = box[3] - box[1]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)


def decode_json(json_floder_path, json_name):
    txt_name = 'C:/Users/xieji/Downloads/yolov5-master/own_datas/labels/txt/' + json_name[0:-5] + '.txt'
    # txt文件夹的绝对路径
    txt_file = open(txt_name, 'w')

    json_path = os.path.join(json_floder_path, json_name)
    data = json.load(open(json_path, 'r', encoding='gb2312', errors='ignore'))

    img_w = data['imageWidth']
    img_h = data['imageHeight']

    for i in data['shapes']:

        label_name = i['label']
        if (i['shape_type'] == 'rectangle'):
            x1 = int(i['points'][0][0])
            y1 = int(i['points'][0][1])
            x2 = int(i['points'][1][0])
            y2 = int(i['points'][1][1])

            bb = (x1, y1, x2, y2)
            bbox = convert((img_w, img_h), bb)
            txt_file.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in bbox]) + '\n')


if __name__ == "__main__":

    json_floder_path = 'C:/Users/xieji/Downloads/yolov5-master/own_datas/labels/json/'
    # json文件夹的绝对路径
    json_names = os.listdir(json_floder_path)
    for json_name in json_names:
        decode_json(json_floder_path, json_name)

Los tres lugares comentados son donde es posible que sea necesario realizar ajustes. Si todos me siguieron exactamente de la misma manera, simplemente reemplace C:/Users/xieji/Downloads/ con su propia ruta.

Ejecute json2txt.py, puede ver los 121 archivos .txt correspondientes en la carpeta yolov5-master\own_datas\labels\txt después del final

El último paso es copiar todos los archivos de la carpeta txt a la carpeta yolov5-master\own_datas\labels\train. ¡No olvides este paso! De lo contrario, se informará un error durante el entrenamiento y no se podrá encontrar la etiqueta.

Seis, modificar el archivo de configuración

Primero copia los dos archivos.

Busque el archivo coco128.yaml en la ruta yolov5-master\data, cópielo en la ruta yolov5-master\own_datas y cámbiele el nombre a cat.yaml

Porque no estamos usando el conjunto de datos coco128, sino nuestro propio conjunto de datos cat. De hecho, está bien no cambiarlo, sino cambiarlo para que sea más fácil de entender.

Busque el archivo yolov5s.yaml en la ruta yolov5-master\models y cópielo también en la ruta yolov5-master\own_datas. Elegí yolov5s porque, aunque no es muy efectivo, es más rápido , he usado yolov5l antes y tengo que correr toda la noche...

Abre el archivo cat.yaml, lo primero que debes modificar son estas tres líneas:

# path: ../datasets/coco128  # dataset root dir
train: own_datas/images/train  # train images (relative to 'path') 128 images
val: own_datas/images/train  # val images (relative to 'path') 128 images

Comentar la primera línea

Los caminos relativos de la segunda y tercera línea, si me siguen exactamente de la misma manera, solo sígueme

Luego modifica estas dos líneas:

nc: 1  # number of classes
names: ['cat']  # class names

nc es el número de categorías y names es el nombre de la categoría. Si me sigues exactamente de la misma manera, solo sígueme

Finalmente comente esta línea porque no usamos el conjunto de datos coco128. Está bien no comentar, no importa, es solo que tengo un trastorno obsesivo-compulsivo.

# download: https://github.com/ultralytics/yolov5/releases/download/v1.0/coco128.zip

Abra el archivo yolov5s.yaml y necesita modificar esta línea:

nc: 1  # number of classes

7. Entrenamiento

Abra el archivo tren.py

Primero modifique el valor predeterminado de estas líneas:

    parser.add_argument('--weights', type=str, default='yolov5s.pt', help='initial weights path')
    parser.add_argument('--cfg', type=str, default='own_datas/yolov5s.yaml', help='model.yaml path')
    parser.add_argument('--data', type=str, default='own_datas/cat.yaml', help='dataset.yaml path')

Si me sigues exactamente de la misma manera, solo sígueme

Luego modifique el valor predeterminado de esta línea:

    parser.add_argument('--epochs', type=int, default=150)

El valor predeterminado es 300, pero el tiempo de entrenamiento será más largo, lo cambié a 150 aquí

Lo último que hay que modificar es el valor predeterminado de esta línea:

parser.add_argument('--workers', type=int, default=0, help='maximum number of dataloader workers')

Usé el valor predeterminado de 8 al principio, porque mi CPU tiene núcleos 8 y subprocesos 16. Vi en otra parte que si este valor se establece en la cantidad de núcleos de CPU de mi computadora, la velocidad de entrenamiento es la más rápida, pero un error se informa durante el entrenamiento Probablemente significa que la memoria estalló, y luego la cambié a 0

Bien, ¡empieza a entrenar!

Ejecute train.py y espere... el ventilador zumbará sin parar...

Entrené durante 3 horas... Usar la CPU es realmente lento... Después de la última época, [email protected] se detuvo en 0.995, [email protected]:0.95 se detuvo en 0.904, muy bien

Puede ver información relacionada con el entrenamiento en la carpeta yolov5-master\runs\train\exp

El archivo best.pt en la carpeta de pesos es el modelo entrenado, que se usará más adelante en la prueba.

Ocho, prueba de ejemplo

Tomó tres horas entrenar al modelo, ¡veamos cómo funciona!

Usé el video del gato que tomé para la prueba. Puede usarlo usted mismo, así como las fotos (de hecho, puede usar directamente el conjunto de datos descargado antes, se pueden usar más de 20,000 fotos casualmente)

Coloque los archivos de prueba en la carpeta yolov5-master\own_datas\images\test

Abra el archivo detect.py

Modifique el valor predeterminado de las siguientes dos líneas:

    parser.add_argument('--weights', nargs='+', type=str, default='runs/train/exp/weights/best.pt', help='model path(s)')
    parser.add_argument('--source', type=str, default='own_datas/images/test', help='file/dir/URL/glob, 0 for webcam')

El primer valor predeterminado es la ruta relativa del archivo del modelo entrenado mencionado anteriormente

El segundo valor predeterminado es la ruta relativa de la carpeta donde se almacenan los archivos de prueba.

Si me sigues exactamente de la misma manera, solo sígueme

Ejecute detect.py, espere un momento...

Después del final, puede ver los resultados en la carpeta yolov5-master\runs\detect\exp2

No puedo subir el video directamente, tomé algunas fotos del video para mostrarles:

El efecto está bien, no es satisfactorio, después de todo, solo se han entrenado más de 100 imágenes y se utiliza la red yolov5s relativamente pobre.

9. Conclusión

Yo mismo soy un novato, recién me estoy metiendo en el aprendizaje profundo, he estado trabajando en este proyecto durante varios días y he adquirido muchos conocimientos.

Después de escribir el borrador, eliminé todo lo que había hecho antes y luego lo ejecuté de nuevo de acuerdo con los pasos que escribí. ¡Fue fluido y sin problemas!

Según mi proceso, se puede completar en un día (si hay una mejor pantalla independiente, será más rápido ejecutarlo con GPU)

Si encuentra un problema, simplemente busque en CSDN y luego combine su propia sabiduría, ¡creo que se puede resolver!

Consulte principalmente este blog, ¡gracias!

[Yolov5] 1. Resuma seriamente el tutorial de nivel de niñera Yolov5 de 6000 palabras, la abuela de 80 años puede entenderlo

Supongo que te gusta

Origin blog.csdn.net/weixin_54721509/article/details/122983561
Recomendado
Clasificación