Les mauvais jouets: comment nous avons appris au réseau neuronal à lutter contre le streaming porno

Bonjour à tous, je m'appelle Oleg, je fais de la vision par ordinateur dans l'équipe MTS Video Analytics, et aujourd'hui je vais vous dire comment nous protégeons la plate- forme de streaming WASD.tv contre les contenus dangereux , en particulier sur la détection de la pornographie dans la configuration de la tâche de reconnaissance d'action .







Notre cas est un site de streaming pour les joueurs, les e-sportifs et les fans de retransmissions en direct du format Twitch.tv . Certains utilisateurs diffusent du contenu de divertissement tandis que d'autres le regardent. Le contenu peut être très différent: jeux, musique live, interactif, mukbang, ASMR, cuisine, podcasts, etc. - et, en principe, n'est limité par rien d'autre que l'imagination du streamer.



Et les règles de la plateforme, qui sont contrôlées par les modérateurs.



Pourquoi modérer le contenu dangereux? Il y a deux raisons à cela. Le premier est la législation russe actuelle , selon laquelle la distribution de pornographie est illégale. La deuxième raison est l'expérience utilisateur . La plate-forme s'adresse aux personnes de tous âges et nous ne pouvons pas nous permettre de contenu pour adultes sur la page d'accueil.



Lorsque nous avons été confrontés à la tâche de suivre le contenu non sécurisé, il est immédiatement devenu évident qu'il n'était pas si facile de faire la distinction entre le contenu sûr et non sécurisé. La première chose qu'il était important de comprendre était que la pornographie et la nudité ne sont pas des concepts identiques.



La pornographie ne concerne pas nécessairement la nudité: le sexe habillé est un contenu dangereux, et ce n’est souvent qu’au fil du temps qu’il peut être distingué du contenu «sûr».



La nudité ne concerne pas nécessairement NSFW: sumo, lutte, gens vêtus de latex - tout cela est un contenu sûr, dans lequel les solutions ouvertes sont souvent mal élaborées.



Sur la base de ces considérations, nous avons commencé à examiner comment ce problème peut être résolu. Parmi les solutions open source intéressantes, le modèle Open NSFW de Yahoo, formé sur les données fermées, existe depuis plusieurs années ( implémentation sur TF ). Il existe également un référentiel ouvert et cool du grattoir de données Alexander Kim nsfw , à partir duquel vous pouvez obtenir plusieurs centaines de milliers d'images de reddit, imgur et apparemment d'autres sites. Les images sont réparties en cinq classes: porno, hentai, érotique, neutre et dessins . Sur la base de ces données, il existe de nombreux modèles, comme le temps, deux

solutions Open source souffrent de plusieurs problèmes - en général, la faible qualité de certains modèles, un fonctionnement incorrect sur les cas complexes susmentionnés et des images sûres comme le twerking des filles et des mèmes avec Ricardo Milos , ainsi que l'amélioration problématique, car soit les modèles sont obsolètes et formés sur des données fermées, ou les données sont très bruyantes et ont une distribution imprévisible.







Nous avons conclu que le contexte temporel est important pour un bon modèle , c'est-à-dire le contexte temporel, avec l'aide de celui-ci, nous serons en mesure de saisir des cas plus complexes en dynamique. L'énoncé du problème devient évident.



Reconnaître les actions



Dans notre cas, il s'agit toujours de la même classification binaire, mais au lieu d'une image, nous alimentons une séquence d'images en entrée.



Comment ce problème est-il résolu en général? La dix-huitième année, il y a eu une excellente critique de qure.ai, et il semble que depuis lors, il n'y a pas eu de progrès radical dans le domaine, donc je le recommande. Une recherche plus intéressante sur le thème de la vidéo s'est transformée en une tâche plus difficile de comprendre et de raconter la vidéo. Il existe des grilles de graphes et un apprentissage auto-supervisé - la deuxième journée du dernier Machines Can See était même entièrement consacrée à cela .



