Los juguetes equivocados: como enseñamos a la red neuronal a luchar contra la transmisión de pornografía

Hola a todos, mi nombre es Oleg, hago visión por computadora en el equipo de MTS Video Analytics, y hoy les contaré cómo protegemos la plataforma de transmisión WASD.tv del contenido inseguro , en particular, sobre la detección de pornografía al configurar la tarea de reconocimiento de acciones .







Nuestro caso es un sitio de transmisión para jugadores, deportistas electrónicos y fanáticos de las transmisiones en vivo del formato Twitch.tv . Algunos usuarios transmiten contenido de entretenimiento mientras que otros lo ven. El contenido puede ser muy diferente: juegos, música en vivo, interactivo, mukbang, ASMR, cocina, podcasts, etc. - y, en principio, no está limitado por nada más que la imaginación del streamer.



Y las reglas de la plataforma, que son monitoreadas por los moderadores.



¿Por qué moderar el contenido inseguro? Hay dos razones para esto. La primera es la actual legislación rusa , según la cual la distribución de pornografía es ilegal. La segunda razón es la experiencia del usuario . La plataforma está dirigida a personas de todas las edades y no podemos permitirnos contenido para adultos en la página de inicio.



Cuando nos enfrentamos a la tarea de rastrear contenido inseguro, inmediatamente se hizo evidente que no era tan fácil distinguir entre contenido seguro e inseguro. Lo primero que era importante entender era que la pornografía y la desnudez no son conceptos idénticos.



La pornografía no se trata necesariamente de desnudez: el sexo con ropa es contenido inseguro y, a menudo, solo con el tiempo se puede distinguir del contenido "seguro".



La desnudez no se trata necesariamente de NSFW: sumo, lucha libre, personas vestidas de látex; todo esto es contenido seguro, en el que las soluciones abiertas a menudo se resuelven incorrectamente.



Con base en estas consideraciones, comenzamos a ver cómo se puede resolver este problema. De las interesantes soluciones de código abierto, el modelo Open NSFW de Yahoo, entrenado en datos cerrados, existe desde hace varios años ( implementación en TF ). También hay un repositorio abierto genial del raspador de datos nsfw de Alexander Kim , del cual puede obtener varios cientos de miles de imágenes de reddit, imgur y aparentemente algunos otros sitios. Las imágenes se dividen en cinco clases: pornografía, hentai, erótica, neutra y dibujos . Sobre la base de estos datos, existen muchos modelos, como el tiempo, dos

soluciones de código abierto sufren varios problemas: en general, la baja calidad de algunos modelos, el funcionamiento incorrecto de los casos complejos mencionados anteriormente e imágenes seguras como twerking girls y memes con Ricardo Milos , así como la mejora problemática, porque o los modelos están desactualizados y entrenados en datos cerrados o los datos son muy ruidosos y tienen una distribución impredecible.







Concluimos que el contexto temporal es importante para un buen modelo , es decir, el contexto temporal, con la ayuda del mismo podremos captar casos más complejos en dinámica. El planteamiento del problema se vuelve obvio.



Reconociendo acciones



En nuestro caso, esta sigue siendo la misma clasificación binaria, pero en lugar de una imagen, alimentamos una secuencia de fotogramas como entrada.



¿Cómo resuelven este problema? En el decimoctavo año salió una excelente reseña de qure.ai, y parece que desde entonces no ha habido avances radicales en el campo, así que lo recomiendo. Una investigación más interesante sobre el tema del video se convirtió en una tarea más difícil de entender y volver a contar el video. Hay cuadrículas de gráficos y aprendizaje auto-supervisado: el segundo día en el último Machines Can See estuvo completamente dedicado a esto .



