Dari 30 November hingga 2 Desember, PicsArt AI hackathon diadakan di Moskow dengan dana hadiah $ 100.000. Tugas utama adalah membuat solusi AI untuk memproses foto atau video, yang dapat digunakan dalam aplikasi PicsArt. Seorang kolega kerja (pada waktu itu) Arthur Kuzin menawarkan diri untuk berpartisipasi, setelah saya tertarik pada gagasan menganonimkan foto pribadi pengguna dengan menjaga detail (ekspresi wajah, dll.). Arthur juga memanggil Ilya Kibardin - seorang siswa di Institut Fisika dan Teknologi Moskow (orang lain harus menulis kode). Nama itu lahir dengan sangat cepat: DeepAnon.
Ini akan menjadi cerita tentang keputusan kita, miliknya degradasi pengembangan, hackathon, dan bagaimana tidak Anda harus beradaptasi dengan juri.
Untuk hackathon
Ada tiga cara untuk sampai ke hackathon. Yang pertama adalah masuk ke dalam 50 leaderboard teratas pada tugas segmentasi wajah - "Jenius jenius". Yang kedua adalah untuk segera bersatu dalam kelompok hingga 4 orang dan menunjukkan MVP yang berfungsi - "tim semangat". Dalam versi yang terakhir, perlu mengirim deskripsi ide briliannya. Kami memutuskan untuk tidak membuang waktu dan segera, seminggu sebelum hackathon, lakukan MVP. Secara umum, kami memutuskan bahwa mereka keren, jadi semua Tima masuk ke 10 besar di papan peringkat dan, akibatnya, inzeman.

Gagasan utama dari produk kami adalah sebagai berikut: orang-orang dengan ceroboh berbagi foto dengan diri mereka sendiri (kadang-kadang tidak sepenuhnya legal) di jejaring sosial, yang nantinya bisa mereka sesali, atau yang mereka bahkan dapat dihukum di masa depan. Untuk melindungi diri Anda, Anda dapat menyensor wajah Anda dengan "kotak", dan menutupi latar belakang. Tapi kemudian tidak hanya wajah yang akan disembunyikan, tetapi juga emosi di atasnya, dan latar belakang akan rusak. Untuk menjaga emosi pada wajah dan objek di latar belakang, aplikasi kita mengubah semua wajah di foto, dan menjadikannya kartun latar belakang. Dan agar seseorang tidak bisa dikenali oleh pakaian, itu diganti dengan yang lain.

Dalam seminggu kami berhasil melakukan hampir semua yang kami rencanakan. Untuk setiap tahap, jaringan saraf terpisah digunakan (dan kadang-kadang bahkan beberapa). Pada awalnya, semua wajah ada pada gambar dan diganti dengan wajah selebriti yang sama - untuk ini, solusi yang mirip dengan DeepFake digunakan. Kemudian, dengan bantuan segmentasi manusia, latar belakang dipisahkan dan transfer gaya ke kartun (Rick dan Morty) dilakukan di atasnya. Pada tahap terakhir, ada segmentasi bagian pakaian yang berbeda dan perubahannya - perubahan warna secara acak di ruang HSV, karena juri tidak punya waktu untuk mentransfer gaya sebelum MVP ditampilkan.

