Mainan yang salah: bagaimana kami mengajarkan jaringan saraf untuk melawan streaming porno

Halo semuanya, nama saya Oleg, saya melakukan visi komputer di tim Analisis Video MTS, dan hari ini saya akan memberi tahu Anda bagaimana kami melindungi platform streaming WASD.tv dari konten yang tidak aman , khususnya, tentang deteksi pornografi dalam menetapkan tugas pengenalan tindakan .







Kasus kami adalah situs streaming untuk para gamer, olahragawan elektronik, dan penggemar siaran langsung dalam format Twitch.tv . Beberapa pengguna mengalirkan konten hiburan, sementara yang lain menontonnya. Kontennya bisa sangat berbeda: game, musik live, interaktif, mukbang, ASMR, memasak, podcast, dll. - dan, pada prinsipnya, tidak dibatasi oleh apa pun kecuali imajinasi streamer.



Dan aturan platform, yang dipantau oleh moderator.



Mengapa memoderasi konten tidak aman? Ada dua alasan untuk ini. Yang pertama adalah undang-undang Rusia saat ini , yang menyatakan bahwa distribusi pornografi adalah ilegal. Alasan kedua adalah pengalaman pengguna . Platform ini ditujukan untuk orang-orang dari segala usia dan kami tidak mampu membeli konten dewasa di beranda.



Ketika kami dihadapkan pada tugas melacak konten yang tidak aman, segera menjadi jelas bahwa tidak mudah untuk membedakan antara konten yang aman dan tidak aman. Hal pertama yang penting untuk dipahami adalah bahwa pornografi dan ketelanjangan bukanlah konsep yang identik.



Pornografi tidak selalu tentang ketelanjangan: seks dengan pakaian adalah konten yang tidak aman dan seringkali hanya dapat dibedakan dari konten "aman" dari waktu ke waktu.



Ketelanjangan belum tentu tentang NSFW: sumo, gulat, orang-orang yang berpakaian lateks - semua ini adalah konten yang aman, di mana solusi terbuka sering kali tidak berhasil dengan benar.



Berdasarkan pertimbangan tersebut, kami mulai melihat bagaimana masalah ini dapat diselesaikan. Dari solusi open source yang menarik, model Open NSFW dari Yahoo, dilatih tentang data tertutup, telah ada selama beberapa tahun ( implementasi pada TF ). Ada juga repositori terbuka keren dari pengikis data Alexander Kim nsfw , dari mana Anda bisa mendapatkan beberapa ratus ribu gambar dari reddit, imgur, dan tampaknya beberapa situs lain. Gambar dipecah menjadi lima kelas: porno, hentai, erotis, netral, dan gambar . Berdasarkan data tersebut, ada banyak model, seperti waktu, dua

solusi Open source mengalami beberapa masalah - secara umum, kualitas rendah dari beberapa model, operasi yang salah pada kasus kompleks yang disebutkan di atas dan gambar yang aman seperti twerking girls dan meme dengan Ricardo Milos , serta perbaikan bermasalah, karena modelnya sudah usang dan terlatih pada data tertutup, atau datanya sangat berisik dan memiliki distribusi yang tidak dapat diprediksi.







Kami menyimpulkan bahwa konteks temporal penting untuk model yang baik , yaitu konteks temporal, dengan bantuannya kami akan dapat menangkap kasus yang lebih kompleks dalam dinamika. Pernyataan masalahnya menjadi jelas.



Mengenali tindakan



Dalam kasus kami, ini masih klasifikasi biner yang sama, tetapi alih-alih satu gambar, kami memberi makan urutan bingkai sebagai masukan.



Bagaimana mereka mengatasi masalah ini? Di tahun kedelapan belas, review bagus dari qure.ai keluar , dan sepertinya sejak itu tidak ada kemajuan radikal di lapangan, jadi saya merekomendasikannya. Penelitian yang lebih menarik tentang topik video berubah menjadi tugas yang lebih sulit untuk memahami dan menceritakan kembali video tersebut. Ada kisi grafik dan pembelajaran mandiri - hari kedua di bagian terakhir Machines Can See bahkan sepenuhnya dikhususkan untuk ini .