Entonces, la clasificación de acciones. La historia del progreso en los modelos de redes neuronales es aproximadamente la siguiente: primero, entrenaron redes convolucionales tridimensionales desde cero (C3D), luego comenzaron a probar convoluciones con algún tipo de arquitectura recurrente o mecanismo de atención; En algún momento, Andrey Karpaty propuso fusionar vistas de diferentes fotogramas de diferentes maneras, incluso más tarde se convirtió en un estándar para hacer modelos de dos cabezas, donde una secuencia de fotogramas en BGR / RGB se alimenta a una entrada y un flujo óptico denso contaba con ellos a la otra . También hubo algunas bromas sobre el uso de funciones adicionales y capas especiales como NetVLAD. Como resultado, analizamos los modelos que se desempeñaron mejor en la prueba de referencia UCF101.donde los videos se clasifican en 101 acciones colectivas. Este modelo resultó ser la arquitectura I3D de DeepMind, nos fue mejor, así que te contaré más al respecto.



DeepMind I3D



Como línea de base, intentamos entrenar C3D y CNN-LSTM; ambos modelos tardan mucho en aprender y convergen lentamente. Luego asumimos I3D y la vida mejoró. Estas son dos redes convolucionales tridimensionales para BGR y flujo óptico, pero hay una peculiaridad: a diferencia de los modelos anteriores, esta está preentrenada en ImageNet y su propio conjunto de datos de Deepmind Kinetics-700 , en el que hay 650 mil clips y 700 clases. Esto proporciona una convergencia extremadamente rápida del modelo en unas pocas horas a buena calidad.



En producción, usamos solo un cabezal RGB, ya que es dos veces más rápido y el flujo óptico realmente no disminuye en calidad, y en algún lugar puede ser aún peor debido al hecho de que transmitimos principalmente una pantalla de computadora y cámaras web, donde el contenido a veces bastante estático.



Suministramos 16 marcos al modelo, no 64. Anteriormente, teníamos una entrada cuadrada, pero teniendo en cuenta las características específicas de la plataforma, cambiamos la relación de aspecto de la entrada a 16: 9. La tarea es una clasificación binaria, donde la clase cero no es porno, pero la única es porno. Entrenado con SGD con impulso, se desempeñó un poco mejor que Adam. Aumento mínimo: volteos horizontales y compresión JPEG. Nada especial aqui.



Completando el tema de los modelos - después de I3D, todavía había modelos EVANet - Búsqueda de arquitectura neuronal para una secuencia de cuadros, SlowFast Networks - una red con dos canales con diferentes velocidades de cuadros, y un artículo de Google AI - Aprendizaje de consistencia de ciclo temporal , pero no los investigamos.



¿En qué se enseñó?



Como escribí anteriormente, los datos son escasos. Nadie quiere publicarlos, es difícil desde un punto de vista legal y ético, desde las licencias hasta el consentimiento de cada persona involucrada en el contenido. Los conjuntos de datos, sus licencias y publicación son generalmente divertidos. Si alguien quiere escribir un artículo sobre esto, me encantaría leerlo. De los conjuntos de datos académicos importantes, solo existe el NPDI brasileño y, lamentablemente, es pequeño en volumen, su distribución de datos no es lo suficientemente diversa, consta de fotogramas clave y el procedimiento para obtenerlo no es el más fácil. ¡Y también queremos un conjunto de datos del video! Tuve que montarlo yo mismo.



Un conjunto de datos consta de un video, lo que significa que debe tomar un video desde algún lugar. Hay dos opciones para obtenerlos: raspadode sitios pornográficos y YouTube y recopilar videos manualmente . Cada acercamiento tiene sus propios pros y contras.



El scraping nos proporcionará potencialmente mucha más variedad en los datos, y podemos obtener el marcado bastante barato diciendo que todos los marcos de todos los videos de un pornhub condicional son inseguros y que todos los marcos de todos los videos de YouTube son seguros. Hay desventajas: todo esto debe almacenarse en algún lugar, se debe recopilar un conjunto de datos de alguna manera, y lo más importante es que hay ruido en el marcado ingenuo de los videos porno. Ambos son errores directos: intros, escenas donde todo el mundo está vestido, primeros planos sin características de género, menús de juegos hentai, así como elementos para los que una modelo puede volver a entrenarse: logotipos, pantallas negras, cortes de edición. Este ruido es un pequeño porcentaje y, en el caso de terabytes de video, deshacerse de él es costoso. Hablaremos de esto más tarde.



