Cómo entrenar un clasificador en código matlab de imágenes
Paso 1: construir el conjunto de categorías de imágenes
Divida las imágenes en subconjuntos de entrenamiento y subconjuntos de prueba. Utilice la función imageDatastore para almacenar las imágenes utilizadas para entrenar el clasificador. Las imágenes se pueden dividir en datos de entrenamiento y prueba utilizando la función splitEachLabel.
Leer imágenes de categorías y crear subconjuntos de imágenes
setDir = fullfile(toolboxdir('vision'),'visiondata','imageSets');
imds = imageDatastore(setDir, ' IncludeSubfolders',true,'LabelSource','foldernames');
Divide el gráfico para combinar subconjuntos de entrenamiento y prueba. En el siguiente ejemplo, el 30 % se utiliza como datos de entrenamiento y el resto como datos de prueba.
[trainingSet,testSet] = splitEachLabel(imds,0.3,'randomize');
Paso 2: crear la bolsa de palabras destacadas
Empezando desde Cada descriptor de características se extrae de imágenes representativas de la categoría para crear un vocabulario visual o una bolsa de palabras destacadas.
El objeto bagOfFeatures define características, es decir, vocabulario visual, mediante el uso del algoritmo de agrupamiento k-means en descriptores de características extraídos del conjunto de entrenamiento. El algoritmo divide iterativamente los descriptores en k grupos mutuamente excluyentes. Los grupos resultantes son muy compactos y comparten características similares. Cada centro de grupo representa una característica o una palabra visual. Las características se pueden extraer en función de un detector de características o se puede definir una cuadrícula para extraer descriptores de características. Los métodos de cuadrícula pueden perder información detallada. Por lo tanto, se deben utilizar cuadrículas para imágenes que no contengan características obvias, como imágenes de paisajes como playas. El uso de un detector de función robusta acelerada (o SURF) proporciona una mayor invariancia de escala. De forma predeterminada, el algoritmo ejecuta el método "cuadrícula".
El flujo de trabajo algorítmico analiza la imagen en su conjunto. Las imágenes deben estar etiquetadas adecuadamente para describir la categoría que representan. Por ejemplo, un conjunto de imágenes de automóviles podría etiquetarse como automóviles. Este flujo de trabajo no se basa en información espacial ni en la anotación de objetos específicos en la imagen. La tecnología de bolsa de palabras visuales se basa en tecnología de detección de no localización.
Paso 3: entrenar el clasificador de imágenes a partir de la bolsa de palabras visuales
La función trainImageCategoryClassifier devuelve el clasificador de imágenes. Este método utiliza un marco de código de salida con corrección de errores (ECOC) basado en máquinas de vectores de soporte (SVM) de dos clases para entrenar múltiples clasificadores.
Este método codifica las imágenes del conjunto de imágenes en un histograma de palabras visuales utilizando la bolsa de palabras visuales devuelta por el objeto bagOfFeatures. Luego, los histogramas de palabras visuales se utilizan como muestras positivas y negativas para entrenar al clasificador.
1. Utilice el método de codificación de bagOfFeatures para codificar cada imagen en el conjunto de entrenamiento. Esta función detecta y extrae características de una imagen y luego utiliza un algoritmo vecino más cercano para crear un histograma de características para cada imagen. Esta función aproxima el descriptor hacia el centro del grupo para aumentar el valor de cada partición en el histograma. La longitud del histograma depende de la cantidad de palabras visuales creadas a partir del objeto bagOfFeatures. En última instancia, el histograma se utilizará como vector de características de la imagen.
2. Repita el paso 1 para cada imagen del conjunto de entrenamiento para generar los datos de entrenamiento.
3 Evalúe el clasificador. Pruebe el clasificador en el conjunto de imágenes de prueba utilizando el método de evaluación de imagecategoryclassifier. Los resultados se pueden predecir analizando la matriz de confusión de salida. El resultado de clasificación ideal es una matriz estándar que contenga una diagonal. La clasificación incorrecta da como resultado valores fraccionarios.
Paso 4: Clasificar la imagen o conjunto de imágenes
Finalmente, use el método predeict de imageCategoryClassifier para clasificar la nueva imagen y determinar su tipo.