
Vor zwei Jahren sah ich durch versehentliches Einschalten des Fernsehers eine interessante Geschichte in der Vesti-Sendung. Es wurde mitgeteilt, dass das Moskauer Ministerium für Informationstechnologie ein neuronales Netzwerk erstellt, das die Messwerte von Wasserzählern anhand von Fotos ablesen kann. In der Geschichte bat der Fernsehmoderator die Stadtbewohner, dem Projekt zu helfen und Bilder ihrer Zähler an das mos.ru-Portal zu senden, um ein neuronales Netzwerk auf sie zu trainieren.
Wenn Sie eine Abteilung in Moskau sind, ist es kein großes Problem, ein Video auf dem Bundeskanal zu veröffentlichen und die Leute zu bitten, Bilder von Messgeräten zu senden. Aber was ist, wenn Sie ein kleines Startup sind und keine Werbung auf einem Fernsehkanal schalten können? Wie bekomme ich in diesem Fall 50.000 Bilder von Zählern? Yandex.Toloka kommt zur Rettung!
Yandex.Toloka ist eine Crowdsourcing-Plattform, auf der Menschen aus aller Welt einfache Aufgaben ausführen und dafür Geld erhalten. Zum Beispiel können Toloker Fußgänger im Bild finden, Sprachassistenten ausbilden und vieles mehr . Gleichzeitig können nicht nur Yandex-Mitarbeiter, sondern jeder, der dies wünscht, Aufgaben auf Toloka veröffentlichen.
Erklärung des Problems
Wir möchten also ein neuronales Netzwerk erstellen, das anhand des Fotos die Messwerte der Zähler ermittelt. Wo soll ich anfangen, welche Daten brauchen wir?
Nach Rücksprache mit Kollegen kommen wir zu dem Schluss, dass wir zum Erstellen von MVP 1000 Gegenbilder benötigen. Darüber hinaus möchten wir für jeden Zähler die aktuellen Messwerte sowie die Koordinaten des Fensters mit Zahlen kennen. 
Wenn Sie noch nie mit Toloka gearbeitet haben, empfehle ich Ihnen, den Artikel zu lesen, den ich vor einem Jahr geschrieben habe. Da der aktuelle Artikel technisch komplizierter sein wird, werde ich einige Punkte weglassen, die im vorherigen Artikel ausführlich beschrieben wurden.
DanksagungDer vorherige Artikel wurde TOP-2 in der Rangliste der Artikel aus der ODS- Community. Vielen Dank für das Kommentieren und Setzen der Profis!)

Teil 1. Bilderfassung
Was könnte einfacher sein? Sie müssen nur die Person bitten, die Yandex.Tolok-Anwendung auf ihrem Telefon zu öffnen und ein Foto von ihrem Zähler zu machen. Wenn ich mehrere Jahre nicht mit Toloka zusammengearbeitet hätte, wäre meine Anweisung: "Sie müssen Ihren Wasserzähler (heiß oder kalt) fotografieren und uns ein Bild senden . "
Leider kann mit einer solchen Erklärung des Problems kein guter Datensatz gesammelt werden. Die Sache ist, dass die Leute diese TK auf verschiedene Arten interpretieren können, da die Anweisungen keine klaren Kriterien für eine korrekt erledigte Aufgabe haben. Tolockers können senden:
- verschwommene Bilder;
- Bilder, die keine Beweise zeigen
- Bilder mit mehreren Zählern.
Der Toloka-Blog bietet ein großartiges Tutorial zum Schreiben von Anweisungen. Ich folgte ihm und bekam folgende Anweisung: 
Als Eingabeparameter übergeben wir die ID der Aufgabe und erhalten bei der Ausgabe die img-Datei, die das Bild des Zählers enthält.

Die Jobschnittstelle ist in nur 2 Zeilen geschrieben!

Beim Erstellen eines Pools geben wir die Zeit zum Abschließen der Aufgabe, die verspätete Annahme und den Preis für die Aufgabe 0,01 $ an.

Damit Personen die Aufgabe nicht mehrmals ausführen und nicht dieselben Fotos senden, untersagen wir die wiederholte Ausführung der Aufgabe im Qualitätskontrollblock.

Wir weisen darauf hin, dass wir russischsprachige Benutzer benötigen, die die Aufgabe über die mobile Anwendung Yandex.Tolok ausführen.

Aufgaben in den Pool herunterladen.