Donc, la classification des actions. L'histoire des progrès dans les modèles de réseaux neuronaux est approximativement la suivante: d'abord, ils ont formé des réseaux convolutifs tridimensionnels à partir de zéro (C3D), puis ils ont commencé à essayer des convolutions avec une sorte d'architecture récurrente ou de mécanisme d'attention; à un moment donné, Andrey Karpaty a proposé de fusionner les vues de différentes images de différentes manières, même plus tard, il est devenu un standard de créer des modèles à deux têtes, où une séquence d'images en BGR / RVB est transmise à une entrée et un flux optique dense compté sur elles à l'autre . Il y avait aussi quelques blagues avec l'utilisation de fonctionnalités supplémentaires et de couches spéciales comme NetVLAD. En conséquence, nous avons examiné les modèles les plus performants sur le benchmark UCF101.où les vidéos sont classées en 101 recours collectifs. Ce modèle s'est avéré être l'architecture I3D de DeepMind, il a mieux fonctionné avec nous, donc je vais vous en dire plus.



DeepMind I3D



Comme base de référence, nous avons essayé de former C3D et CNN-LSTM - les deux modèles prennent beaucoup de temps à apprendre et convergent lentement. Puis nous avons affronté I3D et la vie s'est améliorée. Ce sont deux réseaux convolutifs tridimensionnels pour le BGR et le flux optique, mais il y a une particularité - contrairement aux modèles précédents, celui-ci est pré-formé sur ImageNet et son propre jeu de données de Deepmind Kinetics-700 , dans lequel 650 mille clips et 700 classes. Cela permet une convergence extrêmement rapide du modèle en quelques heures vers une bonne qualité.



En production, nous n'utilisons qu'une tête RVB, car elle est deux fois plus rapide, et le flux optique ne baisse pas vraiment en qualité, et quelque part cela peut être encore pire du fait que nous diffusons principalement l'écran de l'ordinateur et les webcams, où le contenu parfois assez statique.



Nous introduisons 16 cadres dans le modèle, pas 64. Auparavant, nous avions une entrée carrée, mais en tenant compte des spécificités de la plate-forme, nous avons changé le rapport hauteur / largeur de l'entrée en 16: 9. La tâche est une classification binaire, où la classe zéro n'est pas du porno, mais la seule est du porno. Formé avec SGD avec élan, il a légèrement mieux performé qu'Adam. Augmentation minimale - retournements horizontaux et compression JPEG. Rien de spécial ici.



Pour compléter le sujet des modèles - après I3D, il y avait encore des modèles EVANet - Neural Architecture Search for a sequence of frames, SlowFast Networks - un réseau avec deux canaux avec des fréquences d'images différentes, et un article de Google AI - Temporal Cycle-Consistency Learning , mais nous ne les avons pas étudiés.



Sur quoi a-t-il été enseigné?



Comme je l'ai écrit ci-dessus, les données sont serrées. Personne ne veut les publier, c'est difficile d'un point de vue juridique et éthique - des licences au consentement de chaque personne impliquée dans le contenu. Les ensembles de données, leurs licences et leur publication sont généralement amusants. Si quelqu'un veut écrire un article à ce sujet, j'aimerais le lire. Parmi les ensembles de données académiques significatifs, il n'y a que le NPDI brésilien et, malheureusement, il est petit en volume, sa distribution de données n'est pas assez diversifiée, il se compose d'images clés et la procédure pour l'obtenir n'est pas la plus simple. Et nous voulons aussi un jeu de données de la vidéo! J'ai dû l'assembler moi-même.



Un ensemble de données consiste en une vidéo, ce qui signifie que vous devez prendre une vidéo quelque part. Il existe deux options pour les obtenir: grattageà partir de sites pornographiques et YouTube et collectant des vidéos manuellement . Chaque approche a ses pours et ses contres.



Le grattage nous fournira potentiellement beaucoup plus de variété dans les données, et nous pouvons obtenir un balisage à peu de frais en disant que toutes les images de toutes les vidéos d'un pornhub conditionnel sont dangereuses et que toutes les images de toutes les vidéos de YouTube sont sûres. Il y a des inconvénients - tout cela doit être stocké quelque part, un ensemble de données doit être collecté d'une manière ou d'une autre à partir de cela, et le plus important est qu'il y ait du bruit dans le balisage naïf des vidéos porno. Ce sont à la fois des erreurs directes: intro, scènes où tout le monde est habillé, gros plans sans caractéristiques de genre, menus de jeux hentai - ainsi que des éléments pour lesquels un modèle peut se recycler: logos, écrans noirs, retouche de points. Ce bruit est de quelques pour cent, et dans le cas de téraoctets de vidéo, s'en débarrasser coûte cher. Nous en reparlerons plus tard.



