Die Datensatzvorbereitung für einen Workflow für Objekterkennungstrainings kann lange dauern und oft frustrierend sein. Label StudioEin Open-Supply-Datenannotation-Instrument kann durch eine einfache Möglichkeit für die Annotierung von Datensätzen mitwirken. Es unterstützt eine Vielzahl von Annotationsvorlagen, einschließlich Laptop Imaginative and prescient, natürlicher Sprachverarbeitung und Audio- oder Sprachverarbeitung. Wir werden uns jedoch speziell auf den Workflow der Objekterkennung konzentrieren.
Aber was ist, wenn Sie vorankundigierte Open-Supply-Datensätze wie den Pascal VOC-Datensatz nutzen möchten? In diesem Artikel zeige ich Ihnen, wie Sie diese Aufgaben problemlos in das Format von Label Studio importieren können, während Sie den gesamten Stapel einrichten – einschließlich einer PostgreSQL -Datenbank. Minio Objektspeicher, ein Nginx Reverse Proxy und das Label Studio Backend. Minio ist ein S3-kompatibler Objektspeicherdienst: Sie können Cloud-nativen Speicher in der Produktion verwenden, können ihn jedoch auch lokal für die Entwicklung und Prüfung ausführen.
In diesem Tutorial werden wir die folgenden Schritte durchlaufen:
- Pascal VOC -Anmerkungen konvertieren – Begrenzungsboxen von XML in Label Studio -Aufgaben im JSON -Format verwandeln.
- Führen Sie den vollen Stapel aus – Starten Sie das Label Studio mit Postgresql, Minio, Nginx und dem Backend mit Docker Compose.
- Richten Sie ein Label Studio -Projekt ein – Konfigurieren Sie ein neues Projekt in der Label Studio -Schnittstelle.
- Laden Sie Bilder und Aufgaben in Minio hoch hoch -Speichern Sie Ihren Datensatz in einem S3-kompatiblen Eimer.
- MINIO MINIO mit dem Label Studio anschließen – Fügen Sie den Cloud -Speicher -Bucket Ihrem Projekt hinzu, damit Label Studio Bilder und Annotationen direkt abrufen kann.
Voraussetzungen
Um diesem Tutorial zu folgen, stellen Sie sicher, dass Sie:
Vom VOC zu Label Studio: Vorbereitung von Anmerkungen
Der Pascal VOC -Datensatz verfügt über eine Ordnerstruktur, in der die Zug- und Testdatensätze bereits aufgeteilt sind. Der Anmerkungen Der Ordner enthält die Annotationsdateien für jedes Bild. Insgesamt enthält der Trainingssatz 17.125 Bilder mit jeweils eine entsprechende Annotationsdatei.
.
└── VOC2012
├── Annotations # 17125 annotations
├── ImageSets
│ ├── Motion
│ ├── Format
│ ├── Primary
│ └── Segmentation
├── JPEGImages # 17125 pictures
├── SegmentationClass
└── SegmentationObject
Das folgende XML -Snippet, das aus einer der Annotationen entnommen wurde, definiert einen Begrenzungsbox um ein Objekt mit dem Namen „Individual“. Die Field wird mit vier Pixelkoordinaten angegeben: xminAnwesend yminAnwesend xmaxUnd ymax.

Die folgende Abbildung zeigt das innere Rechteck als kommentierter Begrenzungsbox, definiert durch die obere linke Ecke (xminAnwesend ymin) und die untere rechte Ecke (xmaxAnwesend ymax) innerhalb des äußeren Rechtecks, das das Bild darstellt.