Wir starten den Pool, freuen uns und warten auf Benutzerantworten! So sieht unsere Aufgabe von der Seite des Tolokers aus:
Teil 2. Annahme von Aufgaben
Nachdem wir ein paar Stunden gewartet haben, sehen wir, dass die Tolkers die Aufgabe erledigt haben. Da bei verspäteter Annahme die Prämie nicht sofort an den Auftragnehmer ausgezahlt wird, sondern in der Bilanz des Kunden eingefroren wird, müssen wir jetzt alle gesendeten Bilder überprüfen. Wenn gutgläubige Künstler Aufgaben annehmen und Künstler, die für die Kriterien ungeeignete Bilder gesendet haben, den Grund für die Ablehnung ablehnen und aufschreiben.
Wenn nicht viele Bilder vorhanden wären, könnten wir alle selbst gesendeten Bilder anzeigen und überprüfen. Aber wir wollen Tausende und Zehntausende von Bildern bekommen! Das Überprüfen dieses Aufgabenvolumens erfordert viel Zeit. Außerdem erfordert dieser Prozess unsere direkte Teilnahme.
Toloka kommt wieder zur Rettung! Wir können eine neue Aufgabe "Überprüfen von Gegenbildern" erstellen und andere Tolker bitten, zu antworten, ob das Bild unseren Kriterien entspricht oder nicht. Durch einmaliges Einrichten des Prozesses erhalten wir eine vollautomatische Datenerfassung und -validierung! Gleichzeitig ist die Datenerfassung leicht skalierbar. Wenn Sie das Dataset mehrmals vergrößern müssen, klicken Sie einfach auf einige Schaltflächen.
Klingt großartig und großartig, nicht wahr?
Dann ist es Zeit, die Idee in die Praxis umzusetzen!
Zunächst definieren wir die Kriterien, nach denen wir das Foto als gut betrachten.
Ein Foto ist gut, wenn:
- Auf dem Foto befindet sich genau eine Theke mit kaltem oder heißem Wasser.
- Die Messwerte auf der Theke sind deutlich sichtbar.
In anderen Fällen wird das Foto als schlecht angesehen.
Wir haben die Kriterien geklärt, jetzt schreiben wir eine Anweisung! 
Als Eingabeparameter übergeben wir den Link zum Bild. Die Ausgabe besteht aus zwei Flags:
- check_count - Antwort auf die erste Frage
- check_quality - Antwort auf die zweite Frage
Der Zähler wird in die Wertvariable geschrieben.

Die Schnittstelle dieser Aufgabe benötigt bereits 14 Zeilen.

Um die Genauigkeit zu erhöhen, wird ein Bild unabhängig von 5 Token überprüft. Dazu wird eine Überlappung von 5 gesetzt. Danach werden wir untersuchen, wie 5 Personen geantwortet haben, und davon ausgehen, dass die richtige Antwort diejenige ist, für die die Mehrheit gestimmt hat. Diese Aufgabe hat die Annahme nicht länger verzögert.

Lassen Sie uns 50% der besten Leistungsträger für die Aufgabe zulassen.

Bei Aufgaben ohne verspätete Annahme erhält jeder eine Zahlung, unabhängig davon, ob er die Aufgabe korrekt ausführt oder nicht. Wir möchten jedoch, dass die Toloker die Anweisungen sorgfältig lesen und versuchen, die Aufgabe korrekt auszuführen. Wie kann dies erreicht werden?
In Tolok gibt es zwei Hauptwerkzeuge, mit denen Sie eine gute Qualität aufrechterhalten können:
- Schulung. Bevor wir die Hauptaufgabe erledigen, können wir die Trainer bitten, sich schulen zu lassen. Im Trainingspool erhalten die Mitarbeiter Aufgaben, für die wir im Voraus die richtigen Antworten kennen. Wenn eine Person falsch geantwortet hat, wird ihr ein Fehler angezeigt und erklärt, wie sie antworten soll. Nach Abschluss der Schulung sehen wir, wie viel Prozent der Aufgaben der Darsteller erledigt hat, und wir können nur diejenigen zulassen, die den Hauptaufgabenpool gut erledigt haben.
- Qualitätskontrollblöcke. Es mag eine Situation geben, in der der Trainingspool des Darstellers ausgezeichnet war, wir durften es tun, aber fünf Minuten später ging er zum Fußballspielen und ließ seinen dreijährigen Bruder am Computer zurück. Glücklicherweise gibt es in Tolok viele Methoden, mit denen Sie verfolgen können, wie Personen Aufgaben erledigen.
Mit dem Trainingspool ist alles einfach: Fügen Sie einfach Aufgaben hinzu, markieren Sie sie in der Yandex.Tolki-Oberfläche und geben Sie den Schwellenwert für das Bestehen an, ab dem wir den Mitarbeitern die Hauptaufgabe ermöglichen.

Bei Qualitätskontrollgeräten ist alles interessanter: Es gibt ziemlich viele davon, aber ich werde mich auf die beiden wichtigsten konzentrieren.
Mehrheitsmeinung
Wir geben die Aufgabe an 5 unabhängige Personen. Und wenn vier Personen die Frage mit „Ja“ und die fünfte mit „Nein“ beantworten, hat die fünfte wahrscheinlich einen Fehler gemacht. Auf diese Weise können wir beobachten, wie die Antworten der Person mit den Antworten anderer Personen übereinstimmen, und Benutzer blockieren, die anders als die anderen antworten.

