Classificação de imagem usando os recursos SIFT e SVM

12

Espero que alguém possa explicar como usar o modelo de saco de palavras para executar a classificação de imagens usando os recursos SIFT / SURF / ORB e uma máquina de vetores de suporte?

No momento, eu posso calcular os vetores de recurso SIFT para uma imagem e implementar um SVM, no entanto, acho difícil entender a literatura sobre como usar o modelo de saco de palavras para 'quantizar vetor' os recursos SIFT e criar histogramas que fornecem vetores de tamanho fixo, que podem ser usados ​​para treinar e testar o SVM.

Quaisquer links para tutoriais ou literatura sobre o tópico são bem-vindos, obrigado

Jono Brogan
fonte

Respostas:

16

Se você pudesse implementar um SVM, poderá quantificar os recursos. :)

Normalmente, os recursos são quantizados usando o cluster de k-means. Primeiro, você decide qual deve ser o seu "tamanho do vocabulário" (digamos 200 "palavras visuais") e, em seguida, executa o k-means clustering para esse número de clusters (200). Os descritores SIFT são vetores de 128 elementos, ou seja, pontos no espaço 128-dimensional. Então você pode tentar agrupá-los, como qualquer outro ponto. Você extrai descritores SIFT de um grande número de imagens, semelhantes às que você deseja classificar usando um conjunto de recursos. (Idealmente, esse deve ser um conjunto separado de imagens, mas, na prática, as pessoas geralmente obtêm recursos do conjunto de imagens de treinamento.) Em seguida, você executa o k-means clustering nesse grande conjunto de descritores SIFT para particioná-lo em 200 (ou o que for) clusters , ou seja, para atribuir cada descritor a um cluster. k-means lhe dará 200 centros de cluster,

Em seguida, você pega cada descritor SIFT na sua imagem e decide a qual dos 200 clusters ele pertence, localizando o centro do cluster mais próximo a ele. Depois, basta contar quantos recursos de cada cluster você possui. Assim, para qualquer imagem com qualquer número de recursos SIFT, você tem um histograma de 200 posições. Esse é o seu vetor de recursos que você fornece ao SVM. (Observe, o termo recursos está extremamente sobrecarregado).

Pelo que me lembro, houve muito trabalho a respeito de como esses histogramas deveriam ser normalizados. Eu posso estar errado, mas eu me lembro de um artigo que afirmava que um vetor de recurso binário (ou seja, 1 se pelo menos 1 recurso deste cluster estiver presente e 0 caso contrário) funcionou melhor que um histograma. Você precisaria verificar a literatura para obter detalhes, e os detalhes são importantes.

Edit: O Computer Vision System Toolbox para MATLAB agora fornece o pacote de funcionalidades .

Dima
fonte
Oi Dima, obrigado pela resposta, eu só tinha uma pergunta, quando você diz "então você executa o k-means clustering para esse número de clusters", em que você está executando o k-mean clustering? ps eu estou quase tentado a aceitar essa resposta para o seu comentário sobre o recurso de termo sendo grosseiramente sobrecarga, estou relevantemente novo para processamento de imagem e eu não poderia concordar mais
Jono Brogan
@JonoBrogan: Você deve aceitar minha resposta, porque está correta. :) Editei a resposta para tentar esclarecer o k-means.
Dima
Faz sentido agora?
Dima
Sim, obrigado. Aceitei a resposta, embora eu esteja pensando: você sabe como decidir quantas "palavras visuais" usar?
Jono Brogan
3
Mas o maior problema é que o algoritmo Kmeans nem sempre dá o mesmo resultado. É muito aleatório.