Label Studio erwartet, dass jede Begrenzungsbox durch seine Breite, Höhe und obere linke Ecke definiert wird, die als Prozentsätze der Bildgröße ausgedrückt wird. Nachfolgend finden Sie ein funktionierendes Beispiel für das konvertierte JSON -Format für die oben gezeigte Annotation.
{
"knowledge": {
"picture": "s3://<bucket_name>/<prefix>/2007_000027.jpg"
},
"annotations": (
{
"consequence": (
{
"from_name": "label",
"to_name": "picture",
"sort": "rectanglelabels",
"worth": {
"x": 35.802,
"y": 20.20,
"width": 36.01,
"top": 50.0,
"rectanglelabels": ("particular person")
}
}
)
}
)
}
Wie Sie im JSON -Format sehen können, müssen Sie auch den Speicherort der Bilddatei angeben – beispielsweise einen Pfad in Minio oder einem S3 -Bucket, wenn Sie den Cloud -Speicher verwenden.
Während der Vorverarbeitung der Daten habe ich den gesamten Datensatz zusammengeführt, obwohl diese bereits in Coaching und Validierung unterteilt waren. Dies simuliert ein reales Szenario, in dem Sie normalerweise mit einem einzigen Datensatz beginnen und die Aufteilung in Trainings- und Validierungssätze vor dem Coaching selbst durchführen.
Ausführen des vollständigen Stacks mit Docker Compose
Ich habe das zusammengeführt docker-compose.yml Und docker-compose.minio.yml Dateien in eine vereinfachte Einzelkonfiguration, damit der gesamte Stack im selben Netzwerk ausgeführt wird. Beide Dateien wurden vom Beamten übernommen Label Studio Github Repository.
providers:
nginx:
# Acts as a reverse proxy for Label Studio frontend/backend
picture: heartexlabs/label-studio:newest
restart: unless-stopped
ports:
- "8080:8085"
- "8081:8086"
depends_on:
- app
setting:
- LABEL_STUDIO_HOST=${LABEL_STUDIO_HOST:-}
volumes:
- ./mydata:/label-studio/knowledge:rw # Shops Label Studio tasks, configs, and uploaded recordsdata
command: nginx
app:
stdin_open: true
tty: true
picture: heartexlabs/label-studio:newest
restart: unless-stopped
expose:
- "8000"
depends_on:
- db
setting:
- DJANGO_DB=default
- POSTGRE_NAME=postgres
- POSTGRE_USER=postgres
- POSTGRE_PASSWORD=
- POSTGRE_PORT=5432
- POSTGRE_HOST=db
- LABEL_STUDIO_HOST=${LABEL_STUDIO_HOST:-}
- JSON_LOG=1
volumes:
- ./mydata:/label-studio/knowledge:rw # Shops Label Studio tasks, configs, and uploaded recordsdata
command: label-studio-uwsgi
db:
picture: pgautoupgrade/pgautoupgrade:13-alpine
hostname: db
restart: unless-stopped
setting:
- POSTGRES_HOST_AUTH_METHOD=belief
- POSTGRES_USER=postgres
volumes:
- ${POSTGRES_DATA_DIR:-./postgres-data}:/var/lib/postgresql/knowledge # Persistent storage for PostgreSQL database
minio:
picture: "minio/minio:${MINIO_VERSION:-RELEASE.2025-04-22T22-12-26Z}"
command: server /knowledge --console-address ":9009"
restart: unless-stopped
ports:
- "9000:9000"
- "9009:9009"
volumes:
- minio-data:/knowledge # Shops uploaded dataset objects (like pictures or JSON duties)
# configure env vars in .env file or your techniques setting
setting:
- MINIO_ROOT_USER=${MINIO_ROOT_USER:-minio_admin_do_not_use_in_production}
- MINIO_ROOT_PASSWORD=${MINIO_ROOT_PASSWORD:-minio_admin_do_not_use_in_production}
- MINIO_PROMETHEUS_URL=${MINIO_PROMETHEUS_URL:-http://prometheus:9090}
- MINIO_PROMETHEUS_AUTH_TYPE=${MINIO_PROMETHEUS_AUTH_TYPE:-public}
volumes:
minio-data: # Named quantity for MinIO object storage
Diese vereinfachte Docker Compose -Datei definiert vier Kerndienste mit ihren Volumenzuordnungen:
App – führt das Label Studio Backend selbst aus.
- Teilt die
mydataVerzeichnis mit nginx, in dem Projekte, Konfigurationen und hochgeladene Dateien gespeichert werden. - Verwendet a Binden Sie die Halterung:
./mydata:/label-studio/knowledge:rw→ bildet einen Ordner von Ihrem Host in den Container.
Nginx – fungiert als Reverse Proxy für das Label Studio Frontend und Backend.
- Teilt die
mydataVerzeichnis mit dem App -Dienst.
PostgreSQL (DB) – Verwaltet Metadaten und Projektinformationen.
- Speichert persistente Datenbankdateien.
- Verwendet a Binden Sie die Halterung:
${POSTGRES_DATA_DIR:-./postgres-data}:/var/lib/postgresql/knowledge.
Minio -Ein S3-kompatibler Objektspeicherdienst.
- Speichert Datensatzobjekte wie Bilder oder JSON -Annotationsaufgaben.
- Verwendet a Volumen genannt:
minio-data:/knowledge.
Wenn Sie Hostordner wie montieren, z. ./mydata Und ./postgres-dataSie müssen dem Host demselben Benutzer, der im Container ausgeführt wird, Eigentümer zuweisen. Label Studio wird nicht als Root ausgeführt-es verwendet einen Nicht-Root-Benutzer mit UID 1001. Wenn die Hostverzeichnisse einem anderen Benutzer gehören, hat der Container keinen Schreibzugriff und Sie werden darauf eingehen Zugriff verweigert Fehler.
Nachdem Sie diese Ordner in Ihrem Projektverzeichnis erstellt haben, können Sie deren Besitz mit:
mkdir mydata
mkdir postgres-data
sudo chown -R 1001:1001 ./mydata ./postgres-data
Nachdem die Verzeichnisse vorbereitet sind, können wir den Stapel mit Docker Compose ansprechen. Einfach rennen:
docker compose up -d
Es kann einige Minuten dauern, bis alle erforderlichen Bilder von Docker Hub und Label Studio eingerichtet wurden. Sobald das Setup abgeschlossen ist, öffnen Sie sich http: // localhost: 8080 In Ihrem Browser zugreifen Sie auf die Label Studio -Schnittstelle. Sie müssen ein neues Konto erstellen, und dann können Sie sich mit Ihren Anmeldeinformationen anmelden, um auf die Benutzeroberfläche zuzugreifen. Sie können ein Legacy -API -Token aktivieren, indem Sie zu gehen Organisation → API -Token -Einstellungen. Mit diesem Token können Sie mit der Label Studio API kommunizieren, die besonders für Automatisierungsaufgaben nützlich ist.
Richten Sie ein Label Studio -Projekt ein
Jetzt können wir unser erstes Datenannotationsprojekt auf Label Studio erstellen, insbesondere für einen Workflow für Objekterkennung. Bevor Sie jedoch anfangen, Ihre Bilder zu kommentieren, müssen Sie die Arten von Klassen definieren, aus denen Sie auswählen können. Im Pascal VOC-Datensatz gibt es 20 Arten vorankündigter Objekte.

Laden Sie Bilder und Aufgaben in Minio hoch hoch
Sie können die Minio -Benutzeroberfläche in Ihrem Browser unter öffnen LOCALHOST: 9000und melden Sie sich dann mit den Anmeldeinformationen an, die Sie unter dem entsprechenden Dienst in der angegeben haben docker-compose.yml Datei.
Ich habe einen Eimer mit Ordnern erstellt, von denen einer zum Speichern von Bildern und eine andere für JSON -Aufgaben verwendet wird, die gemäß den obigen Anweisungen formatiert sind.

Wir haben einen S3-ähnlichen Service lokal eingerichtet, mit dem wir S3 Cloud-Speicher simulieren können, ohne Gebühren zu erfüllen. Wenn Sie Dateien in einen S3 -Bucket auf AWS übertragen möchten, ist es besser, dies direkt über das Web zu tun, da die Datenübertragungskosten berücksichtigt werden. Die gute Nachricht ist, dass Sie mit dem AWS -CLI auch mit Ihrem Minio -Eimer interagieren können. Dazu müssen Sie ein Profil in hinzufügen ~/.aws/config und geben die entsprechenden Anmeldeinformationen in ~/.aws/credentials unter dem gleichen Profilnamen.
Und dann können Sie mit den folgenden Befehlen problemlos mit Ihrem lokalen Ordner synchronisieren:
#!/bin/bash
set -e
PROFILE=<your_profile_name>
MINIO_ENDPOINT=<your_minio_endpoint> # e.g. http://localhost:9000
BUCKET_NAME=<your_bucket_name>
SOURCE_DIR=<your_local_source_dir>
DEST_DIR=<your_bucket_destination_dir>
aws s3 sync
--endpoint-url "$MINIO_ENDPOINT"
--no-verify-ssl
--profile "$PROFILE"
"$SOURCE_DIR" "s3://$BUCKET_NAME/$DEST_DIR"
MINIO MINIO mit dem Label Studio anschließen
Nachdem alle Daten, einschließlich der Bilder und Anmerkungen, hochgeladen wurden, können wir uns mit dem im vorherigen Schritt erstellten Projekt zum Hinzufügen von Cloud -Speicher überlegen.
Aus Ihren Projekteinstellungen gehen Sie zu Wolkenspeicher und fügen Sie die erforderlichen Parameter hinzu, wie z. B. den Endpunkt (der zusammen mit der Portnummer, z. minio:9000), der Bucket -Identify und das relevante Präfix, bei dem die Annotationsdateien gespeichert werden. Jeder Pfad in den JSON -Dateien verweist dann auf das entsprechende Bild.

Nach der Überprüfung, ob die Verbindung funktioniert, können Sie Ihr Projekt mit dem Cloud -Speicher synchronisieren. Möglicherweise müssen Sie den Befehl sync mehrmals ausführen, da der Datensatz 22.263 Bilder enthält. Es magazine zuerst scheitern, aber wenn Sie die Synchronisierung neu starten, macht es weiterhin Fortschritte. Schließlich werden alle Pascal VOC -Daten erfolgreich in das Label Studio importiert.

Sie können die importierten Aufgaben mit ihren Miniaturbildern in der Aufgabenliste sehen. Wenn Sie auf eine Aufgabe klicken, wird das Bild mit seinen Vorannotungen angezeigt.

Schlussfolgerungen
In diesem Tutorial haben wir gezeigt, wie der Pascal VOC-Datensatz in Label Studio importiert wird, indem Sie XML-Annotationen in das JSON-Format von Label Studio konvertieren, einen vollständigen Stack mit Docker Compose ausführen und Minio als S3-kompatibler Speicher anschließen. Mit diesem Setup können Sie auf Ihre lokale Maschine mit großflächigen, vorankundigten Datensätzen auf Ihre lokale Maschine arbeiten. Das Testen Ihrer Projekteinstellungen und Dateiformate lokal sorgt zuerst für einen reibungsloseren Übergang, wenn Sie in Cloud -Umgebungen wechseln.
Ich hoffe, dieses Tutorial hilft Ihnen dabei, Ihr Datenannotationsprojekt mit vorankündigten Daten zu starten, die Sie problemlos erweitern oder validieren können. Sobald Ihr Datensatz für das Coaching bereit ist, können Sie alle Aufgaben in beliebten Formaten wie Coco oder Yolo exportieren.
