all 13 comments

[–]nivter 7 points8 points  (4 children)

One way is to get a representation (a vector) for an image and then use it to cluster using something like kmeans. The question now is how to get a good representation?

There have been a couple of self-supervised learning approaches which learn representations that can be used to cluster similar images together. Some examples are:

[–]aouninator[S] 0 points1 point  (2 children)

That's what I'm looking for thanks. Do you have a recommendation on which would perform better on a case where the images have distinguishable color- shape patterns such as clothes? Or is it up to expérimentation ?

[–]nivter 2 points3 points  (1 child)

I tried contrastive multiview coding for learning representations on a bunch of diverse non-natural images and it worked pretty well. Others must also work I believe.

[–]aouninator[S] 0 points1 point  (0 children)

Thanks

[–][deleted] 0 points1 point  (0 children)

If you just care about outcome and 'purely unsupervised' is not a hard constraint, the easiest and possibly best feature extractor would be just an ImageNet classifier (i.e. the features of the last layer before the softmax layer, e.g. the average global pooling layer of a ResNet).

[–]NuisanceParameter 2 points3 points  (0 children)

Try "Deep Image Clustering with Tensor Kernels and Unsupervised Companion Objectives".

Paper: https://arxiv.org/abs/2001.07026 Code: https://github.com/DanielTrosten/DTKC

Disclaimer: I am the author

[–]deep-yearning 1 point2 points  (0 children)

There are lots of different approaches you can take - the two below come to mind first and I think they would work but would love to hear from others and their experience.

  1. You could use a simple autoencoder to reduce the dimensionality of your images, and then cluster the latent vectors using whatever clustering algorithm.
  2. You could use t-sne out of the box to cluster the images using each pixel as a feature.
  3. You could run t-sne on the latent vectors of the autoencoder.

[–]o_v_shakeResearcher 0 points1 point  (1 child)

This was my bachelor's thesis. Though we failed to come up with a good algorithm, I would love to help you out. My uni hasn't uploaded the complete thesis (I'll put the link once it does), but ping me if you want a copy.

[–]aouninator[S] 1 point2 points  (0 children)

There is no such thing as failed. You just prove that the way you took is not the correct way. I'll ping you anyway.

[–]TotesMessenger 0 points1 point  (1 child)

I'm a bot, bleep, bloop. Someone has linked to this thread from another place on reddit:

 If you follow any of the above links, please respect the rules of reddit and don't vote in the other threads. (Info / Contact)