Jadi, klasifikasi tindakan. Sejarah kemajuan dalam model jaringan saraf kira-kira sebagai berikut: pertama, mereka melatih jaringan konvolusional tiga dimensi dari awal (C3D), kemudian mereka mulai mencoba konvolusi dengan beberapa jenis arsitektur berulang atau mekanisme perhatian; Pada titik tertentu, Andrey Karpaty mengusulkan untuk menggabungkan pandangan dari bingkai yang berbeda dengan cara yang berbeda, bahkan kemudian menjadi standar untuk membuat model berkepala dua, di mana urutan bingkai dalam BGR / RGB diumpankan ke satu masukan, dan aliran optik padat menghitungnya ke masukan lainnya . Ada juga beberapa lelucon dengan penggunaan fitur tambahan dan lapisan khusus seperti NetVLAD. Hasilnya, kami melihat model dengan performa terbaik pada benchmark UCF101.dimana video tersebut dikategorikan ke dalam 101 tindakan kelas. Model ini ternyata adalah arsitektur I3D dari DeepMind, paling cocok untuk kami, jadi saya akan memberi tahu Anda lebih banyak tentangnya.



DeepMind I3D



Sebagai acuan dasar, kami mencoba melatih C3D dan CNN-LSTM - kedua model membutuhkan waktu lama untuk dipelajari dan perlahan-lahan menyatu. Kemudian kami mengambil I3D dan hidup menjadi lebih baik. Ini adalah dua jaringan konvolusional tiga dimensi untuk BGR dan aliran optik, tetapi ada keanehan - tidak seperti model sebelumnya, yang ini dilatih sebelumnya di ImageNet dan set data sendiri dari Deepmind Kinetics-700 , di mana 650 ribu klip dan 700 kelas. Ini memberikan konvergensi model yang sangat cepat dalam beberapa jam ke kualitas yang baik.



Dalam produksi, kami hanya menggunakan kepala RGB, karena dua kali lebih cepat, dan aliran optik tidak benar-benar turun kualitasnya, dan di suatu tempat bisa lebih buruk karena fakta bahwa kami terutama mengalirkan layar komputer dan webcam, di mana konten terkadang cukup statis.



Kami memasukkan 16 bingkai ke dalam model, bukan 64. Sebelumnya, kami memiliki pintu masuk persegi, tetapi dengan mempertimbangkan spesifikasi platform, kami mengubah rasio aspek pintu masuk menjadi 16: 9. Tugasnya adalah klasifikasi biner, di mana kelas nol bukan porno, tetapi satu-satunya adalah porno. Dilatih dengan SGD dengan momentum, dia tampil sedikit lebih baik dari Adam. Augmentasi minimal - membalik horizontal dan kompresi JPEG. Tidak ada yang istimewa di sini.



Melengkapi topik model - setelah I3D, masih ada model EVANet - Neural Architecture Search untuk urutan frame, SlowFast Networks - jaringan dengan dua channel dengan frame rate yang berbeda, dan sebuah artikel oleh Google AI - Temporal Cycle-Consistency Learning , namun kami tidak menyelidikinya.



Apa yang diajarkan padanya?



Seperti yang saya tulis di atas, datanya ketat. Tidak ada yang ingin mempublikasikannya, sulit dari sudut pandang hukum dan etika - dari lisensi hingga persetujuan setiap orang yang terlibat dalam konten. Kumpulan data, lisensi, dan penerbitannya pada umumnya menyenangkan. Jika ada yang ingin menulis artikel tentang ini, saya akan sangat senang membacanya. Dari dataset akademis yang signifikan, hanya NPDI Brazil , sayangnya volumenya kecil, sebaran datanya tidak cukup beragam, terdiri dari keyframe, dan prosedur untuk mendapatkannya bukanlah yang termudah. Dan kami juga menginginkan kumpulan data dari video! Saya harus merakitnya sendiri.



Kumpulan data terdiri dari video, yang berarti Anda perlu mengambil video dari suatu tempat. Ada dua opsi cara mendapatkannya: mengikisdari situs porno dan YouTube dan mengumpulkan video secara manual . Setiap pendekatan memiliki pro dan kontra.



Scraping berpotensi memberi kita lebih banyak variasi dalam data, dan kita bisa mendapatkan markup yang cukup murah dengan mengatakan bahwa semua frame dari semua video dari pornhub bersyarat tidak aman, dan semua frame dari semua video dari YouTube aman. Ada kerugian - semua ini harus disimpan di suatu tempat, kumpulan data harus dikumpulkan dari sini, dan yang paling penting adalah ada gangguan dalam markup yang naif pada video porno. Ini adalah kesalahan langsung: intro, adegan di mana semua orang berpakaian, close-up tanpa karakteristik gender, menu game hentai - serta elemen yang dapat dilatih ulang oleh model: logo, layar hitam, potongan pengeditan. Derau ini hanya beberapa persen, dan dalam kasus terabyte video, menghilangkannya mahal. Kami akan membicarakan ini nanti.



