Unser Fall ist eine Streaming-Site für Gamer, E-Sportler und Fans von Live-Übertragungen im Twitch.tv- Format . Einige Benutzer senden Unterhaltungsinhalte, während andere sie ansehen. Der Inhalt kann sehr unterschiedlich sein: Spiele, Live-Musik, Interaktiv, Mukbang, ASMR, Kochen, Podcasts usw. - und ist im Prinzip nur durch die Vorstellungskraft des Streamers beschränkt.
Und die Plattformregeln, die von den Moderatoren überwacht werden.
Warum unsichere Inhalte moderieren? Dafür gibt es zwei Gründe. Das erste ist die derzeitige russische Gesetzgebung , nach der die Verbreitung von Pornografie illegal ist. Der zweite Grund ist die Benutzererfahrung . Die Plattform richtet sich an Menschen jeden Alters und wir können uns keine Inhalte für Erwachsene auf der Homepage leisten.
Als wir vor die Aufgabe gestellt wurden, unsichere Inhalte zu verfolgen, wurde sofort klar, dass es nicht so einfach war, zwischen sicheren und unsicheren Inhalten zu unterscheiden. Das erste, was zu verstehen war, war, dass Porno und Nacktheit keine identischen Konzepte sind.
Bei Pornografie geht es nicht unbedingt um Nacktheit: Sex in Kleidung ist ein unsicherer Inhalt und kann im Laufe der Zeit oft nur von „sicherem“ Inhalt unterschieden werden.
Bei Nacktheit geht es nicht unbedingt um NSFW: Sumo, Wrestling, Menschen in Latex - all dies sind sichere Inhalte, bei denen offene Lösungen oft falsch ausgearbeitet werden.
Basierend auf diesen Überlegungen begannen wir zu untersuchen, wie dieses Problem gelöst werden kann. Von den interessanten Open-Source-Lösungen existiert das Open-NSFW- Modell von Yahoo, das auf geschlossenen Daten trainiert ist, seit mehreren Jahren ( Implementierung auf TF ). Es gibt auch ein cooles offenes Repository von Alexander Kim nsfw Data Scraper , aus dem Sie mehrere hunderttausend Bilder von reddit, imgur und scheinbar einigen anderen Sites erhalten können. Die Bilder sind in fünf Klassen unterteilt: Porno, Hentai, Erotik, Neutral und Zeichnungen . Auf der Grundlage dieser Daten gibt es viele Modelle, wie z. B. die Zeit, Zwei
Open - Source - Lösungen von verschiedenen Problemen leiden - im Großen und Ganzen der geringe Qualität einiger Modelle, Fehlbedienung auf den oben genannten komplexen Fällen und sichere Bildern wie Mädchen und twerking Meme mit Ricardo Milos sowie der problematischen Revision, weil entweder die Modelle sind veraltet und trainierten auf geschlossene Daten, oder die Daten sind sehr verrauscht und haben eine unvorhersehbare Verteilung.
Wir sind zu dem Schluss gekommen, dass der zeitliche Kontext für ein gutes Modell wichtig ist, dh der zeitliche Kontext, mit dessen Hilfe wir komplexere Fälle in der Dynamik erfassen können. Die Aussage des Problems wird offensichtlich.
Aktionen erkennen
In unserem Fall ist dies immer noch dieselbe binäre Klassifizierung, aber anstelle eines Bildes geben wir eine Folge von Frames als Eingabe ein.
Wie lösen sie dieses Problem? Im achtzehnten Jahr gab es eine hervorragende Bewertung von qure.ai, und es scheint, dass seitdem keine radikalen Fortschritte auf diesem Gebiet erzielt wurden, daher empfehle ich es. Die interessantere Recherche zum Thema des Videos wurde zu einer schwierigeren Aufgabe, das Video zu verstehen und erneut zu erzählen. Es gibt Grafikgitter und selbstüberwachtes Lernen - der zweite Tag beim letzten Machines Can See war sogar ganz diesem Thema gewidmet .
Also die Klassifizierung von Aktionen. Die Geschichte des Fortschritts in neuronalen Netzwerkmodellen ist ungefähr die folgende: Zuerst trainierten sie dreidimensionale Faltungsnetzwerke von Grund auf neu (C3D), dann versuchten sie, Faltungen mit einer Art wiederkehrender Architektur oder einem Aufmerksamkeitsmechanismus zu versuchen; Irgendwann schlug Andrey Karpaty vor, Ansichten aus verschiedenen Frames auf unterschiedliche Weise zusammenzuführen. Noch später wurde es zum Standard, zweiköpfige Modelle zu erstellen, bei denen eine Folge von Frames in BGR / RGB einem Eingang zugeführt und ein dichter optischer Strom auf den anderen gezählt wird . Es gab auch einige Witze über die Verwendung zusätzlicher Funktionen und spezieller Ebenen wie NetVLAD. Als Ergebnis haben wir uns die Modelle angesehen, die im UCF101- Benchmark am besten abschnitten.Dabei werden die Videos in 101 Sammelklagen eingeteilt. Es stellte sich heraus, dass dieses Modell die I3D-Architektur von DeepMind ist. Es hat uns am besten gefallen, also werde ich Ihnen mehr darüber erzählen.
DeepMind I3D
Als Basis haben wir versucht, C3D und CNN-LSTM zu trainieren - beide Modelle brauchen viel Zeit, um zu lernen und langsam zu konvergieren. Dann haben wir I3D übernommen und das Leben wurde besser. Dies sind zwei dreidimensionale Faltungsnetzwerke für BGR und optischen Fluss, aber es gibt eine Besonderheit - im Gegensatz zu früheren Modellen ist dieses auf ImageNet und seinem eigenen Datensatz von Deepmind Kinetics-700 vorab trainiert , in dem 650.000 Clips und 700 Klassen enthalten sind. Dies ermöglicht eine extrem schnelle Konvergenz des Modells in wenigen Stunden zu guter Qualität.
In der Produktion verwenden wir nur einen RGB-Kopf, da dieser doppelt so schnell ist und der optische Fluss nicht wirklich an Qualität verliert. Irgendwo kann er sogar noch schlimmer sein, da wir hauptsächlich einen Computerbildschirm und Webcams streamen, auf denen der Inhalt gespeichert ist manchmal ziemlich statisch.
Wir geben 16 Frames in das Modell ein, nicht 64. Früher hatten wir einen quadratischen Eingang, aber unter Berücksichtigung der Besonderheiten der Plattform haben wir das Seitenverhältnis des Eingangs auf 16: 9 geändert. Die Aufgabe ist eine binäre Klassifikation, bei der die Nullklasse kein Porno ist, sondern die einzige Porno. Mit SGD mit Schwung trainiert, schnitt er etwas besser ab als Adam. Minimale Vergrößerung - horizontale Flips und JPEG-Komprimierung. Hier ist nichts Besonderes.
Um das Thema Modelle zu vervollständigen - nach I3D gab es noch Modelle EVANet - Neuronale Architektur Suche nach einer Folge von Frames, SlowFast Networks - ein Netzwerk mit zwei Kanälen mit unterschiedlichen Frameraten und einen Artikel von Google AI - Temporal Cycle-Consistency Learning , aber wir haben sie nicht untersucht.
Worauf wurde es gelehrt?
Wie ich oben geschrieben habe, sind die Daten knapp. Niemand möchte sie veröffentlichen, es ist aus rechtlicher und ethischer Sicht schwierig - von Lizenzen bis zur Zustimmung jeder an den Inhalten beteiligten Person. Datensätze, ihre Lizenzen und Veröffentlichungen machen im Allgemeinen Spaß. Wenn jemand einen Artikel darüber schreiben möchte, würde ich ihn gerne lesen. Von den bedeutenden akademischen Datensätzen gibt es nur den brasilianischen NPDI , und leider ist sein Volumen gering, seine Datenverteilung ist nicht vielfältig genug, er besteht aus Keyframes und das Verfahren zum Abrufen ist nicht das einfachste. Und wir wollen auch einen Datensatz aus dem Video! Ich musste es selbst zusammenbauen.
Ein Datensatz besteht aus einem Video, dh Sie müssen ein Video von irgendwoher aufnehmen. Es gibt zwei Möglichkeiten, wie man sie bekommt: Schabenvon Pornoseiten und YouTube und manuelles Sammeln von Videos . Jeder Ansatz hat seine eigenen Vor- und Nachteile.
Durch das Scraping erhalten wir möglicherweise eine viel größere Vielfalt an Daten, und wir können recht billig Markups erhalten, indem wir sagen, dass alle Frames aller Videos eines bedingten Pornhubs unsicher sind und alle Frames aller Videos von YouTube sicher sind. Es gibt Nachteile - all dies muss irgendwo gespeichert werden, ein Datensatz muss irgendwie daraus gesammelt werden, und das Wichtigste ist, dass das naive Markup von Pornovideos Rauschen enthält. Dies sind beides direkte Fehler: Intros, Szenen, in denen jeder angezogen ist, Nahaufnahmen ohne Geschlechtsmerkmale, Menüs von Hentai-Spielen - sowie Elemente, für die ein Modell umgeschult werden kann: Logos, schwarze Bildschirme, Schnittschnitte. Dieses Rauschen beträgt einige Prozent, und im Fall von Terabyte Video ist es teuer, es loszuwerden. Wir werden später darüber sprechen.
Der zweite Ansatz ist die manuelle Montage. Seine Vorteile sind, dass wir jede gewünschte Verteilung der Daten modellieren können, die Daten vorhersehbarer sind und es einfacher ist, sie einfach zu kennzeichnen, weil es weniger davon gibt. Es gibt aber auch Nachteile. Offensichtlich liefert dieser Ansatz weniger Daten und kann außerdem unter Kollektorvorspannung leiden, da er die Verteilung modelliert und möglicherweise etwas übersieht.
Wir haben den zweiten Ansatz gewählt. Wir haben eine Liste der möglichen Inhalte auf der Streaming-Plattform zusammengestellt: eine Vielzahl von Spielen, Animationen, Animes, Musikinstrumenten, Reaktionen, Memes, Stream-Highlights - und versucht, alle möglichen Arten von unsicheren Inhalten abzudecken - von gewöhnlichen bis hin zu Thrash-Inhalten im Geiste des Pornos mit Pterodaktylen. Wir haben Computerspiele separat erwähnt, die häufig für 3D-Hentai verwendet werden - beispielsweise Overwatch. Und sie begannen zu sammeln. Infolgedessen kann ich zwei Erkenntnisse hervorheben.
Fetischisten sind gute Datensammler
Es gibt viele Zusammenstellungen auf Pornoseiten für jeden Geschmack, und jedes Video kann Auszüge aus Hunderten oder zwei völlig unterschiedlichen Videos enthalten, wodurch Sie einen Datensatz erhalten, der in Bezug auf die Vielfalt dem Scraping ähnelt, und gleichzeitig ist es recht billig, ihn zu markieren.
Und youtubers auch
Beispielzeiten: Auf YouTube gibt es Zusammenstellungen von Streamer-Highlights. Manchmal decken sie ein separates Jahr ab, dauern Stunden und enthalten weniger als tausend Änderungen, d. H. Szenen. Beispiel zwei: Tops of Games / Anime / Serien. Angenommen, Sie müssen neuronalen Netzen klar erklären, was Anime ist. Gleichzeitig gibt es in Japan eine große Anzahl von Studios, deren Stil jedes Jahr weiterentwickelt wird. Die Lösung besteht darin, ein Video mit Anime-Tops für bestimmte Jahre von einem berühmten Youtuber herunterzuladen. Oder Sie müssen eine Vielzahl von Szenen aus einem beliebten Spiel abdecken. Laden Sie ein Video herunter, zum Beispiel videogamedunkey für dieses Spiel.
Dateniteration
Wir hatten mehrere Iterationen der Daten. Zuerst waren es ungefähr hundert Videos, ungefähr 70 Stunden lang, mit dem naiven Markup „Alle Frames von Pornoseiten - Pornos, alles von YouTube - Schuld“, aus dem wir mehr oder weniger gleichmäßig Sequenzen von Frames für den Datensatz abgetastet haben.
Das auf diese Weise trainierte Modell funktionierte gut, aber aufgrund des Rauschens in den Daten gaben die ersten Modelle Fehler auf verschiedenen Arten von Logos, schwarzen Bildschirmen und gekleideten Mädchen auf einem schwarzen Ledersofa (͡ ° ͜ʖ ͡ °) . Die schwarzen Bildschirme mit dem kommenden 0.817 waren besonders verwirrend, aber es stellte sich heraus, dass die Daten fehlerhaft waren - in einer der Porno-Zusammenstellungen hat der Autor das Video versehentlich zehn Minuten länger als nötig gerendert, sodass der Zug viele „gefährliche“ schwarze Bildschirme hatte.
Infolgedessen haben wir die Daten ehrlich markiert und diese Fehler sind verschwunden. Im Zusammenhang mit dem Scraping entsteht die Idee, dass es noch schwieriger ist, Tausende von Videos aufzuspüren, wenn sich bei der manuellen Videoauswahl ein solcher Fehler einschleicht, wie bei schwarzen Bildschirmen.
Wie bereits erwähnt - haben wir für fast alle Videos das Tool von OpenCV CVAT verwendet.
Fünf Cent über CVAT
Computer Vision Annotation Tool. . , -. — , . XML. .
Dann im Laufe unserer Arbeit haben wir für mehr Videos, der Katalog der Spiele aktualisiert, und als Ergebnis haben wir jetzt mehrere hundert Stunden Videos in mehreren Dutzend verschiedenen Kategorien, und wir wissen , dass sie bestehen aus ~ 30.000 einzigartige Szenen, sowie Daten mit einem Stern über dem Wir werden unten reden.
Großartig, wir haben Rohdaten mit Tags! Wie bekommen wir einen guten Datensatz daraus? Videos unterschiedlicher Länge, für jede Kategorie, Videos mit unterschiedlichem Timing und Grad der Vielfalt werden gesammelt - wie kann man alles zusammenfügen? Wie viele Proben können wir aus dem Datensatz entnehmen? Die Vielfalt ist irgendwie grundlegend begrenzt (wie die maximale Anzahl von Videobildern). Wie können wir verstehen, dass wir zu viel nehmen?
Zu Beginn der Arbeit haben wir uns nicht wirklich mit diesen Fragen beschäftigt und nur so viele Samples aus jedem Video einer separaten Klasse genommen, dass Pornos und Nicht-Spots im Datensatz ungefähr gleich waren und die Anzahl der Samples intuitiv bestimmt wurde („nun, es scheint, dass fast alle mehrmals pro Minute Wenn etwas radikal anderes passiert, werden wir 10.000 Proben nehmen “) und dann empirisch die Metriken der trainierten Modelle verwenden.
Infolgedessen haben wir uns mit diesen Fragen befasst und ein ziemlich komplexes Tool zum Zusammenstellen von Datensätzen aus Videos gefunden.
Zunächst wollten wir wissen, wie viel wir aus unseren Video-Zusammenstellungen herausholen können. Es ist logisch, dass wir etwas mehr Clips zum Schneiden verschiedener Samples im Schnitt haben werden.
Lassen Sie uns nach Bearbeitungsklebstoffen suchen
Es war möglich, nur die Spitzen der Norm des Unterschieds zwischen benachbarten Frames zu verwenden, aber wir haben ein offenes Netzwerk speziell verwendet, um Ausschnitte zu finden - TransNet . Dies ergab zwei Ergebnisse: Erstens, dass wir gelernt haben, wie viele Szenen wir im Prinzip in den Daten haben, und zweitens, dass wir gelernt haben, welche Datenkategorien eine geringere Diversität aufweisen. Hentai, Minecraft und andere Dinge abgeschlossen.
Jetzt ist unsere atomare Einheit zum Schneiden kein ganzes Video, sondern eine Szene... Auf diese Weise können wir den unterschiedlichsten Datensatz sammeln, der nach Kategorien und Klassen ausgewogen ist und sichere Szenen aus Pornovideos berücksichtigt. Videos werden in Kategorieordnern gruppiert und Szenen werden für jede Klasse gleichermaßen abgetastet. Wenn wir dem Datensatz neue Videos hinzufügen, wird das zusätzliche Schneiden / Löschen unnötiger Proben auf ein Minimum reduziert, und der Datensatz wird nicht von Grund auf neu geschnitten. Sehr bequem.
Wir haben einen Datensatz mit 20.000 Proben im Zug gesammelt, 2000 in der Validierung und 2000 im Test, das Modell trainiert, die Metriken für den Test gemocht und an die Produktion gesendet.
Lassen Sie uns ein wenig über die Produktion sprechen - jeden Tag überprüfen wir Zehntausende von Clips, sodass sogar ein Prozent der falsch positiven Ergebnisse Spam-Moderatoren sein können. Daher haben wir einige Zeit lang eine Reihe falsch positiver Ergebnisse für ein Modell mit einer etwas niedrigeren Antwortschwelle gesammelt und als Ergebnis viele reale Daten erhalten. die wir für zusätzliche Schulungen verwendet haben.
Dies sind die Daten mit einem Sternchen . Sie ermöglichten es uns, uns auf die vielfältigen Inhalte der Plattform zu konzentrieren und die Belastung der Moderatoren zu verringern. Jetzt treten bei neuen Spielen meistens Fehlalarme auf - zum Beispiel war es früher wahrscheinlicher, dass wir Death Stranding und Valorant erwischen.
Der aktuelle Datensatz besteht aus 30000/5000/3000 Zug- / Wert- / Testmustern.
Entwicklung unserer Metriken für unseren Test, aufgeschlüsselt nach Kategorien und Vergleich mit offenen Lösungen (anklickbar)
f1- . , precision , f1- .
f1- . , precision , f1- .
Dank unserer Detektoren wird die Zeit für die Überprüfung der gesamten Plattform durch Moderatoren um ein Vielfaches reduziert. Neben Pornografie fangen wir Nacktheit, TV-Logos und Sportübertragungen ein, aber dies sind Geschichten für eine andere Zeit.
Flosse.
Eine Video - Version des Materials ist zu sehen hier