Skip to content

Semantic Image Similarity Search in Elasticsearch

License

Notifications You must be signed in to change notification settings

comertial/ElasticHash

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ElasticHash: Semantic Image Similarity Search in Elasticsearch

ElasticHash uses Elasticsearch for high-quality, efficient, and large-scale semantic image similarity search. It is based on a deep hashing model to learn hash codes for fine-grained image similarity search in natural images and a two-stage method for efficiently searching binary hash codes using Elasticsearch (ES). In the first stage, a coarse search based on short hash codes is performed using multi-index hashing and ES terms lookup of neighboring hash codes. In the second stage, the list of results is re-ranked by computing the Hamming distance on long hash codes.

More details can be found in the slides.

System

Demo

https://uni-marburg.de/ntzdY

Demo

Install

If you don't need the whole system but only the Elasticsearch index please use elastichash package:

pip install elastichash

Usage

Perform image similarity search on ~7M images of the OpenImages dataset.

  • Go to app directory cd dh
  • Download model and unpack ./get_model.sh
  • Start containers:
    • Run on CPU: docker-compose up -d
    • Or, if a GPU is available, run on GPU: docker-compose --env-file ./.env.gpu up -d
  • Download OpenImages ES index and import data into ES: docker exec dh_app /tools/import_openimages.sh
  • Go to http://localhost

Custom image dataset

You can use the system to perform image similarity search on a custom natural image dataset. However, for reasonable results, this requires a directory with enough images to index.

  • Go to app directory cd dh
  • Customize docker-compose.yaml: Add - path/to/mage_dir/:/app/static/images/ for a path to a folder containing images to app
  • Start containers docker-compose up -d
  • Customize and run docker exec dh_app /tools/import_dir.sh
  • Go to http://localhost

Custom model

You can also use a custom deep hashing model (e.g. for other domains). More information on how to convert a Keras model for ElasticHash can be found here

Experiments and data

Experiments can be found here and datasets and models here

Troubleshooting

If the elasticsearch container won't start its probably a permissions issue: sudo chown 1000:1000 -R dh/elasticsearch/data/

Reference

Reference to cite when you use ElasticHash in a research paper:

@InProceedings{korfhage2021elastichash,
  title="ElasticHash: Semantic Image Similarity Search by Deep Hashing with Elasticsearch",
  author={Korfhage, Nikolaus and M{\"u}hling, Markus and Freisleben, Bernd},
  booktitle="Computer Analysis of Images and Patterns",
  year="2021",
  publisher="Springer International Publishing",
  pages="14--23",
}

License

ElasticHash is MIT-licensed

Credits

The demo app uses Natural Gallery JS and PhotoSwipe and images from the Open Images dataset

About

Semantic Image Similarity Search in Elasticsearch

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 55.1%
  • JavaScript 33.6%
  • CSS 5.2%
  • HTML 4.4%
  • Shell 1.4%
  • Dockerfile 0.3%