Pendekatan kedua adalah perakitan manual. Keuntungannya adalah kita dapat memodelkan distribusi data yang diinginkan, data lebih dapat diprediksi, dan lebih mudah untuk memberi label hanya karena jumlahnya lebih sedikit. Tapi ada juga kekurangannya. Jelasnya, pendekatan ini menghasilkan lebih sedikit data, dan selain itu, pendekatan ini dapat mengalami bias kolektor, karena memodelkan distribusi dan mungkin melewatkan sesuatu.

Kami mengambil pendekatan kedua. Kami membuat daftar apa yang berpotensi berakhir di platform streaming: berbagai macam game, animasi, anime, bermain alat musik, reaksi, meme, sorotan streaming - dan mencoba untuk mencakup berbagai macam kemungkinan jenis konten yang tidak aman - dari sesuatu yang biasa hingga thrash dalam semangat porno dengan pterodactyls. Kami secara terpisah menyebutkan game komputer, yang sering digunakan untuk hentai 3D - Overwatch, misalnya. Dan mereka mulai mengumpulkan. Hasilnya, saya dapat menyoroti dua wawasan.



Fetishist adalah pengumpul data yang baik



Ada banyak kompilasi di situs porno untuk setiap selera, dan setiap video dapat berisi kutipan dari ratusan atau dua video yang sangat berbeda, yang memungkinkan Anda mendapatkan kumpulan data yang mirip dengan scraping dalam hal variasi, dan pada saat yang sama cukup murah untuk menandainya.



Dan pengguna YouTube juga



Contoh waktu: ada kompilasi sorotan streamer di YouTube, terkadang mencakup tahun yang terpisah, berlangsung selama berjam-jam dan berisi kurang dari seribu suntingan, mis. adegan. Contoh dua: puncak game / anime / seri. Katakanlah Anda perlu menjelaskan dengan jelas kepada jaringan saraf apa itu anime. Pada saat yang sama, ada sejumlah besar studio di Jepang, dengan gaya yang berkembang setiap tahun. Solusinya download video dengan atasan anime tahun-tahun tertentu dari youtuber ternama. Atau Anda perlu meliput berbagai adegan dari game populer. Pergi dan unduh video misalnya videogamedunkey untuk game ini.



Iterasi data



Kami memiliki beberapa iterasi data. Pada awalnya, itu sekitar seratus video, sekitar 70 jam dengan markup naif "semua bingkai dari situs porno - porno, semuanya dari YouTube - salahkan", dari mana kami kurang lebih mengambil sampel urutan bingkai untuk kumpulan data.



Model yang dilatih dengan cara ini bekerja dengan baik, tetapi karena kebisingan dalam data, model pertama memberikan kesalahan pada berbagai jenis logo, layar hitam, dan gadis berpakaian di atas sofa kulit hitam (Ν‘ Β° ΝœΚ– Ν‘ Β°) . Layar hitam dengan 0.817 yang akan datang sangat membingungkan, tetapi ternyata ada kesalahan dalam datanya - di salah satu kompilasi porno penulis secara tidak sengaja membuat video sepuluh menit lebih lama dari yang diperlukan, akibatnya ada banyak layar hitam yang "berbahaya" di kereta.



Akibatnya, kami dengan jujur ​​memberi markup data, dan kesalahan ini hilang. Dalam konteks pengikisan, muncul gagasan bahwa jika selama pemilihan video manual, kesalahan seperti itu merayap masuk, seperti pada layar hitam, maka ketika menyalin ribuan video akan lebih sulit untuk dilacak.



Seperti dicatat - untuk hampir semua video, kami menggunakan alat dari OpenCV CVAT.



Lima sen tentang CVAT
Computer Vision Annotation Tool. . , -. β€” , . XML. .





Kemudian, dalam pekerjaan kami, kami mengumpulkan lebih banyak video, memperbarui katalog game, dan sebagai hasilnya, sekarang kami memiliki beberapa ratus jam video dalam beberapa lusin kategori yang berbeda, dan kami tahu bahwa video itu terdiri dari ~ 30.000 adegan unik, ditambah data dengan tanda bintang tentangnya. kita akan bicara di bawah.



