Für die Gewässer sind Wasserbücher zu führen. In das jeweilige Wasserbuch sind nach § 87 des Wasserhaushaltsgesetzes (WHG) in Verbindung mit § 98 ff. des Hamburgischen Wassergesetzes (HWaG) insbesondere einzutragen: - Erlaubnisse und Bewilligungen - alte Rechte und Befugnisse - Wasserschutzgebiete - Überschwemmungsgebiete und Risikogebiete - Entscheidungen über die Unterhaltung, den Ausbau und den Hochwasserschutz In die Wasserbücher werden die über den Gemeingebrauch hinausgehenden, von den zuständigen Wasserbehörden durch Verwaltungsakte übertragenen Nutzungsrechte an oberirdischen Gewässern sowie am Grundwasser eingetragen. Die Eintragungen beinhalten die Art der Nutzung (z.B. Grundwasserförderung, Herstellen eines Steges) sowie Angaben zum Umfang der Nutzung (z.B. erlaubte Fördermengen, Größe des Steges). Der Datenbestand ist nicht tagesaktuell. Das Wasserbuch dient dazu, den auf die Gewässer einwirkenden oder für ihren Schutz zuständigen öffentlichen Stellen sowie den Bürgerinnen und Bürgern einen umfassenden Überblick über die wesentlichen Rechtsverhältnisse an Gewässern zu geben. Die Einsicht in das Wasserbuch, in seine Abschriften und diejenigen Urkunden auf die in der Eintragung Bezug genommen wird, ist deshalb jedem gestattet. Entsprechend der Anordnung über die Zuständigkeiten auf dem Gebiet des Wasserrechts und der Wasserwirtschaft gibt es in Hamburg zwei Dienststellen, die separat für ihren Zuständigkeitsbereich das Wasserbuch führen und dort Eintragungen ganz bestimmter Rechtsverhältnisse vornehmen. Die Wasserbücher dieser Dienststellen haben folgende Inhalte: * Wasserbuch der Behörde für Umwelt, Klima, Energie und Agrarwirtschaft (BUKEA/W2) Die Abteilung Abwasserwirtschaft (W2) der BUKEA, führt das Wasserbuch für Erlaubnisse nach § 10 WHG für die Einleitung von Abwasser in Gewässer bzw. für die Entnahme von Wasser aus Gewässern für folgende Gewässer: Außen- und Binnenalster samt elbseitiger Fleete, Elbe sowie alle Hafengewässer, Este, Dove-Elbe unterhalb der Tatenberger Schleuse, Untere Bille und ihre Kanäle, Harburger Binnenhafen, Kaufhauskanal, Östlicher Bahnhofskanal, Westlicher Bahnhofskanal sowie Schiffsgraben. Die Stammdaten aller Erlaubnisse sind vollständig in einer Datenbank erfasst; seit etwa Ende 1999 werden die kompletten Wasserbuchblatt-Inhalte von Neueintragungen und von Änderungen parallel in dieser Datenbank geführt. Das Wasserbuch enthält Daten über: - das Grundwasser (Ausnahme: Neuwerk), - Gewässer II. Ordnung (Ausnahme: Neuwerk) sowie - Gewässer I. Ordnung (Ausnahmen: Neuwerk/ Elbe/ Hafengewässer/ Erlaubnisse zum Einleiten oder Entnehmen nach § 8 WHG), - Regelungen über die Unterhaltung und den Ausbau oberirdischer Gewässer sowie - Regelungen und Entscheidungen über das Errichten und Verändern von staatlichen Hochwasserschutzanlagen und die Zulassung von Rohrleitungen in Deichen und Dämmen. * Wasserbuch der Hamburg Port Authority (HPA) Das Wasserbuch der HPA/213 - beinhaltet u.a. wasserrechtliche Genehmigungen über die Nutzung und den Ausbau der Gewässer Elbe, Hafengewässer, Este, Alten Süderelbe, Überschwemmungsgebiete der Elbe und Vorland der Alten Süderelbe sowie deichrechtliche Genehmigungen für die privaten Hochwasserschutzanlagen (Polder) und Nutzungen auf Neuwerk.
Das Wasserversorgungsnetz umfasst alle Versorgungs- und Hausanschlussleitungen sowie die Brunnen und das Wasserwerk. Die Daten werden stets aktuell gehalten und können in Form von pdf- oder dxf/dwg-Dateien angefordert werden.
Der zukünftig erhöhte Wasserstoffbedarf rückt den Transport über Pipelines in den Vordergrund. Durch lange Transportwege muss dieser regelmäßig auf seinen Ausgangsdruck verdichtet werden. Zur Komprimierung sind entsprechende Kompressoren notwendig, welche mit Koaleszenzfiltern ausgestattet werden müssen, um die Reinheit des Wasserstoffs beim Transport zu gewährleisten. Das Projekt beschäftigt sich mit der Entwicklung und Realisierung einer neuartigen Technologie zur Fertigung von Koaleszenzfiltermedien, welche mittels Schaumauftragsverfahren hergestellt werden. Ein gezieltes Design der Filtermedien ermöglicht eine Verringerung des Druckverlustes und somit ein enormes CO2-Einsparpotential. Um das CO2-Einsparpotential unter realen Bedingungen zu ermitteln, wird für Testzwecke ein Wasserstoffteststand aufgebaut. Parallel zu den Experimenten werden numerische Untersuchungen, die zu einem auf klassischen CFD-Verfahren basieren, als auch auf Machine-Learning basierten Ansätzen beruhen. Durch geeignete Co-Simulationen können Modelle für unterschiedliche Skalen berechnet werden. Die validierten Modelle werden für die Optimierung komplexer Filterstrukturen eingesetzt und erlauben eine Effizienz-Steigerung der Filtermedien.
Der zukünftig erhöhte Wasserstoffbedarf rückt den Transport über Pipelines in den Vordergrund. Durch lange Transportwege muss dieser regelmäßig auf seinen Ausgangsdruck verdichtet werden. Zur Komprimierung sind entsprechende Kompressoren notwendig, welche mit Koaleszenzfiltern ausgestattet werden müssen, um die Reinheit des Wasserstoffs beim Transport zu gewährleisten. Das Projekt beschäftigt sich mit der Entwicklung und Realisierung einer neuartigen Technologie zur Fertigung von Koaleszenzfiltermedien, welche mittels Schaumauftragsverfahren hergestellt werden. Ein gezieltes Design der Filtermedien ermöglicht eine Verringerung des Druckverlustes und somit ein enormes CO2-Einsparpotential. Um das CO2-Einsparpotential unter realen Bedingungen zu ermitteln, wird für Testzwecke ein Wasserstoffteststand aufgebaut. Parallel zu den Experimenten werden numerische Untersuchungen, die zu einem auf klassischen CFD-Verfahren basieren, als auch auf Machine-Learning basierten Ansätzen beruhen. Durch geeignete Co-Simulationen können Modelle für unterschiedliche Skalen berechnet werden. Die validierten Modelle werden für die Optimierung komplexer Filterstrukturen eingesetzt und erlauben eine Effizienz-Steigerung der Filtermedien.
Untersucht werden Waermeuebergang und Druckverlust an gesickten Rohren, die mit Luft durchstroemt werden. Die Beheizung erfolgt durch Warmwasser bzw. Dampf. Die Eigenschaften der Rohre werden sowohl in einer Einzelrohr-Versuchsanlage (dampfbeheizt) wie auch in einer Rohrbuendel-Versuchsanlage (wasserbeheizt) experimentell bestimmt. Die Versuchsdurchfuehrung und Auswertung erfolgt mit Hilfe einer elektronischen Messdatenerfassungsanlage. Ziel der Untersuchungen ist die Verbesserung des luftseitigen Waermeuebergangs der Rohre durch gezielte Aenderung der Rohrsickung. Der Vorteil der gesickten Rohre gegenueber Glattrohren besteht in der gesteigerten Waermeuebertragungsfaehigkeit bei gleichem Druckverlust.
Die VERBUND Innkraftwerke beantragen für die Errichtung un den Betrieb von zwei Verschlussbauwerken an den beiden be-reits vorhandenen Rohrleitung (DN 2000), di eim Trenndamm zwischen Innkanal (Unterwasser) und dem neu geschaffenen Stillgewässer unterhalb des alten Kraftwwerks in Töging a. Inn die Plangenehmigung und die stets widerrufliche beschränk-te Erlaubnis. Ziel der Maßnahmen ist die Verhinderung der regelmäßigen Verlandung des Stillgewässers durch den Eintrag von Innsediment -vor allem bei Hochwasser- und die Erhaltung des Stillgewässers als Lebens-, Laich- und Rückzugsraum für die hier vorkommenden Fische und andere Wasserlebewesen.
Kapital-, Verbrauchs- und Betriebskosten Einflussfaktoren in Bezug auf die Anfangsinvestitionen Einflussfaktoren auf Kosten im laufenden Betrieb Kosten aus der Perspektive von Wärmeabnehmenden Die Kosten für die Realisierung eines Nahwärmenetzes hängen von einer Vielzahl von Rahmenbedingungen ab, die bei der Investitionskalkulation sorgfältig geprüft werden müssen. Grundsätzlich sollten für eine betriebswirtschaftlich rationale Betrachtung dynamische Investitionsrechnungen unter Berücksichtigung von Kapital-, Verbrauchs- und Betriebskosten über einen festgelegten Nutzungszeitraum durchgeführt werden. Da es sich um sehr langfristige Investitionen handelt, sind statische Verfahren ungeeignet. Als Ergebnis können Kapitalwert oder Wärmegestehungskosten betrachtet werden. Die Kapitalwertmethode wird unter anderem detailliert in der DIN EN 17463 beschrieben. Die Methodik zum Annuitätenverfahren, bei dem der Kapitalwert auf regelmäßig wiederkehrende gleich hohe Zahlungen aufgeteilt wird, erläutert die VDI-Richtlinienreihe 2067. VDI-Richtlinienreihe 2067 Die Wärmegestehungskosten können aufgrund der vielen verschiedenen Einflussfaktoren stark schwanken. Daher ist es nicht möglich, „typische“ Wärmegestehungskosten für ein Nahwärmenetz anzugeben. Sie sind aber i.d.R. konkurrenzfähig mit den Vollkosten von dezentralen Lösungen, wie der BDEW-Heizkostenvergleich in den letzten Jahren gezeigt hat. Grundsätzlich gilt dabei, mit steigender Anschlussrate im Netzgebiet sinken die Kosten pro Energieeinheit. Um ein Gefühl für die Kosten Ihres spezifischen Projektes zu bekommen, ist es empfehlenswert, sich die verschiedenen Faktoren bewusst zu machen, die Relevanz für das eigene Projekt zu überprüfen und Beispiele für vergleichbare Projekte aus der Praxis auszuwerten. Eine aktuelle Studie der Prognos AG im Auftrag der Agora Energiewende analysiert die Wirtschaftlichkeit von klimaneutral betriebenen Wärmenetzen und nimmt dabei sowohl Fernwärmeversorger als auch die Endkunden und -kundinnen in den Blick. Folgende Einflussfaktoren sind zu berücksichtigen: Einflussfaktoren in Bezug auf die Anfangsinvestitionen (CAPEX) Vorbereitung und Planung: Bereits vor dem eigentlichen Bau können Kosten anfallen, beispielsweise für Machbarkeitsstudien, Probebohrungen, die eigentliche ausführungsreife Planung durch entsprechende Fachplaner und Genehmigungen. Bedarfsstruktur: Die Gesamtgröße des Versorgungsgebietes sowie die Dichte der anzuschließenden Gebäude (bzw. die Wärmedichte als Wärmebedarf pro Fläche oder Leitungslänge) haben einen großen Einfluss auf die Kosten. Je weiter die einzelnen Gebäude voneinander entfernt sind und je geringer der spezifische Wärmebedarf der einzelnen Gebäude, desto größer wird die erforderliche Trassenlänge pro gelieferter Energieeinheit und entsprechend steigen auch die Kosten. Erschließung der EE-Potenziale: Die Erschließung erneuerbarer Wärmequellen ist je nach lokalen Bedingungen mit Kosten verbunden, die ebenso nach Wärmequelle und Technologie variieren (Sonden, Kollektoren, etc.) Technische Anlagen: Hierunter fallen neben den eigentlichen Wärmeerzeugern wie Wärmepumpen oder solarthermische Anlagen auch die für die Umwälzung des Heizmediums benötigten Pumpen, Rohrleitungen, Verteiler und Sammler, alle Ventile und Armaturen und die Mess- und Regelungstechnik zur Überwachung der Betriebsbedingungen. Die Investitionen für die Rohrleitungen ist bei kalten Nahwärmenetzen üblicherweise geringer, da hier auf die Dämmung der Rohre verzichtet werden kann, dafür ist in jedem Gebäude eine Wärmepumpe erforderlich, wobei bei der Konzeptionierung festzulegen ist, ob sich diese noch im Eigentum des Netzbetreibers befinden oder bereits dem Kunden zuzuordnen sind. Wärmetrassen: Die Kosten für die Tiefbauarbeiten, um die Trassen des Wärmenetzes im Erdreich zu verlegen, sind stark von den Gegebenheiten vor Ort abhängig. An verdichteten urbanen Standorten sind die Verlegekosten tendenziell besonders hoch. In Bestandsquartieren sind die Kosten zudem meist deutlich höher als im Neubau. Technikzentrale: Diese muss entweder in einem eigenen Bauwerk untergebracht werden oder ein vorhandener Aufstellraum ausreichender Größe ist entsprechend zu ertüchtigen. Anschluss an leitungsgebundene Infrastruktur: Werden zur Versorgung einzelner Wärmeerzeuger Anschlüsse an das Strom- und Gasnetz oder ein Anschluss an ein übergeordnetes Fernwärmenetz benötigt, werden hierfür seitens der Infrastrukturbetreiber ebenfalls Kosten aufgerufen, die berücksichtigt werden müssen. Nutzeranschluss: Um die einzelnen Nutzer an das Netz anzuschließen werden neben den Anschlussleitungen auch Hauseinführungen in der Kellerwand oder Bodenplatte und Wärmeübergabestationen benötigt. Fremdkapitalkosten: Da in der Regel Kredite zur Finanzierung aufgenommen werden, haben deren Zinskonditionen einen Einfluss auf die Investitionskosten. Nutzung von Fördermöglichkeiten: Durch Nutzung von Bundes- und Landesfördermitteln können die Investitionskosten reduziert werden. Förder- und Finanzierungsmöglichkeiten Für die Betreiber bestehender oder neu errichteter Nahwärmenetze sind folgende Einflussfaktoren relevant für die laufenden Kosten, die sich prinzipiell aus Verbrauchs- und Betriebskosten zusammensetzen: Brennstoffkosten (inklusive CO 2 -Abgabe): Falls Biomasse oder ein Anteil fossiler Brennstoffe (z.B. Erdgas) zur Wärmeerzeugung genutzt werden, sind die Preise und deren Entwicklung ein wichtiger Faktor für die laufenden bzw. operativen Kosten. Hierbei beeinflusst die CO 2 -Abgabe bzw. ab Ende 2026 der CO 2 -Preis die Kosten für fossile Brennstoffe. Stromkosten: Die Entwicklung der Strompreise hat Einfluss auf die Kosten für den Betrieb von Wärmepumpen. Senken lassen sich diese Kosten, wenn vor Ort Strom aus erneuerbaren Energien (z.B. Photovoltaikanlagen) erzeugt und direkt für den Eigenverbrauch genutzt werden kann. Instandhaltungskosten: Sämtliche technischen Bestandteile des Wärmenetzes, wie die Wärmeerzeugungsanlagen oder Übergabestationen unterliegen Verschleiß, können beschädigt werden (beispielsweise durch Extremwetterereignisse) oder ausfallen. Im Betrieb sollte eine aktive Betriebsführung die Instandhaltung gewährleisten. Daher fallen über die Nutzungsdauer des Netzes auch Instandhaltungskosten an. Personalkosten: Für den laufenden Betrieb fallen auch Personalkosten, die abhängig von der Anzahl und Qualifikation der benötigten Mitarbeitenden in der technischen und kaufmännischen Betriebsführung sind. Weitere Kosten: Darüber hinaus können je nach Situation auch Versicherungskosten, Miete oder Pacht sowie Neben- und Betriebskosten in den Betriebsgebäuden anfallen. Werden die Kosten aus Verbraucherperspektive betrachtet, ist zunächst wichtig, sich die Unterschiede zwischen den Preisen bei der Versorgung über ein Wärmenetz und einer dezentralen Wärmeversorgung bewusst zu machen. Preise für die Versorgung über ein Wärmenetz bilden immer die Vollkosten ab (das heißt Kapital-, Verbrauchs- und Betriebskosten), während bei dezentralen Versorgungslösungen häufig nur die Verbrauchskosten gesehen und beispielsweise Kosten für Wartung und Instandhaltung oder Ersatzbeschaffungen vergessen werden. Für Gebäudeeigentümerinnen und -eigentümer, die den Anschluss an ein Nahwärmenetz für ihre Wärmeversorgung wählen, sind zum einen die gegebenenfalls einmalig anfallenden Anschlusskosten von Bedeutung, zum anderen der Wärmepreis. Der Wärmepreis setzt sich dabei i.d.R. aus einem leistungsabhängigen Grundpreis und einem verbrauchsabhängigen Arbeitspreis zusammen. Bei vielen Contractingmodellen macht der Grundpreis etwa 25% der Gesamtkosten aus, der Arbeitspreis etwa 75%. Anschlusskosten: Für die Kosten des Anschlusses an ein Nahwärmenetz wird vom jeweiligen Betreiber eine einmalige Gebühr erhoben. Der Anschluss kann gegebenenfalls auch gefördert werden. Förder- und Finanzierungsmöglichkeiten Grundpreis: Der jährliche Grundpreis wird vom Betreiber erhoben, um die Betriebs- und Wartungskosten des Netzes zu decken. Arbeitspreis: Der Arbeitspreis basiert auf dem Wärmeverbrauch der Abnehmerinnen und Abnehmer. Die Kosten sind von der Preisentwicklung der verwendeten Energieträger abhängig. Verbraucherseitig können die Wärmekosten durch eine Verringerung des Bedarfs mittels energetischer Gebäudesanierung sowie durch sparsames Nutzerverhalten gesenkt werden. Um ein Angebot zum Anschluss an ein Wärmenetz einordnen zu können, können online verfügbare Informationen zu Wärmenetzen mit ähnlicher Größenordnung und Technologie zum Vergleich herangezogen werden. Die Plattform waermepreise.info der drei Verbände Energieeffizienzverband für Wärme, Kälte und KWK e. V. (AGFW), Bundesverband der Energie- und Wasserwirtschaft e. V. (BDEW) und Verband kommunaler Unternehmen e. V. (VKU) soll für Transparenz sorgen. Sie bildet bislang aber vor allem große Fernwärmenetze ab. Vergleichswerte für kleine Nahwärmenetze können durch einen Erfahrungsaustausch mit Akteuren, die solche Netze bereits realisiert haben, gefunden werden. Zu berücksichtigen ist jedoch, dass die Preise auch durch lokale Besonderheiten (z.B. reichlich vorhandene Biomasse vor Ort im ländlichen Raum, kommunale Förderung, etc.) beeinflusst sein können.
Rohrleitungen an Fließgewässern in MV
# robbenblick A Computer Vision project for object detection and annotation management using YOLOv8, SAHI, and FiftyOne, with the primary aim of counting objects (Robben) in large aerial images. ## Overview This repository provides a complete MLOps pipeline for: * **Data Preparation:** Converting raw CVAT annotations (XML) and large images into a tiled, YOLO-compatible dataset. * **Automated Experiments:** Systematically training and tuning YOLOv8 models. * **Tiled Inference:** Running optimized inference (SAHI) on large, high-resolution images for object counting. * **Evaluation:** Assessing model performance for both detection (mAP) and counting (MAE, RMSE, R²). * **Visualization:** Analyzing datasets and model predictions interactively with FiftyOne. ## Pretrained Model Weights Pretrained model weights are available on Hugging Face: https://huggingface.co/ki-ideenwerkstatt-23/robbenblick/ ## Project Workflow The project is designed to follow a clear, sequential workflow: 1. **Prepare Data (`create_dataset.py`):** Organize your raw images and CVAT `annotations.xml` in `data/raw/` as shown below. ```text data/raw/ ├── dataset_01/ │ ├── annotations.xml │ └── images/ └── dataset_02/ ... ``` Run the script to generate a tiled, YOLO-formatted dataset in `data/processed/` and ground truth count CSVs. 2. **Tune Model (`run_experiments.py`):** Define a set of hyperparameters (e.g., models, freeze layers, augmentation) in `configs/base_iter_config.yaml`. Run the script to train a model for every combination and find the best performer. 3. **Validate Model (`yolo.py`):** Take the `run_id` of your best experiment and run validation on the hold-out `test` set to get **detection metrics (mAP)**. 4. **Infer & Count (`predict_tiled.py`):** Use the best `run_id` to run sliced inference on new, large images. This script generates final counts and visual outputs. 5. **Evaluate Counts (`evaluate_counts.py`):** Compare the `detection_counts.csv` from inference against the `ground_truth_counts.csv` to get **counting metrics (MAE, RMSE)**. 6. **Visualize (`run_fiftyone.py`):** Visually inspect your ground truth dataset or your model's predictions at any stage. ## Configuration This project uses two separate configuration files, managed by `robbenblick.utils.load_config`. * **`configs/base_config.yaml`** * **Purpose:** The single source of truth for **single runs**. * **Used By:** `create_dataset.py`, `predict_tiled.py`, `run_fiftyone.py`, and `yolo.py` (for validation/single-predict). * **Content:** Defines static parameters like data paths (`dataset_output_dir`), model (`model`), and inference settings (`confidence_thresh`). * **`configs/base_iter_config.yaml`** * **Purpose:** The configuration file for **experiments and tuning**. * **Used By:** `run_experiments.py`. * **Content:** Any parameter defined as a **YAML list** (e.g., `model: [yolov8n.pt, yolov8s.pt]`) will be iterated over. `run_experiments.py` will test every possible combination of all lists. ## Environment Setup 1. Clone the repository: ```sh git clone git@github.com:ki-iw/robbenblick.git cd robbenblick ``` 2. Create the Conda environment: ```sh conda env create --file environment.yml conda activate RobbenBlick ``` 3. (Optional) Install pre-commit hooks: ```sh pre-commit install ``` ## Core Scripts & Usage ### `create_dataset.py` * **Purpose:** Converts raw CVAT-annotated images and XML files into a YOLO-compatible dataset, including tiling and label conversion. * **How it works:** * Loads configuration from a config file. * Scans `data/raw/` for dataset subfolders. * Parses CVAT XML annotations and extracts polygons. * Tiles large images into smaller crops based on `imgsz` and `tile_overlap` from the config. * Converts polygon annotations to YOLO bounding box format for each tile. * Splits data into `train`, `val`, and `test` sets and writes them to `data/processed/dataset_yolo`. * Saves a `ground_truth_counts.csv` file in each raw dataset subfolder, providing a baseline for counting evaluation. * **Run:** ```sh # Do a 'dry run' to see statistics without writing files python -m robbenblick.create_dataset --dry-run --config configs/base_config.yaml # Create the dataset, holding out dataset #4 as the test set python -m robbenblick.create_dataset --config configs/base_config.yaml --test-dir-index 4 ``` * **Key Arguments:** * `--config`: Path to the `base_config.yaml` file. * `--dry-run`: Run in statistics-only mode. * `--test-dir-index`: 1-based index of the dataset subfolder to use as a hold-out test set. * `--val-ratio`: Ratio of the remaining data to use for validation. ### `run_experiments.py` * **Purpose:** **This is the main training script.** It automates hyperparameter tuning by iterating over parameters defined in `base_iter_config.yaml`. * **How it works:** * Finds all parameters in the config file that are lists (e.g., `freeze: [None, 10]`). * Generates a "variant" for every possible combination of these parameters. * For each variant, it calls `yolo.py --mode train` as a subprocess with a unique `run_id`. * After all runs are complete, it reads the `results.csv` from each run directory, sorts them by `mAP50`, and prints a final ranking table. * **Run:** ```sh # Start the experiment run defined in the iteration config python -m robbenblick.run_experiments --config configs/base_iter_config.yaml # Run experiments and only show the top 5 results python -m robbenblick.run_experiments --config configs/base_iter_config.yaml --top-n 5 ``` ### `predict_tiled.py` * **Purpose:** **This is the main inference script.** It runs a trained YOLOv8 model on new, full-sized images using Sliced Aided Hyper Inference (SAHI). * **How it works:** * Loads a trained `best.pt` model specified by the `--run_id` argument. * Loads inference parameters (like `confidence_thresh`, `tile_overlap`) from the `base_config.yaml`. * Uses `get_sliced_prediction` from SAHI to perform tiled inference on each image. * Saves outputs, including visualized images (if `--save-visuals`), YOLO `.txt` labels (if `--save-yolo`), and a `detection_counts.csv` file. * **Run:** ```sh # Run inference on a folder of new images and save the visual results python -m robbenblick.predict_tiled \ --config configs/base_config.yaml \ --run_id "best_run_from_experiments" \ --source "data/new_images_to_count/" \ --output-dir "data/inference_results/" \ --save-visuals ``` ### `evaluate_counts.py` * **Purpose:** Evaluates the *counting* performance of a model by comparing its predicted counts against the ground truth counts. * **How it works:** * Loads the `ground_truth_counts.csv` generated by `create_dataset.py`. * Loads the `detection_counts.csv` generated by `predict_tiled.py`. * Merges them by `image_name`. * Calculates and prints key regression metrics (MAE, RMSE, R²) to assess the accuracy of the object counting. * **Run:** ```sh # Evaluate the counts from a specific run python -m robbenblick.evaluate_counts \ --gt-csv "data/raw/dataset_02/ground_truth_counts.csv" \ --pred-csv "data/inference_results/detection_counts.csv" ``` ### `yolo.py` * **Purpose:** The core engine for training, validation, and standard prediction. This script is called by `run_experiments.py` for training. You can use it directly for validation. * **How it works:** * `--mode train`: Loads a base model (`yolov8s.pt`) and trains it on the dataset specified in the config. * `--mode validate`: Loads a *trained* model (`best.pt` from a run directory) and validates it against the `test` split defined in `dataset.yaml`. This provides **detection metrics (mAP)**. * `--mode predict`: Runs standard (non-tiled) YOLO prediction on a folder. * **Run:** ```sh # Validate the 'test' set performance of a completed run python -m robbenblick.yolo \ --config configs/base_config.yaml \ --mode validate \ --run_id "best_run_from_experiments" ``` ### `run_fiftyone.py` * **Purpose:** Visualizes datasets and predictions using FiftyOne. * **How it works:** * `--dataset groundtruth`: Loads the processed YOLO dataset (images and ground truth labels) from `data/processed/`. * `--dataset predictions`: Loads images, runs a specified model (`--run_id`) on them, and displays the model's predictions. * **Run:** ```sh # View the ground truth annotations for the 'val' split python -m robbenblick.run_fiftyone \ --config configs/base_config.yaml \ --dataset groundtruth \ --split val \ --recreate # View the predictions from 'my_best_run' on the 'test' split python -m robbenblick.run_fiftyone \ --config configs/base_config.yaml \ --dataset predictions \ --split test \ --run_id "my_best_run" \ --recreate ``` ### `streamlit_app.py` * **Purpose:** Quick test runs with the trained model of your choice for counting the seals in the image(s) and visualization. * **How it works:** * Loads the selected YOLO model from `runs/detect/`. * Upload images, run model, then displays the counts and model's predictions as image visualization. * **Run:** ```sh # View the ground truth annotations for the 'val' split export PYTHONPATH=$PWD && streamlit run robbenblick/streamlit_app.py ``` ## Recommended Full Workflow 1. **Add Raw Data:** * Place your first set of images and annotations in `data/raw/dataset_01/images/` and `data/raw/dataset_01/annotations.xml`. * Place your second set (e.g., from a different location) in `data/raw/dataset_02/images/` and `data/raw/dataset_02/annotations.xml`. 2. **Create Dataset:** * Run `python -m robbenblick.create_dataset --dry-run` to see your dataset statistics. Note the indices of your datasets. * Let's say `dataset_02` is a good hold-out set. Run: `python -m robbenblick.create_dataset --config configs/base_config.yaml --test-dir-index 2` * This creates `data/raw/dataset_02/ground_truth_counts.csv` for later. 3. **Find Best Model:** * Edit `configs/base_iter_config.yaml`. Define your experiments. ```yaml # Example: Test two models and two freeze strategies model: ['yolov8s.pt', 'yolov8m.pt'] freeze: [None, 10] yolo_hyperparams: scale: [0.3, 0.5] ``` * Run the experiments: `python -m robbenblick.run_experiments`. * Note the `run_id` of the top-ranked model, e.g., `iter_run_model_yolov8m.pt_freeze_10_scale_0.3`. 4. **Validate on Test Set (Detection mAP):** * Check your best model's performance on the unseen test data: `python -m robbenblick.yolo --mode validate --run_id "iter_run_model_yolov8m.pt_freeze_10_scale_0.3" --config configs/base_config.yaml` * This tells you how well it *detects* objects (mAP). 5. **Apply Model for Counting:** * Get a new folder of large, un-annotated images (e.g., `data/to_be_counted/`). * Run `predict_tiled.py`: `python -m robbenblick.predict_tiled --run_id "iter_run_model_yolov8m.pt_freeze_10_scale_0.3" --source "data/to_be_counted/" --output-dir "data/final_counts/" --save-visuals` * This creates `data/final_counts/detection_counts.csv`. 6. **Evaluate Counting Performance (MAE, RMSE):** * Now, compare the predicted counts (Step 5) with the ground truth counts (Step 2). Let's assume your "to_be_counted" folder *was* your `dataset_02`. `python -m robbenblick.evaluate_counts --gt-csv "data/raw/dataset_02/ground_truth_counts.csv" --pred-csv "data/final_counts/detection_counts.csv"` * This gives you the final MAE, RMSE, and R² metrics for your **counting task**. ## Additional Notes This repository contains only the source code of the project. The training data and the fine-tuned model weights are not included or published. The repository is currently not being actively maintained. Future updates are not planned at this time. For transparency, please note that the underlying model used throughout this project is based on **YOLOv8 by Ultralytics**. ## License Copyright (c) 2025 **Birds on Mars**. This project is licensed under the **GNU Affero General Public License v3.0 (AGPL-3.0)**. This aligns with the license of the underlying **YOLOv8** model architecture used in this project. Please note: **Training data and fine-tuned model weights are not part of the licensed materials** and are not included in this repository. For full details, see the LICENSE file. ## Troubleshooting ### FiftyOne: images (partially) not visible Try using `--recreate` flag to force FiftyOne to reload the dataset: ```sh python robbenblick/run_fiftyone.py --dataset groundtruth --split val --recreate ``` ### FiftyOne: failed to bind port If you get: ``` fiftyone.core.service.ServiceListenTimeout: fiftyone.core.service.DatabaseService failed to bind to port ``` Try killing any lingering `fiftyone` or `mongod` processes: ```sh pkill -f fiftyone pkill -f mongod Then rerun your script. ``` # Collaborators The code for this project has been developed through a collaborative effort between [WWF Büro Ostsee](https://www.wwf.de/themen-projekte/projektregionen/ostsee) and [KI-Ideenwerkstatt](https://www.ki-ideenwerkstatt.de), technical implementation by [Birds on Mars](https://birdsonmars.com). <p></p> <a href="https://ki-ideenwerkstatt.de" target="_blank" rel="noopener noreferrer"> <img src="assets/kiiw.jpg" alt="KI Ideenwerkstatt" height="100"> </a> <p></p> Technical realization <br> <a href="https://birdsonmars.com" target="_blank" rel="noopener noreferrer"> <img src="assets/bom.jpg" alt="Birds On Mars" height="100"> </a> <p></p> An AI initiative by <br> <a href="https://www.bundesumweltministerium.de/" target="_blank" rel="noopener noreferrer"> <img src="assets/bmukn.svg" alt="Bundesministerium für Umwelt, Klimaschutz, Naturschutz und nukleare Sicherheit" height="100"> </a> <p></p> In the context of <br> <a href="https://civic-coding.de" target="_blank" rel="noopener noreferrer"> <img src="assets/civic.svg" alt="Civic Coding" height="100"> </a>
Rohrleitung von größerem Durchmesser zum Fördern von Flüssigkeiten. In diesem Fall Trinkwasser.
| Origin | Count |
|---|---|
| Bund | 1430 |
| Kommune | 9 |
| Land | 299 |
| Wirtschaft | 1 |
| Wissenschaft | 21 |
| Zivilgesellschaft | 3 |
| Type | Count |
|---|---|
| Chemische Verbindung | 4 |
| Daten und Messstellen | 17 |
| Ereignis | 4 |
| Förderprogramm | 1196 |
| Repositorium | 1 |
| Software | 1 |
| Text | 254 |
| Umweltprüfung | 181 |
| WRRL-Maßnahme | 8 |
| unbekannt | 83 |
| License | Count |
|---|---|
| geschlossen | 355 |
| offen | 1340 |
| unbekannt | 46 |
| Language | Count |
|---|---|
| Deutsch | 1592 |
| Englisch | 293 |
| Resource type | Count |
|---|---|
| Archiv | 23 |
| Bild | 4 |
| Datei | 23 |
| Dokument | 245 |
| Keine | 990 |
| Multimedia | 1 |
| Unbekannt | 2 |
| Webdienst | 7 |
| Webseite | 505 |
| Topic | Count |
|---|---|
| Boden | 1005 |
| Lebewesen und Lebensräume | 1228 |
| Luft | 783 |
| Mensch und Umwelt | 1741 |
| Wasser | 1027 |
| Weitere | 1687 |