Kontrollaufgaben
Wir können Aufgaben in den Pool mischen, für die wir im Voraus die richtige Antwort kennen. Gleichzeitig sehen Qualitätskontrollaufgaben genauso aus wie normale Aufgaben. Auf der Grundlage, ob eine Person die Kontrollaufgaben richtig beantwortet, können wir extrapolieren und davon ausgehen, dass sie alle anderen Aufgaben löst, für die wir die Antworten nicht kennen. Wenn eine Person schlecht auf Kontrollaufgaben reagiert, können wir sie blockieren. Wenn es gut ist, geben Sie einen Bonus aus.

Hurra, Aufgabe erstellt! So sieht die Schnittstelle vom Executor aus:

Teil 3. Beitritt zu Jobs
Großartig, Aufgaben sind fertig! Es stellt sich jedoch die Frage, wie Aufgaben miteinander verbunden werden können. Wie mache ich den zweiten Lauf nach der ersten Aufgabe?
Natürlich können Sie mit einem Tamburin spielen und dies manuell über die Toloka-Oberfläche tun, aber es gibt einen einfacheren und schnelleren Weg! Yandex.Tolok hat eine API , benutze sie und schreibe ein Python-Skript!
Ich weiß, dass viele von Ihnen Code nicht gerne lesen, deshalb habe ich ihn unter einem Spoiler verstecktimport pandas as pd import numpy as np import requests import boto3
Wir führen den Code aus und hier ist das lang erwartete Ergebnis: Der Datensatz von 871 Gegenbildern ist fertig.

Preis
Lassen Sie uns die wirtschaftliche Komponente des Projekts bewerten.
Für das gesendete Bild in der ersten Aufgabe bieten wir 0,01 USD an.
Wenn wir dem Darsteller 0,01 USD zahlen, müssen wir leider 0,018 USD zahlen.
Wie wird das gemacht?
- Die Yandex-Provision beträgt min (0,005,20%). Für eine Aufgabe mit einem Preis von 0,01 $ beträgt die Provision 50%;
- Die Mehrwertsteuer beträgt 20%.
Für die Überprüfung von 10 Bildern von Zählern zahlen wir 0,01 USD. In diesem Fall wird ein Bild fünfmal von unabhängigen Personen überprüft. Insgesamt geben wir zur Überprüfung eines Bildes an: (0,01 x 5/10) x 1,2 x 1,5 = 0,009 USD.
Von den 1000 gesendeten Einsendungen gingen 871 Bilder ein und 129 wurden abgelehnt. Um einen Datensatz mit 871 Bildern zu erhalten, haben wir Folgendes bezahlt:
0,018 $ x 871 + 0,009 $ x 1000 = $ 25 und Sie benötigen 92.000 Rubel, um einen Datensatz mit 50.000 Bildern zu erhalten. Dies ist definitiv billiger als die Bestellung von Anzeigen auf dem Bundeskanal!
Diese Zahl kann jedoch tatsächlich mehrmals reduziert werden. Sie können:
- Schlagen Sie in der ersten Aufgabe vor, nicht ein, sondern mehrere Fotos aufzunehmen. Wenn Sie gleichzeitig den Preis erhöhen, beträgt die Yandex-Provision nicht 50%, sondern 20%.
- Verwenden Sie in der zweiten Aufgabe die dynamische Überlappung. Wenn 4 von 5 Personen dieselbe Antwort gaben, ist es nicht sinnvoll, die Aufgabe der fünften Person zu übertragen.
- Arbeiten Sie mit Toloka als ausländische juristische Person zusammen. In diesem Fall zahlen Sie keine Mehrwertsteuer.
Da es so viel Material gab, beschloss ich, den Artikel in zwei Teile zu teilen. Das nächste Mal werden wir mit Ihnen darüber sprechen, wie Sie mit Toloka Objekte in Bildern auswählen und Datensätze für Aufgaben in Computer Vision erstellen. Und um nicht zu verpassen, abonnieren und mögen!
PS
Nach dem Lesen des Artikels scheint es Ihnen, dass dies eine versteckte Werbung von Yandex.Tolki ist, aber nein, das ist es nicht. Yandex hat mir nichts bezahlt und wird höchstwahrscheinlich auch nicht bezahlen. Ich wollte nur an einem fiktiven, aber relevanten und interessanten Beispiel zeigen, wie Sie mit diesem Service schnell und kostengünstig einen Datensatz für jede Aufgabe zusammenstellen können, sei es die Aufgabe, Katzen zu erkennen oder unbemannte Fahrzeuge zu trainieren.