La deuxième approche est l'assemblage manuel. Ses avantages sont que nous pouvons modéliser n'importe quelle distribution souhaitée des données, les données sont plus prévisibles et il est plus facile de les étiqueter simplement parce qu'elles sont moins nombreuses. Mais il y a aussi des inconvénients. Évidemment, avec cette approche, il y a moins de données, et en plus, ils peuvent souffrir d'un biais de collecteur, car il modélise la distribution et peut manquer quelque chose.

Nous avons adopté la deuxième approche. Nous avons compilé une liste de ce qui pourrait potentiellement se trouver sur la plate-forme de streaming: une grande variété de jeux, d'animation, d'anime, de jouer des instruments de musique, de réactions, de mèmes, de faits saillants de flux - et avons essayé de couvrir toutes sortes de types possibles de contenu dangereux - de quelque chose d'ordinaire à thrash dans l'esprit du porno avec des ptérodactyles. Nous avons également mentionné les jeux informatiques, qui sont souvent utilisés pour le hentai 3D - Overwatch, par exemple. Et ils ont commencé à se rassembler. En conséquence, je peux mettre en évidence deux idées.



Les fétichistes sont de bons collecteurs de données



Il existe de nombreuses compilations sur des sites pornographiques pour tous les goûts, et chaque vidéo peut contenir des extraits de centaines ou de deux vidéos complètement différentes, ce qui vous permet d'obtenir un ensemble de données similaire au grattage en termes de variété, et en même temps, il est assez bon marché de le baliser.



Et les youtubeurs aussi



Exemple de temps: il existe des compilations de faits saillants de streamer sur YouTube, parfois ils couvrent une année distincte, durent des heures et contiennent moins de mille modifications, c'est-à-dire scènes. Exemple deux: sommets des jeux / anime / séries. Disons que vous devez expliquer clairement aux réseaux de neurones ce qu'est l'anime. Dans le même temps, il existe un grand nombre de studios au Japon, dont le style évolue chaque année. La solution est de télécharger une vidéo avec des tops d'anime pendant certaines années à partir d'un youtubeur célèbre. Ou vous devez couvrir une variété de scènes d'un jeu populaire. Allez télécharger une vidéo par exemple vidéogamedunkey pour ce jeu.



Itération des données



Nous avons eu plusieurs itérations des données. Au début, il s'agissait d'une centaine de vidéos, d'une durée d'environ 70 heures avec le balisage naïf «toutes les images de sites pornographiques - porno, tout de YouTube - blâmer», à partir desquelles nous avons échantillonné plus ou moins uniformément des séquences d'images pour l'ensemble de données.



Le modèle formé de cette manière a bien fonctionné, mais en raison du bruit dans les données, les premiers modèles ont donné des erreurs sur divers types de logos, des écrans noirs et des filles habillées sur un canapé en cuir noir (͡ ° ͜ʖ ͡ °) . Les écrans noirs avec le prochain 0.817 étaient particulièrement déroutants, mais il s'est avéré qu'il y avait une erreur dans les données - dans l'une des compilations pornographiques, l'auteur a accidentellement rendu la vidéo dix minutes de plus que nécessaire, en conséquence, le train avait beaucoup d'écrans noirs «dangereux».



En conséquence, nous avons honnêtement balisé les données et ces erreurs ont disparu. Dans le contexte du grattage, l'idée se pose que si lors de la sélection manuelle de la vidéo, une telle erreur s'est glissée, comme avec les écrans noirs, alors lors du grattage de milliers de vidéos, il serait encore plus difficile de la retrouver.



Comme indiqué - pour presque toutes les vidéos, nous avons utilisé l'outil OpenCV CVAT.



Cinq centimes sur CVAT
Computer Vision Annotation Tool. . , -. — , . XML. .





