Skip to content
Snippets Groups Projects
README.md 6.29 KiB
Newer Older
# Bildersuchmaschine mit Neural Net Embeddings und Torch  <!-- omit in toc -->
Brian Runck's avatar
Brian Runck committed

![Ansicht der GUI der Testumgebung](dokumentation/frontend.png)
Brian Runck's avatar
Brian Runck committed

Dieses Git-Projekt implementiert eine Bildersuchmaschine unter Verwendung von Python und PyTorch.
Brian Runck's avatar
Brian Runck committed

Die Suche erfolgt mithilfe von Embeddings, die durch einen neuronales Netz generiert werden. Die Anwendung verwendet den COCO2017-Datensatz ohne Annotationen.
Brian Runck's avatar
Brian Runck committed

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.
Brian Runck's avatar
Brian Runck committed

## Inhaltsverzeichnis  <!-- omit in toc -->
Brian Runck's avatar
Brian Runck committed

- [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)
Brian Runck's avatar
Brian Runck committed

## Dokumentation

- [Link zum Poster](dokumentation/Bilder_Suchmaschine%20Poster.pdf)
- [Link zur Dokumentation](dokumentation/Bilder_Suchmaschine%20Dokumentation.pdf)

## Links zu allen Modellen
Brian Runck's avatar
Brian Runck committed

- <https://drive.google.com/drive/folders/1ofh_I4rYfsiTS1veJ25lgs_pAMTz6vAM?usp=drive_link>
Brian Runck's avatar
Brian Runck committed

- <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

Brian Runck's avatar
Brian Runck committed
- 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.
Brian Runck's avatar
Brian Runck committed

## Installation
Brian Runck's avatar
Brian Runck committed

1. Klonen Sie das Repository:
Brian Runck's avatar
Brian Runck committed

    ```bash
    git clone git@git.thm.de:brnk73/bilder-suchmaschine.git
    ```
Brian Runck's avatar
Brian Runck committed

2. Wechseln Sie in das Projektverzeichnis:
Brian Runck's avatar
Brian Runck committed

    ```bash
    cd bilder-suchmaschine
    ```
Brian Runck's avatar
Brian Runck committed

3. (Optional) Erstellen und wechseln Sie in ein geeignetes Python-Enviroment z.B. mit Conda:
Brian Runck's avatar
Brian Runck committed

    ```bash
    conda create -n pics
    conda activate pics   
Brian Runck's avatar
Brian Runck committed

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
Brian Runck's avatar
Brian Runck committed

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.
Brian Runck's avatar
Brian Runck committed

2. Wechslen Sie zum Ordner `quellcode` und starten Sie 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.
Brian Runck's avatar
Brian Runck committed

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:
Brian Runck's avatar
Brian Runck committed

    ```bash
Brian Runck's avatar
Brian Runck committed
    python frontend.py
Brian Runck's avatar
Brian Runck committed

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.
Brian Runck's avatar
Brian Runck committed

## Anpassungen
Brian Runck's avatar
Brian Runck committed

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.
Brian Runck's avatar
Brian Runck committed

Brian Runck's avatar
Brian Runck committed

- Tim Hebestreit
- Brian Runck
Brian Runck's avatar
Brian Runck committed

## Lizenz
Brian Runck's avatar
Brian Runck committed

Brian Runck's avatar
Brian Runck committed
Dieses Projekt ist unter der [Eclipse Public License 2.0](LICENSE) lizenziert - siehe die Datei LICENSE für weitere Details.