Clasificación de imágenes con las funciones SIFT y SVM

12

¿Espero que alguien pueda explicar cómo usar el modelo de bolsa de palabras para realizar la clasificación de imágenes usando las funciones SIFT / SURF / ORB y una máquina de vectores de soporte?

Por el momento puedo calcular los vectores de características SIFT para una imagen, y he implementado un SVM, sin embargo, me resulta difícil entender la literatura sobre cómo usar el modelo de bolsa de palabras para 'cuantificar vectores' las características SIFT y construir histogramas que brinden vectores de tamaño fijo, que pueden usarse para entrenar y probar el SVM.

Cualquier enlace a tutoriales o literatura sobre el tema es bienvenido, gracias

Jono Brogan
fuente

Respuestas:

16

Si pudiera implementar un SVM, puede cuantificar las características. :)

Típicamente, las características se cuantifican usando el agrupamiento de k-means. Primero, usted decide cuál debe ser su "tamaño de vocabulario" (digamos 200 "palabras visuales"), y luego ejecuta k-significa agrupación para ese número de agrupaciones (200). Los descriptores SIFT son vectores de 128 elementos, es decir, puntos en un espacio de 128 dimensiones. Por lo tanto, puede intentar agruparlos, como cualquier otro punto. Extrae los descriptores SIFT de una gran cantidad de imágenes, similares a las que desea clasificar utilizando la bolsa de características. (Idealmente, este debería ser un conjunto separado de imágenes, pero en la práctica, las personas a menudo solo obtienen características de su conjunto de imágenes de entrenamiento). Luego, ejecuta el agrupamiento k-means en este gran conjunto de descriptores SIFT para dividirlo en 200 (o lo que sea) grupos , es decir, asignar cada descriptor a un grupo. k-means le dará 200 centros de clúster,

Luego, toma cada descriptor SIFT en su imagen y decide a cuál de los 200 grupos pertenece, encontrando el centro del grupo más cercano a él. Luego, simplemente cuenta cuántas características de cada clúster tiene. Por lo tanto, para cualquier imagen con cualquier número de funciones SIFT, tiene un histograma de 200 bins. Ese es su vector de características que le da al SVM. (Tenga en cuenta que el término características está muy sobrecargado).

Según recuerdo, se realizó un gran trabajo en relación con la forma en que estos histogramas deberían normalizarse. Podría estar equivocado, pero parece recordar un artículo que afirmaba que un vector de características binarias (es decir, 1 si al menos 1 característica de este grupo está presente, y 0 en caso contrario) funcionó mejor que un histograma. Tendría que consultar la literatura para obtener detalles, y los detalles son importantes.

Editar: La Caja de herramientas del sistema de visión por computadora para MATLAB ahora ofrece la funcionalidad de la bolsa de características .

Dima
fuente
Hola Dima, gracias por tu respuesta, acabo de tener una pregunta, cuando dices "entonces ejecutas k-means clustering para ese número de clusters", ¿en qué estás ejecutando k-mean clustering? PD: Estoy casi tentado a aceptar esta respuesta por tu comentario sobre el término que la característica está sobrecargada, soy nuevo en el procesamiento de imágenes y no podría estar más de acuerdo
Jono Brogan
@JonoBrogan: Deberías aceptar mi respuesta, porque es correcta. :) He editado la respuesta para tratar de aclarar k-means.
Dima
¿Tiene sentido ahora?
Dima
Si gracias. Acepté la respuesta, aunque me pregunto, ¿sabe cómo decide decidir cuántas "palabras visuales" usar?
Jono Brogan
3
Pero el mayor problema es que el algoritmo Kmeans no siempre da el mismo resultado. Está muy aleatorizado.