Cómo entrenar tu propio clasificador usando OpenCV
I. Introducción
Los métodos de detección de objetos fueron propuestos originalmente por Paul Viola [Viola01] y mejorados por Rainer Lienhart [Lienhart02].
Los pasos básicos de este método son:
Primero, use la función Hash de muestras (aproximadamente cientos de imágenes de muestra) para entrenar un clasificador, obteniendo así un clasificador mejorado en cascada.
El término "cascada" en clasificadores significa que el clasificador final está compuesto por una cascada de múltiples clasificadores simples. En la detección de imágenes, la ventana detectada pasa por cada nivel del clasificador por turno, por lo que la mayoría de las áreas candidatas se eliminan en las capas de detección anteriores y todas las áreas detectadas por cada nivel del clasificador son áreas objetivo.
Una vez entrenado el clasificador, se puede utilizar para detectar regiones de interés en la imagen de entrada (del mismo tamaño que la muestra de entrenamiento). El clasificador genera 1 cuando se detecta el área objetivo (automóvil o cara) y 0 en caso contrario. Para detectar la imagen completa, la ventana de búsqueda se puede mover alrededor de la imagen, examinando cada ubicación para identificar posibles objetivos. Para buscar objetos objetivo de diferentes tamaños, el clasificador está diseñado para realizar cambios de tamaño, lo cual es más efectivo que cambiar el tamaño de la imagen a detectar. Por lo tanto, para detectar objetos de destino de tamaño desconocido en la imagen, el programa de escaneo generalmente necesita escanear la imagen varias veces usando ventanas de búsqueda de diferentes proporciones.
Actualmente existen cuatro técnicas de boosting que soportan este clasificador:
Adaboost discreto, Adaboost real, Adaboost leve y Logitboost.
"Impulso" significa que cada capa del clasificador en cascada se puede seleccionar a partir del algoritmo de impulso (votación ponderada) y obtenerse mediante el autoentrenamiento del clasificador base.
Según el análisis anterior, la detección de objetivos se divide en tres pasos:
1. Creación de muestras
2. Clasificador de entrenamiento
3. Utilice el clasificador capacitado para la detección de objetivos.
2. Creación de muestras
Las muestras de entrenamiento se dividen en muestras positivas y muestras negativas, donde las muestras positivas son las muestras objetivo a detectar (como caras o automóviles, etc.). y las muestras negativas son otras imágenes, todas las imágenes están normalizadas al mismo tamaño (como 20x20).
Muestras negativas
Las muestras negativas pueden provenir de cualquier imagen que no contenga las características objetivo. Las muestras negativas se describen mediante archivos de descripción de fondo. El perfil de fondo es un archivo de texto que contiene, en cada línea, el nombre de archivo de la imagen negativa (basado en la ruta relativa al perfil). Este archivo debe crearse manualmente.
Por ejemplo, un ejemplo de un archivo de descripción de muestra negativa:
Supongamos que la estructura del directorio es la siguiente:
/img
img1.jpg
img2.jpg
bg.txt
Entonces el contenido del archivo de descripción de fondo bg.txt es:
img/ img1.jpg
img/img2.jpg
Muestra positiva
La muestra positiva es creada por el programa craatesample. El código fuente de este programa lo proporciona OpenCV y el ejecutable está incluido en el directorio bin.
Se pueden crear muestras positivas a partir de una única imagen de destino o de una serie de imágenes preetiquetadas.
Parámetros de línea de comando del programa Createsamples:
Parámetros de línea de comando:
-vec
Muestras positivas entrenadas Archivo de salida nombre.
-img
Imagen de destino de origen (por ejemplo, icono de la empresa)
-bg
Descripción del archivo de fondo.
-num
El número de muestras positivas que se generarán es el mismo que el número de imágenes de muestra positivas.
-bgcolor
Color de fondo (asumiendo que la imagen actual está en escala de grises). El color de fondo representa un color transparente. Para imágenes comprimidas, la cantidad de diferencia de color se especifica mediante el parámetro bgthresh. Entonces, los píxeles ubicados en el medio de bgcolor - bgthresh y bgcolor + bgthresh se considerarán transparentes.
-bgthresh
-inv
Si se especifica, los colores se invertirán
-randinv
p>Si se especifica, los colores se invertirán arbitrariamente
-maxidev
Desviación máxima del color de fondo.
-maxangel
-maxangle
-maxzangle
El valor máximo en radianes de rotación ángulo.
-show
Si se especifica, se mostrará cada muestra. Presione la tecla "esc" para desactivar este interruptor, es decir, la imagen de muestra no se mostrará y la creación. El proceso continuará. Esta es una opción de depuración útil.
-w
Muestra el ancho de la muestra en píxeles
-h "sample_height"
Muestra el ancho en píxeles La altura de la muestra de salida.
Nota: También se pueden extraer muestras positivas de colecciones de imágenes preetiquetadas. La colección se describe mediante un archivo de texto, similar a un archivo de descripción de fondo. Cada línea de texto corresponde a una imagen. El primer elemento de cada línea es el nombre del archivo de imagen y el segundo elemento es el número de entidades del objeto. A esto le sigue el cuadro rectangular correspondiente (x, y, ancho, alto).