El segundo enfoque es el montaje manual. Sus ventajas son que podemos modelar cualquier distribución deseada de los datos, los datos son más predecibles y es más fácil etiquetarlos simplemente porque hay menos. Pero también hay desventajas. Obviamente, este enfoque produce menos datos y, además, puede sufrir el sesgo del recopilador, ya que modela la distribución y puede perder algo.

Tomamos el segundo enfoque. Hicimos una lista de lo que podría terminar en una plataforma de transmisión: todo tipo de juegos, animación, anime, tocar instrumentos musicales, reacciones, memes, momentos destacados de la transmisión, y tratamos de cubrir todo tipo de posibles tipos de contenido inseguro, desde cualquier cosa ordinaria hasta thrash. en el espíritu del porno con pterodáctilos. Mencionamos por separado los juegos de computadora, que a menudo se usan para hentai en 3D: Overwatch, por ejemplo. Y empezaron a cobrar. Como resultado, puedo destacar dos ideas.



Los fetichistas son buenos recolectores de datos



Hay muchas compilaciones en sitios de pornografía para todos los gustos, y cada video puede contener extractos de cientos o dos de videos completamente diferentes, lo que le permite obtener un conjunto de datos similar al scraping en términos de variedad y, al mismo tiempo, es bastante barato marcarlo.



Y youtubers tambien



Tiempos de ejemplo: hay compilaciones de lo más destacado de streamer en YouTube, a veces cubren un año separado, duran horas y contienen menos de mil ediciones, es decir, escenas. Ejemplo dos: tops de juegos / anime / series. Digamos que necesitas explicar claramente a las redes neuronales qué es el anime. Al mismo tiempo, hay una gran cantidad de estudios en Japón, cuyo estilo progresa cada año. La solución es descargar un video con tops de anime para ciertos años de un famoso youtuber. O necesita cubrir una variedad de escenas de un juego popular. Ve y descarga un video, por ejemplo, videogamedunkey para este juego.



Iteración de datos



Tuvimos varias iteraciones de los datos. Al principio, eran unos cien videos, unas 70 horas de duración con el marcado ingenuo "todos los fotogramas de sitios pornográficos, pornografía, todo lo de YouTube, culpa", de los que muestreamos secuencias de fotogramas de forma más o menos uniforme para el conjunto de datos.



La modelo entrenada de esta manera funcionó bien, pero debido al ruido en los datos, las primeras modelos dieron errores en varios tipos de logotipos, pantallas negras y niñas vestidas en un sofá de cuero negro (͡ ° ͜ʖ ͡ °) . Las pantallas negras con el próximo 0.817 fueron especialmente confusas, pero resultó que había un error en los datos: en una de las compilaciones pornográficas, el autor accidentalmente reprodujo el video diez minutos más de lo necesario, como resultado, el tren tenía muchas pantallas negras "peligrosas".



Como resultado, marcamos honestamente los datos y estos errores desaparecieron. En el contexto del raspado, surge la idea de que si durante la selección manual de video se produce un error de este tipo, como ocurre con las pantallas negras, entonces al raspar miles de videos sería aún más difícil rastrearlo.



Como se señaló, para casi todos los videos, usamos la herramienta de OpenCV CVAT.



Cinco centavos sobre CVAT
Computer Vision Annotation Tool. . , -. — , . XML. .





Luego, en el curso de nuestro trabajo, recopilamos más videos, actualizamos el catálogo de juegos y, como resultado, ahora tenemos varios cientos de horas de videos en varias docenas de categorías diferentes, y sabemos que consisten en ~ 30,000 escenas únicas, más datos con un asterisco sobre los cuales hablaremos a continuación.