Pada setiap tahap, kesulitan teknis muncul. Sebagai contoh, semua implementasi DeepFake pada github hanya mampu mengubah wajah X tertentu menjadi wajah Y tertentu. Dalam perumusan masalah ini, diperlukan banyak foto dua orang. Cara termudah untuk mengumpulkan kumpulan data tersebut adalah menemukan video pertunjukan seseorang yang hanya ditayangkan sebagian besar waktu, dan, menggunakan deteksi wajah, potong foto. Penekanan utama dalam ide kami adalah bahwa adalah mungkin untuk membuat satu wajah Y yang berbeda dari orang mana pun. Kami mencoba menggunakan banyak jenis wajah dari dataset CelebA alih-alih satu orang X, dan, untungnya, itu dimulai. Di bawah ini adalah skema DeepFake yang diambil dari implementasi yang kami gunakan .
Hasilnya dibungkus dalam demo web labu dan dijalankan untuk ditampilkan. Berikut adalah deskripsi pusat laba kami untuk juri.
Memperkenalkan layanan yang memungkinkan Anda untuk menganonimkan konten media (foto dan video). Dalam versi dasar, layanan menyembunyikan wajah. Di tingkat lanjut - ini mengubah wajah pengguna menjadi wajah orang lain (DeepFake), mengubah pakaian dan latar belakang (segmentasi + Transfer Gaya). Sebagai penggunaan alternatif, layanan ini dapat berfungsi untuk membuat video atau foto yang menyenangkan dan viral dengan penggantian selebritis.
Sebelum dimulainya hackathon, ada beberapa hari yang tersisa, dan kami berhasil memperbaiki pakaian ganti. Jika sebelumnya ini adalah perubahan warna pada HSV, sekarang sekarang untuk setiap jenis pakaian gaya yang berbeda diterapkan (oleh berbagai seniman). Gagasan lain muncul bahwa akan lebih baik untuk membuat perubahan wajah tidak menjadi satu selebriti, tetapi terlebih dahulu mengklasifikasikan berdasarkan jenis kelamin, dan setelah itu mentransfer wajah pria dan wanita secara berbeda (misalnya, dalam Navalny dan Sobchak). Dan pada saat terakhir mereka berhasil menambahkan berbagai tingkat anonimisasi ke demo web - menjadi mungkin untuk memilih elemen anonimisasi mana yang akan digunakan.
Kami pergi ke bagian offline dengan sikap bahwa ini adalah kasus pengguna yang berguna dan tidak biasa, dan bukan hanya masker wajah yang viral. Salah satu pesan di obrolan tim kami:
Ya, jika Anda memikirkannya, semua orang membutuhkannya. Mereka hanya masih tidak menyadarinya. Banyak orang mencari-cari konten mereka ketika mereka memukul, minum, melanggar hukum dan berpikir bahwa negara tidak peduli terhadap mereka.
Dan setelah 5 tahun, AI akan datang, lihat posting lama, dan setelah fakta, istilah tersebut akan disolder.
Di hackathon
Bagian offline dimulai pada hari Jumat. Setiap tim diberi meja terpisah, dan prasmanan tidak ada habisnya karbohidrat cepat cookie Setelah pembukaan resmi, kami memutuskan untuk tidak membuang waktu dan segera mencari tahu dari juri apa yang mereka inginkan dari para peserta. Setelah berbicara dengan beberapa penyelenggara secara tidak resmi, kami merasa bahwa anonimitas mereka tidak menangkap mereka. Tetapi saya menyukai gagasan itu dengan segmentasi bagian-bagian individual foto dan perubahannya. Juga menjadi jelas bahwa mereka menginginkan sesuatu dari kami yang dapat diimplementasikan di PicsArt. Namun demikian, pada malam hari tim kami mengirimkan deskripsi proyek, yang berbicara tentang penganoniman, tetapi dengan penekanan pada segmentasi dan pengeditan bagian-bagian individual dari foto.
Deskripsi proyek untuk juri pada Jumat malam:
Kami menawarkan layanan yang memungkinkan Anda memproses foto secara sederhana dan otomatis untuk menganonimkannya. Dengan mengelompokkan pakaian, aksesori, rambut di kepala, serta elemen latar belakang, layanan ini memungkinkan Anda untuk memproses setiap objek secara mandiri, tanpa perlu pemilihan manual. Layanan ini juga memungkinkan Anda untuk mengubah wajah sambil mempertahankan ekspresi dan ekspresi wajah.
Menurut format hackathon, tim-tim yang telah menunjukkan diri dengan baik dalam komisi teknis akan diizinkan untuk bertahan. Komisi memiliki komunikasi langsung dengan juri dan tim teknis PicsArt, serta demo yang menunjukkan karyanya.
Pada komisi pertama pada hari Sabtu, kami tidak dapat menjual anonimisasi kepada juri, tetapi melihat bahwa mereka menyukai gagasan mengedit objek individu di foto. Juga, juri dengan sangat antusias menerima gagasan gaya rambut yang dapat dilepas dengan mengklik rambut (ternyata mereka sekarang mencoba melakukan sesuatu yang serupa).
Tim kami tidak dapat menahan tekanan ini (sayangnya) dan setuju untuk mengubah visi produk. Diputuskan untuk fokus pada perubahan kualitas pakaian.
Dalam demo di layar utama, direncanakan untuk menunjukkan beberapa opsi untuk foto asli (idealnya, pakaian diganti dengan ketuk pada layar):
Pakaian luar:
- pergi apa adanya
- jins
- macan tutul
Celana:
- pergi apa adanya
- jins
- macan tutul
Sepatu:
- pergi apa adanya
- sepatu lucu
Dalam versi dasar dengan rambut, diputuskan untuk membuat transformasi "botak - bukan botak". Untuk ini, botak dan sisanya dipilih dari dataset selebriti CelebA. Dalam dua kelompok ini, CycleGAN ditetapkan untuk belajar, yang dapat mengubah gambar domain A menjadi domain B, dan sebaliknya (contoh lain dapat mengubah kuda menjadi zebra).
Kami berhasil mengenal salah satu pengembang PicsArt dan belajar sedikit tentang dapur bagian dalam mereka. Dia tidak benar-benar percaya pada keberhasilan percobaan kami dengan rambut, tetapi melemparkan tautan ke arah mana mencarinya. Yang mengecewakan kami, neuron benar-benar tidak belajar cara menambah atau mengurangi rambut. Tapi dia belajar mengubah warna kulit (tebak mengapa).
Visi produk berubah setelah setiap komunikasi dengan komisi tersebut. Rencananya termasuk meningkatkan langit dan mengubah gaya objek individu (awalnya hanya pakaian): bangunan, mobil, serta aksesori di depan umum. Fokus beralih dari anonimisasi semakin banyak. Untuk presentasi akhir, kami memutuskan untuk mematuhi struktur 4 slide berikut:
- Segmentasi pakaian. Foto: foto asli, pakaian tersegmentasi, 4 opsi untuk memproses pakaian.
- Segmentasi adegan. Foto redup dengan langit yang terlalu terang. Langit dibuat artistik, bangunannya kartun.
- Tukar wajah dan ganti rambut. Lalu apa yang akan dimulai.
- Semuanya bersama. Slide yang menunjukkan bahwa ini dilakukan dalam tiga klik.
Tetapi ternyata presentasi itu tidak diperlukan. Pada Sabtu malam, semua orang diberi tahu bahwa pertahanan seharusnya adalah kinerja 3 menit tanpa presentasi. Dari adegan itu, Anda harus menunjukkan demo Anda secara langsung. Panitia ingin melihat teknologi yang berfungsi, bukan presentasi yang indah, dan itu keren. Dibandingkan dengan hackathons lain, di mana tim dengan demo rusak menang, kami menyukai konsep ini. Satu-satunya masalah adalah bahwa pada saat itu banyak model kami diluncurkan secara individual dan untuk waktu yang sangat lama. Untuk memamerkan panggung, diperlukan optimasi.
Selama pengembangan, mentor dari komisi teknis berjalan di sekitar aula dan melihat perkembangannya. Setelah percakapan lain dengan salah satu mentor, kami mendapat umpan balik bahwa akan lebih baik bagi kami untuk fokus pada satu hal, menurutnya, pada berganti pakaian. PicsArt ingin hasilnya realistis dan dapat ditampilkan kepada pengguna. Bahkan, mentor dan anggota juri yang berbeda memiliki sudut pandang yang berbeda tentang apa proyek yang ideal bagi mereka.
Beberapa pesan dari tim mengobrol saat ituEntah mereka memiliki efek viral pada situs hackathon, maka mereka adalah editor yang serius
Ble, bukan hackathon, tapi padat: "ini adalah INFA baru, ulangi semua yang kita miliki"
Setelah perubahan rambut tidak dilakukan oleh CycleGAN, kami memutuskan untuk mencoba pendekatan yang berbeda. Pertama segmen rambut, dan kemudian menerapkan pewarnaan di atasnya. Tugas pewarnaan adalah mengembalikan bagian gambar yang tersembunyi dari konteks sekitarnya. Menurut rencana kami, kami menyembunyikan rambut, dan jaringan saraf akan mencoba mengembalikannya. Tetapi karena jaringan tidak melihat jenis rambut apa yang dimiliki orang ini, itu akan mengembalikan gaya rambut lain. Masalahnya adalah bahwa bahkan model yang dilatih pada wajah orang tidak dapat mengembalikan rambut secara normal (jika Anda hanya melukis sebagian rambut, itu berhasil).
Kesulitan utama adalah berbagai macam gaya rambut. Ada ide untuk melatih pewarnaan hanya pada orang-orang botak, dan kemudian model itu mungkin akan belajar mengubah gaya rambut apa pun karena kurangnya rambut. Kami mengambil implementasi jaringan saraf dari repositori ini .
Karena demo akan perlu ditampilkan dari tempat kejadian secara real time, saya harus mengoptimalkan kecepatan pipa. Peningkatan kecepatan terbesar diberikan oleh transfer semua jaringan saraf ke memori selama durasi aplikasi. Ada beberapa kesulitan: mulai melakukan segalanya dalam buruh pelabuhan, tetapi mencetak gol di sepanjang jalan, beberapa kali jatuh sakit dengan versi tensorflow. Faktanya, sulit untuk tidak masuk ke dalam situasi seperti itu ketika Anda mencoba meluncurkan selusin repositori dari github sehari, masing-masing menggunakan versi tensorflow yang berbeda, memperbarui ke versi yang diinginkan di satu tempat - Anda memecahnya di tempat lain. Docker bisa menjadi teman yang baik dalam situasi seperti itu, tetapi dalam hackathon Anda ingin menghabiskan setiap menit menguji hipotesis baru, dan tidak menciptakan gambar baru. Namun demikian, menyerah pada godaan seperti itu, Anda berisiko menghabiskan lebih banyak waktu men-debug kode dan mencoba memahami versi perpustakaan mana yang Anda butuhkan.
Hari terakhir
Pada hari Minggu pagi, kami memutuskan pada visi akhir produk (sudah saatnya): berganti pakaian dengan kemungkinan meningkatkan langit. Saya ingin mempersempit tugas sebanyak mungkin, tetapi melakukan hanya mengganti pakaian sepertinya terlalu kecil. Beginilah "desain" aplikasi web kami terlihat.
Awalnya, mereka ingin menambahkan desain adaptif untuk membuatnya nyaman untuk ditonton dari ponsel. Tapi waktu sudah hampir habis, dan desain kami turun ke np.vstack (imgs_list).
Sebelum penampilan terakhir, saya ingin membawa fitur dengan pakaian ke kondisi selesai. Alfa memadukan pakaian dan latar belakang ditambahkan - transisi tajam menghilang. Hanya menyisakan tekstur paling realistis - jins dan kulit buaya. Beberapa jam sebelum pertunjukan, saya berhasil memulai segmentasi langit dan mentransfer gaya dari repositori ini . Ada beberapa pilihan dengan mengubah langit menjadi apokaliptik, beracun, kartun. Tetapi langit musim dingin menjadi topik yang paling cocok dari kontes - penerapannya memberi efek "perbaiki" langit.
Hanya ada sedikit waktu yang tersisa ketika semua komponen terhubung menjadi satu kesatuan dan menghasilkan. Kami mengunduh banyak foto dari jejaring sosial dan berencana meluncurkan aplikasi untuk memilih kasus yang paling sukses (coretan). Tapi ternyata tim kami yang pertama, jadi semuanya sejujur ββmungkin - mereka menunjukkan demo dalam foto acak.
Arthur, berbicara di atas panggung, dapat mengungkapkan ide kami, dan Ilya menunjukkan MVP kami di proyektor - pakaian berubah di semua foto, dan langit membaik.
Tidak semua peserta dapat mengatasi tugas - hanya untuk menunjukkan demo mereka. Godaan untuk menambahkan beberapa slide yang indah sangat hebat. Dari solusi yang paling kami sukai tentang pertahanan - mengubah video menjadi komik, serta menggabungkan dua foto menjadi satu.
Hasil
Akibatnya, menurut info orang dalam, tim kami mengambil tempat ke-6 selangkah menjauh dari mani.
Setelah fakta, kami sampai pada pendapat umum (well, selain fakta bahwa 3 dari 5 tim teratas menerima hadiah dengan tidak patut) bahwa perlu untuk gigih dan dengan tegas menyelesaikan ide awal anonimisasi. Bahkan sekarang, kami yakin itu cocok dan akan memberikan nilai bagi sejumlah pengguna. Terlibat dalam mengembangkan ide dengan anonimisasi sepanjang akhir pekan, kami setidaknya akan mendapatkan lebih banyak kesenangan.
Jika Anda belum pernah berpartisipasi dalam hackathons, pastikan untuk mencoba - ujian yang sangat baik untuk diri sendiri dan tim Anda, kesempatan untuk menyadari sesuatu yang Anda tidak pernah punya waktu. Dan tentu saja, pastikan untuk melakukan apa yang Anda suka, karena caffe maksimum dari proses hanya dapat diperoleh dengan membakar dalam hardcore.
Status proyek saat ini
Tim kami memposting kode untuk demo terakhir di GitHub . Dan juga ada repositori terpisah yang melakukan anonimisasi . Di masa depan, ada rencana untuk mengembangkan versi awal dengan anonimisasi: untuk menulis ulang semua yang ada di PyTorch, untuk melatih foto dengan resolusi lebih tinggi dan lebih sedikit noise (foto dengan hanya satu wajah), serta menaikkan bot di telegram.
Bagi mereka yang sudah ingin mencoba versi yang lahir di awal hackathon, bot di telegram diluncurkan dalam mode demo ( @DbrainDeepAnon
-> /start
-> /unlock dbraindeepanon
). Ini bekerja di server Dbrain (terima kasih kami), di mana semua pelatihan transfer wajah berlangsung, jadi cobalah sampai dimatikan. Layanan ini menggunakan pembungkus internal Dbrain - wrappa, yang memungkinkan Anda untuk dengan mudah membungkus wadah buruh pelabuhan dan meluncurkan bot telegram. Wrappa akan segera tersedia dalam sumber terbuka.
Saya ingin mencatat bahwa pekerjaan kami tidak sia-sia. Berkat DeepAnon, satu "anonim," yang sangat khawatir tentang privasi datanya, akhirnya bisa memimpin sebuah instagram tentang hidupnya. Dia tidak lagi takut bahwa kamera di kota akan dapat mengenali wajahnya dari foto-foto dari jejaring sosial, namun, teman-teman akan dapat mengenalinya. Wajah semua orang di Instagram-nya juga dianonimkan.
Tautan ke repositori yang kami gunakan:
https://github.com/shaoanlu/faceswap-GAN
https://github.com/junyanz/pytorch-CycleGAN-and-pix2pix
https://github.com/sacmehta/ESPNet
https://github.com/JiahuiYu/generative_inpainting
https://github.com/NVIDIA/FastPhotoStyle
PS Juga, untuk penggemar, saya mencoba melatih kembali jaringan untuk mengganti orang dengan salah satu anggota ODS . Coba tebak siapa. Jaringan memberi nama TestesteroNet.