I'm trying to implement a Bag of Features for a set of images submitted in different moments by a set of users.
If the clusters change, then we need to recompute at LEAST all the "visual words" which elements has changed cluster.
For example, suppose that one SIFT descriptor
d at time
t1 belongs to cluster
t1+1 a query is submitted, and so the clusters change and now
d belongs to cluster
B. So we need to re-compute the "visual word" (vector) relative to
As you can imagine, this approach can be too much expensive (especially if query rate is high)!
My question is: there is a better model than the classic bag of words, or some dynamic clustering algorithm?
A "partially" dynamic solution:
A possible improvement could be dividing the application in two processes: one buffer the queries and at a certain point update the system (launching k-means and recomputing all the "visual words) while the other answer to the queries (keeping the static BoW). When the buffer process has finished the update it update the query process. But still, this solution is "partially" dynamic, since the "visual dictionary" will not updated (so while the buffer process is still buffering queries).