Análisis de código YOLOV3

El papel de las carpetas y archivos.

  • config: configuración del archivo:
    1.coco.data: almacena información relevante del conjunto de datos de coco, como el número total de categorías, la ruta del conjunto de datos, etc.
    2.yolov3.cfg: la arquitectura de red de yolov3

  • datos: almacena el conjunto de entrenamiento y el conjunto de prueba
    1.coco: almacena el conjunto de entrenamiento y el conjunto de prueba de coco

    Las etiquetas almacenan las etiquetas de cada foto, que se colocan en un archivo txt respectivamente.
    5k.txt almacena la ruta de cada foto en el conjunto de verificación.
    coco.names almacena los nombres de varias categorías
    . trainvalno5k.txt almacena la ruta de cada foto en el conjunto de entrenamiento y el conjunto de verificación.

  • salida: ruta de almacenamiento del resultado de la predicción

  • utils: almacenamiento de clase de herramienta
    1.augmentations.py: inversión de imagen
    2.datasets.py:

    • Módulo de importación:

    El módulo glob se utiliza para buscar directorios de archivos y archivos, y devolver los resultados de la búsqueda a una lista.

    La diferencia entre torch.nn.function y torch.nn: torch.nn.functional.x es una función, que es diferente de torch.nn. torch.nn.x contiene los parámetros necesarios para la inicialización y otros atributos, mientras que torch. nn.function.x Los pesos correspondientes deben pasarse como parámetros de entrada para completar la operación, por lo que al crear un modelo con torch.nn.function, debe crear e inicializar los parámetros correspondientes.
    torch.nn.x debe inicializarse en __init__, torch.nn.function Los parámetros se inicializan en __init()__ y se usan en forward(parámetro). torch.nn.functional.conv2d(entrada, peso, sesgo=Ninguno, zancada=1, relleno=0, dilatación=1, grupos=1)
    torch.nn.Conv2d(canales_in, canales_salida, tamaño_kernel, zancada=1, relleno= 0, dilatación=1, grupos=1, sesgo=Verdadero, padding_mode='zeros')

    Dataset y DataLoader en torch.utils.data, Dataset encapsula datos y DataLoader carga datos y toma un lote de datos de Dataset.
    Transforms implementa principalmente una serie de operaciones como el preprocesamiento de conjuntos de datos, la mejora de datos y la conversión en tensores.

    • función:

    pad_to_square: si la imagen no es cuadrada, rellénela hasta convertirla en un cuadrado. h>=w, complete w para que sea tan largo como h, y viceversa.

    cambiar tamaño: cambia la imagen al tamaño especificado

    random_size: para adaptar el modelo a entradas de varios tamaños, la imagen se cambia aleatoriamente a un tamaño, pero este tamaño debe ser múltiplo de 32 porque la red realiza una reducción de resolución cinco veces.

    • amable:

    Carpeta de imágenes:

    ListDataset: encapsula el conjunto de datos y hereda el conjunto de datos

    __init(): encuentra las rutas y las rutas de etiquetas correspondientes de todas las fotos en el conjunto de entrenamiento e inicializa otros parámetros

    __getitem(): saca la foto del conjunto de entrenamiento correspondiente al índice y rellénala en un cuadrado. Saque la etiqueta correspondiente y conviértala en el valor de etiqueta completo. Invierte etiquetas y fotografías al azar.

    intercalar_fn():

    len : devuelve la longitud del conjunto de datos

3.parse_config.py:

parse_model_config:path es la ruta de la configuración de red, como yolov3.cfg. Lea la información de la red capa por capa de la configuración de red correspondiente y agréguela a module_defs. Si es una capa convolucional, no hay necesidad de normalización.

4.utils.py:

build_targets (): inicialice varios parámetros según el tamaño del lote, el cuadro de anclaje, las clases y el tamaño de la cuadrícula de los resultados de la predicción, y luego calcule los 3 * cuadros de anclaje. Los cuadros de anclaje aquí son los cuadros correspondientes a todos los píxeles.
Calcule el valor de iou utilizando el cuadro real y el cuadro predicho, y devuelva el cuadro entre los tres tipos de cuadros más cercano al cuadro real y la puntuación correspondiente. Luego establezca el parámetro correspondiente de la cuadrícula donde se encuentra el ancla con el puntaje de detección más alto en 1.
El xy del valor de etiqueta real se divide por el wh de toda la imagen, que está directamente en 0 1, y el xy obtenido es el desplazamiento relativo al tamaño de la cuadrícula. , también entre 0 y 1.

  • pesos: ruta de almacenamiento de peso

  • detect.py: analiza parámetros, configura el modelo, carga pesos, predice un cuadro delimitador, calcula el tiempo de cada predicción y finalmente hace un dibujo y almacena los resultados.

  • models.py: Configuración del modelo
    1. Función:

    create_modules:nn.Sequential ejecuta bloques de red en orden y tiene un reenvío personalizado, pero nn.ModuleList no. Necesita realizar un bucle para reenviar cada módulo de red, y sus módulos de red se pueden ejecutar fuera de secuencia.
    Construya la estructura de la red de acuerdo con cada módulo en module_defs
    2. Clase:
    Darknet:
    forward se usa para el módulo forward (x) capa por capa, si es una capa yolo, también hay una función de pérdida para calcular.

    YOLOLayer:
    Compute_grid_offsets calcula las coordenadas de cada cuadrícula, que se utiliza en la propagación hacia adelante para restaurar la posición del bbox al cuadro delimitador a coordenadas absolutas. Hacia
    adelante, los resultados de la predicción se organizan en salida y la función de pérdida se calcula con el real etiqueta, así como varios indicadores.

  • train.py: modelo de entrenamiento

Supongo que te gusta

Origin blog.csdn.net/weixin_45486992/article/details/133377572
Recomendado
Clasificación