Newer
Older
# Bildersuchmaschine mit Neural Net Embeddings und Torch <!-- omit in toc -->

Dieses Git-Projekt implementiert eine Bildersuchmaschine unter Verwendung von Python und PyTorch.
Die Suche erfolgt mithilfe von Embeddings, die durch einen neuronales Netz generiert werden. Die Anwendung verwendet den COCO2017-Datensatz ohne Annotationen.
Das Projekt wurde als Abschlussprojekt im Rahmen des Moduls II2520 Einführung in Deep Learning unter der Weisung von Prof. Dr.-Ing. Ghobadi, Herrn Vaupel und Herrn Schwaß entwickelt.
## Inhaltsverzeichnis <!-- omit in toc -->
- [Dokumentation](#dokumentation)
- [Links zu allen Modellen](#links-zu-allen-modellen)
- [Links zu den optimierten Modellen](#links-zu-den-optimierten-modellen)
- [Link zum Datensatz](#link-zum-datensatz)
- [Dateien](#dateien)
- [Installation](#installation)
- [Training](#training)
- [Verwendung der Testumgebung](#verwendung-der-testumgebung)
- [Anpassungen](#anpassungen)
- [Beiträger](#beiträger)
- [Lizenz](#lizenz)
## Dokumentation
- [Link zum Poster](dokumentation/Bilder_Suchmaschine%20Poster.pdf)
- [Link zur Dokumentation](dokumentation/Bilder_Suchmaschine%20Dokumentation.pdf)
- <https://drive.google.com/drive/folders/1ofh_I4rYfsiTS1veJ25lgs_pAMTz6vAM?usp=drive_link>
- <http://94.134.236.61:49206/vae-model-out/>
## Links zu den optimierten Modellen
Latent Encoder Epoche 2 mit Lernrate lr = 1⁻³ :
- Model: <https://drive.google.com/file/d/1H9rA6OaeIckv5UQ7gbbZ1fC6IWIyydQt/view>
- History: <https://drive.google.com/file/d/1e6mMgAcJxrkIYXGwfxxcyZ0ROOIr4m_U/view>
Variational Autoencoder Epoche 34 mit Lernrate lr = 5⁻⁵ :
- Model: <http://94.134.236.61:49206/vae-model-out/VAE-dynamic-beta-34.model>
- History: <http://94.134.236.61:49206/vae-model-out/VAE-dynamic-beta-34.history>
## Link zum Datensatz
- <https://cocodataset.org/#download>
## Dateien
- Der Ordner [dokumentation](dokumentation) beinhaltet alle textuelle und graphische Dokumente mit Bezug auf das Projekt.
- In [quellcode](quellcode):
- `AP_2.ipynb -- AP_4.ipynb` beschreiben die verschiedenen Modelimplementationen.
- [`AP_2.ipynb`](quellcode/AP_2.ipynb) ist eine Implementation des reinen Autoencoders.
- [`AP_2-5.ipynb`](quellcode/AP_2-5.ipynb) ist eine frühe Implementation des Variational Autoencoders.
- [`AP_3.ipynb`](quellcode/AP_3.ipynb) ist die Endimplementation des Variational Autoencoders.
- [`AP_4.ipynb`](quellcode/AP_4.ipynb) beinhaltet die Implementation des Latent Encoders mit Triplet-Margin-Loss.
- [`AP_1.ipynb`](quellcode/AP_1.ipynb) ist eine frühe Implementation des Frontends.
- [`requirements.txt`](quellcode/requirements.txt) beinhaltet alle benötigten Abhängigkeiten.
- [`backend.py`](quellcode/backend.py), [`backendvae.py`](quellcode/backendvae.py), und [`frontend.py`](quellcode/frontend.py), beinhalten die Testumgebung.
- In [`frontend.py`](quellcode/frontend.py) wird die Testumgebung gestartet. Sie beinhaltet den Code für die Graphische Benutzerumgebung.
- [`backend.py`](quellcode/backend.py) beinhaltet das Backend für den Latent Encoder.
- [`backendvae.py`](quellcode/backendvae.py) beinhaltet das Backend für den Variational Autoencoder.
```bash
git clone git@git.thm.de:brnk73/bilder-suchmaschine.git
```
3. (Optional) Erstellen und wechseln Sie in ein geeignetes Python-Enviroment z.B. mit Conda:
conda create -n pics
conda activate pics
4. (Optional) Bearbeiten Sie die unter `--index-url` angegebene URL für die in den ersten drei Zeilen stehenden Torch-Pakete, um die für Sie richtige Compute-Platform auszuwählen. Hierfür sollte eine URL für die Preview (Nightly) Builds gewählt werden. Die passenden URLs können Sie unter <https://pytorch.org> finden.
5. Installieren Sie die erforderlichen Abhängigkeiten:
```bash
pip install -r quellcode/requirements.txt
```
## Training
1. Erstellen Sie den Ordner `data` im `quellcode` Ordner. Laden Sie den COCO2017-Datensatz herunter, entpacken Sie diesen und legen Sie die Test-, Trainings- und Validierungsordner im `quellcode/data`-Verzeichnis ab.
2. Wechslen Sie zum Ordner `quellcode` und starten Sie jupyter-lab:
jupyter-lab
```
3. Öffnen Sie je nach gewünschten Modell die Notebooks `AP_2.ipynb -- AP_4.ipynb`.
4. (Optional) Setzen Sie gewünschte Trainingsparameter.
5. (Optional) Laden Sie ein bestehendes Modell.
6. Führen Sie alle Notebook-Zellen aus und trainieren Sie das Modell.
7. Speichern und evaluieren Sie das Modell.
## Verwendung der Testumgebung
1. Ändern Sie `backend.py` oder `backendvae.py` so ab, sodass der Pfad zum gespeicherten Modell korrekt ist oder speichern Sie das Modell unter `le-model-out/LatentEncoder-TML-2.model` für `backend.py` oder `vae-model-out/VAE-dynamic-beta-34.model` für `backendvae.py`.
2. (Optional) Ändern Sie Zeile 7 in `frontend.py`
von
```python
from backend import GetEmbeddings
```
auf
```python
from backendvae import GetEmbeddings
```
um die Testumgebung vom Latent Encoder (`backend.py`) auf den Variational Autoencoder (`backendvae.py`) umzustellen.
3. Führen Sie das Pythonskript `frontend.py` aus, um die visuelle Testumgebung zu starten:
4. Wählen Sie einen Ordnerpfad über `Browse...` an, in dem Bilder enthalten sind.
5. Setzen Sie den `k-value` Schieber auf einen gewünschten Wert, um die Menge der Angezeigten ähnlichen Bilder zu bestimmen.
6. Drücken Sie mit der Maus zweimal auf ein Gewünschtes Bild in der Gallerie, um zum angewählten Bild ähnliche Bilder in der Gallerie zu sehen.
7. Mit `Remove Image` können Sie die Auswahl des Bildes entfernen und sehen wieder alle Bilder des gewählten Ordners in der Gallerie.
Fühlen Sie sich frei, das Projekt nach Ihren Bedürfnissen anzupassen. Sie können das neuronale Netz verbessern, die Benutzeroberfläche ändern oder den Distanzvergleich optimieren.
Dieses Projekt ist unter der [Eclipse Public License 2.0](LICENSE) lizenziert - siehe die Datei LICENSE für weitere Details.