¡Genial, tenemos datos etiquetados sin procesar! ¿Cómo obtenemos un buen conjunto de datos de ellos? Se recopilan videos de diferentes longitudes, para cada categoría, videos de diferentes tiempos y grados de variedad: ¿cómo unirlos todos? ¿Cuántas muestras podemos tomar del conjunto de datos? Su diversidad es de alguna manera fundamentalmente limitada (como el número máximo de fotogramas de video), ¿cómo podemos entender que estamos tomando demasiado?



Al comienzo del trabajo, realmente no nos molestamos con estas preguntas y simplemente tomamos de cada video de una clase separada tantas muestras para que la pornografía y la culpa en el conjunto de datos fueran aproximadamente iguales, y la cantidad de muestras se determinó intuitivamente ("bueno, parece que varias veces por minuto en casi todos los videos que sucede algo radicalmente diferente, tomaremos 10,000 muestras ”), y luego empíricamente usando las métricas de los modelos entrenados.



Como resultado, abordamos estas preguntas y terminamos con una herramienta bastante compleja para ensamblar conjuntos de datos a partir de videos.



En primer lugar, queríamos saber cuánto podemos sacar de nuestras compilaciones de videos. Es lógico que utilicemos un poco más de clips para cortar diferentes muestras en el corte.



Busquemos pegamentos de edición


Fue posible usar solo los picos de la norma de la diferencia entre marcos adyacentes, pero usamos una red abierta específicamente para encontrar cortes: TransNet . Esto nos dio dos resultados: el primero es que aprendimos cuántas escenas tenemos en los datos en principio, y el segundo es que aprendimos qué categorías de datos tienen menor diversidad. Hentai completo, Minecraft y otras cosas.



Ahora nuestra unidad atómica para cortar no es un video completo, sino una escena.... Esto nos permite recopilar el conjunto de datos más diverso, equilibrado por categorías y clases, teniendo en cuenta escenas seguras de videos porno. Los videos se agrupan en carpetas de categorías y las escenas se muestrean por igual para cada clase. Si agregamos nuevos videos al conjunto de datos, entonces se producirá un corte / eliminación adicional de muestras innecesarias al mínimo, el conjunto de datos no se volverá a cortar desde cero. Muy cómodamente.



Recopilamos un conjunto de datos de 20.000 muestras en el tren, 2000 en validación y 2000 en la prueba, entrenamos el modelo, nos gustaron las métricas de la prueba y lo enviamos a producción.



Hablemos un poco sobre la producción: todos los días revisamos decenas de miles de clips, por lo que incluso el uno por ciento de los falsos positivos pueden enviar spam a los moderadores, por lo que durante algún tiempo recopilamos una variedad de falsos positivos en un modelo con un umbral de respuesta ligeramente más bajo y, como resultado, obtuvimos una gran cantidad de datos reales. que usamos para entrenamiento adicional.



Estos son los datos con un asterisco . Nos permitieron enfocarnos en el contenido diverso de la plataforma y reducir la carga de los moderadores. Ahora, la mayoría de los falsos positivos ocurren en juegos nuevos; por ejemplo, en un momento era más probable que atrapáramos a Death Stranding y Valorant.



El conjunto de datos actual consta de 30000/5000/3000 train / val / test samples.



Evolución de nuestras métricas en nuestra prueba, desglosadas por categorías y comparación con soluciones abiertas (se puede hacer clic)




f1- . , precision , f1- .







Gracias a nuestros detectores, el tiempo de comprobación de toda la plataforma por parte de los moderadores se reduce varias veces. Además de la pornografía, capturamos desnudos, logotipos de televisión y retransmisiones deportivas, pero estas son historias para otro momento.



Aleta.





Una versión en video del material se puede ver aquí.



All Articles