Bagus, kami memiliki data dengan tag mentah! Bagaimana kita mendapatkan dataset yang bagus dari mereka? Video dengan durasi berbeda, untuk setiap kategori, video dengan waktu dan tingkat keragaman yang berbeda dikumpulkan - bagaimana cara menggabungkan semuanya? Berapa banyak sampel yang bisa kita ambil dari dataset? Keragamannya entah bagaimana pada dasarnya terbatas (seperti jumlah maksimum bingkai video), bagaimana kita dapat memahami bahwa kita mengambil terlalu banyak?



Pada awal pekerjaan, kami tidak terlalu peduli dengan pertanyaan-pertanyaan ini dan hanya mengambil begitu banyak sampel dari setiap video dari kelas yang terpisah sehingga pornografi dan non-spot dalam kumpulan data kira-kira sama, dan jumlah sampel ditentukan secara intuitif ("yah, tampaknya beberapa kali dalam satu menit di hampir semua sesuatu yang sangat berbeda terjadi, kami akan mengambil 10.000 sampel "), dan kemudian secara empiris menggunakan metrik model yang dilatih.



Akibatnya, kami menjawab pertanyaan-pertanyaan ini, dan kami berakhir dengan alat yang agak rumit untuk mengumpulkan kumpulan data dari video.



Pertama-tama, kami ingin tahu seberapa banyak kami dapat memeras kompilasi video kami. Adalah logis bahwa kita akan memiliki lebih banyak klip yang digunakan untuk memotong sampel yang berbeda pada potongan tersebut.



Mari kita cari lem pengeditan


Dimungkinkan untuk menggunakan hanya puncak norma perbedaan antara bingkai yang berdekatan, tetapi kami menggunakan jaringan terbuka secara khusus untuk menemukan pemutusan - TransNet . Ini memberi kami dua hasil: yang pertama adalah kami mempelajari berapa banyak adegan yang kami miliki dalam data pada prinsipnya, dan yang kedua adalah kami mempelajari kategori data mana yang memiliki keragaman lebih rendah. Hentai lengkap, minecraft, dan hal-hal lain.



Sekarang unit pemotongan atom kami bukanlah video utuh, tetapi satu adegan... Hal ini memungkinkan kami mengumpulkan kumpulan data yang paling beragam, diimbangi berdasarkan kategori dan kelas, dengan mempertimbangkan adegan aman dari video porno. Video dikelompokkan ke dalam folder kategori, dan adegan diambil sampelnya secara sama untuk setiap kelas. Jika kami menambahkan video baru ke kumpulan data, maka pemotongan / penghapusan tambahan sampel yang tidak perlu akan terjadi seminimal mungkin, kumpulan data tidak akan dipotong ulang dari awal. Sangat nyaman.



Kami mengumpulkan kumpulan data 20.000 sampel di kereta, 2000 dalam validasi dan 2000 dalam pengujian, melatih model, kami menyukai metrik pada pengujian, dan mengirimkannya ke produksi.



Mari kita bicara sedikit tentang produksi - setiap hari kami memeriksa puluhan ribu klip, jadi bahkan satu persen dari positif palsu dapat mengirim spam ke moderator, jadi untuk beberapa waktu kami mengumpulkan berbagai positif palsu pada model dengan ambang respons yang sedikit lebih rendah, dan sebagai hasilnya, kami mendapatkan banyak data nyata. yang kami gunakan untuk pelatihan tambahan.



Ini adalah data dengan tanda bintang . Mereka memungkinkan kami untuk fokus pada beragam konten platform dan mengurangi beban moderator. Sekarang, sebagian besar positif palsu terjadi pada game baru - misalnya, pada satu waktu kami lebih cenderung menangkap Death Stranding dan Valorant.



Dataset saat ini terdiri dari 30000/5000/3000 sampel train / val / test.



Evolusi metrik kami pada pengujian kami, dipecah berdasarkan kategori, dan perbandingan dengan solusi terbuka (dapat diklik)




f1- . , precision , f1- .







Berkat detektor kami, waktu untuk memeriksa seluruh platform oleh moderator berkurang beberapa kali. Selain pornografi, kami menangkap ketelanjangan, logo TV, dan siaran olahraga, tetapi ini adalah cerita untuk lain waktu.



Sirip.





Versi video dari materi tersebut dapat dilihat di sini



All Articles