Ensuite, au cours du travail, nous avons collecté plus de vidéos, mis à jour le catalogue de jeux et, par conséquent, nous avons maintenant plusieurs centaines d'heures de vidéos dans plusieurs dizaines de catégories différentes, et nous savons qu'elles se composent d' environ 30000 scènes uniques, plus des données avec un astérisque , sur lesquelles nous parlerons ci-dessous.



Génial, nous avons des données balisées brutes! Comment en tirer un bon ensemble de données? Des vidéos de différentes longueurs, pour chaque catégorie, des vidéos de timing et de degré de variété différents sont collectées - comment relier tout cela? Combien d'échantillons pouvons-nous prélever de l'ensemble de données? Sa diversité est en quelque sorte fondamentalement limitée (comme le nombre maximum d'images vidéo), comment pouvons-nous comprendre que nous en prenons trop?



Au début du travail, nous ne nous sommes pas vraiment préoccupés de ces questions et avons simplement pris de chaque vidéo d'une classe distincte tant d'échantillons pour que le porno et le blâme dans l'ensemble de données soient à peu près égaux, et le nombre d'échantillons a été déterminé intuitivement («bien, il semble que plusieurs fois par minute dans presque toutes les vidéos quelque chose de radicalement différent se produit, nous prendrons 10 000 échantillons »), puis en utilisant empiriquement les métriques des modèles entraînés.



En conséquence, nous avons abordé ces questions et nous nous sommes retrouvés avec un outil assez complexe pour assembler des ensembles de données à partir de la vidéo.



Tout d'abord, nous voulions savoir à quel point nous pouvons tirer parti de nos compilations vidéo. Il est logique que nous ayons un peu plus de clips utilisés pour couper différents échantillons dans la coupe.



Cherchons des colles d'édition


Il était possible d'utiliser uniquement les pics de la norme de la différence entre les trames adjacentes, mais nous avons utilisé un réseau ouvert spécifiquement pour trouver des découpes - TransNet . Cela nous a donné deux résultats: premièrement, que nous avons appris combien de scènes nous avons dans les données en principe, et deuxièmement, que nous avons appris quelles catégories de données ont une moindre diversité. Hentai terminé, minecraft et autres choses.



Maintenant, notre unité de découpe atomique n'est pas une vidéo entière, mais une scène... Cela nous permet de collecter l'ensemble de données le plus diversifié, équilibré par catégorie et par classe, en tenant compte des scènes de sécurité des vidéos porno. Les vidéos sont regroupées dans des dossiers de catégories et les scènes sont échantillonnées de manière égale pour chaque classe. Si nous ajoutons de nouvelles vidéos à l'ensemble de données, alors la découpe / suppression supplémentaire d'échantillons inutiles se produira au minimum, l'ensemble de données ne sera pas recoupé à partir de zéro. Très confortablement.



Nous avons collecté un ensemble de données de 20 000 échantillons dans le train, 2000 en validation et 2000 en test, formé le modèle, nous avons aimé les métriques du test et l'avons envoyé en production.



Parlons un peu de la production - chaque jour, nous vérifions des dizaines de milliers de clips, donc même un pour cent des faux positifs peuvent spammer les modérateurs, donc pendant un certain temps, nous avons collecté une variété de faux positifs sur un modèle avec un seuil de réponse légèrement inférieur, et par conséquent, nous avons obtenu beaucoup de données réelles. que nous avons utilisé pour une formation supplémentaire.



Ce sont les données avec un astérisque . Ils nous ont permis de nous concentrer sur le contenu diversifié de la plateforme et de réduire le fardeau des modérateurs. Désormais, la plupart des faux positifs se produisent sur les nouveaux jeux - par exemple, à un moment donné, nous étions plus susceptibles d'attraper Death Stranding et Valorant.



L'ensemble de données actuel comprend 30000/5000/3000 échantillons train / val / test.



Evolution de nos métriques sur notre test, ventilées par catégories, et comparaison avec des solutions ouvertes (cliquable)




f1- . , precision , f1- .







Grâce à nos détecteurs, le temps de vérification de l'ensemble de la plateforme par les modérateurs est réduit plusieurs fois. En plus de la pornographie, nous attrapons la nudité, les logos de télévision et les émissions sportives, mais ce sont des histoires pour une autre fois.



Ailette.





Une version vidéo du matériel peut être vue ici



All Articles