Comment nous n'avons pas gagné le hackathon

Du 30 novembre au 2 décembre, le hackathon PicsArt AI a eu lieu à Moscou avec un prix de 100 000 $. La tâche principale était de créer une solution d'IA pour le traitement des photos ou des vidéos, qui peut être utilisée dans l'application PicsArt. Un collègue de travail (à l'époque) Arthur Kuzin a proposé de participer, m'ayant intéressé à l'idée d'anonymiser les photos personnelles des utilisateurs en préservant les détails (expressions faciales, etc.). Arthur a également appelé Ilya Kibardin - un étudiant de l'Institut de physique et de technologie de Moscou (quelqu'un d'autre a dû écrire du code). Le nom est né très rapidement: DeepAnon.



Ce sera une histoire sur notre décision, son dégradation développement, hackathon, et comment pas il faut s'adapter au jury.


Au hackathon


Il y avait trois façons de se rendre au hackathon. La première consiste à entrer dans le top 50 du classement sur la tâche de la segmentation des visages - «Datascience genius». La seconde consiste à s'unir immédiatement dans un groupe de jusqu'à 4 personnes et à montrer un MVP qui fonctionne - une «équipe pleine d'entrain». Dans cette dernière version, il fallait simplement envoyer une description de sa brillante idée. Nous avons décidé de ne pas perdre de temps et immédiatement, une semaine avant le hackathon, faites MVP. Eh bien, en général, nous avons décidé qu'ils étaient cool, alors tout Tima est entré dans le top 10 du classement et, par conséquent, Inzeman.



L'idée principale de notre produit est la suivante: les gens partagent sans réfléchir des photos avec eux-mêmes (parfois pas entièrement légaux) sur les réseaux sociaux, qu'ils peuvent regretter plus tard, ou pour lesquels ils peuvent même être punis à l'avenir. Pour vous protéger, vous pouvez censurer votre visage avec des «carrés» et masquer l'arrière-plan. Mais alors non seulement le visage sera caché, mais aussi les émotions qui s'y trouvent, et l'arrière-plan sera corrompu. Pour garder les émotions sur le visage et les objets en arrière-plan, notre application change tous les visages de la photo et fait le cartoony en arrière-plan. Et pour qu'une personne ne puisse pas être reconnue par des vêtements, elle est remplacée par une autre.



En une semaine, nous avons réussi à faire presque tout ce que nous avions prévu. Pour chaque étape, un réseau neuronal distinct a été utilisé (et parfois même plusieurs). Au début, tous les visages étaient sur l'image et remplacés par le même visage de célébrité - pour cela, une solution similaire à DeepFake a été utilisée. Ensuite, à l'aide de la segmentation humaine, l'arrière-plan a été séparé et le transfert de style vers le dessin animé (Rick et Morty) a été effectué dessus. À la dernière étape, il y a eu une segmentation des différentes parties des vêtements et de leur changement - un changement aléatoire de couleurs dans l'espace HSV, car le jury n'a pas eu le temps de transférer le style avant la présentation du MVP.



A chaque étape, des difficultés techniques ont surgi. Par exemple, toutes les implémentations DeepFake sur un github ont pu transformer uniquement un certain visage X en un visage spécifique Y. Dans cette formulation du problème, de nombreuses photographies de deux personnes sont nécessaires. Le moyen le plus simple de collecter un tel ensemble de données est de trouver une vidéo des performances d'une personne où seule elle est montrée la plupart du temps et, en utilisant la détection de visages, de couper une photo. L'accent principal de notre idée était précisément qu'il est possible de créer le même visage Y à partir de n'importe quelle personne. Nous avons essayé d'utiliser beaucoup de toutes sortes de visages de l'ensemble de données CelebA au lieu d'une personne X, et, heureusement, cela a commencé. Voici le schéma DeepFake tiré de l'implémentation que nous avons utilisée .



Le résultat a été enveloppé dans une démonstration Web de la fiole et exécuté pour l'affichage. Voici la description de notre centre de profit pour le jury.


Présentation d'un service qui vous permet d'anonymiser le contenu multimédia (photos et vidéos). Dans la version de base, le service masque les visages. En avancé - il change les visages des utilisateurs en visages d'autres personnes (DeepFake), change les vêtements et l'arrière-plan (segmentation + transfert de style). À titre d'alternative, le service peut servir à créer des vidéos ou des photos amusantes et virales avec des célébrités remplacées.

Il restait quelques jours avant le début du hackathon et nous avons réussi à améliorer le changement de vêtements. Si avant cela c'était un changement de couleur dans HSV, maintenant maintenant pour chaque type de vêtements un style différent a été appliqué (par divers artistes). Une autre idée est venue qu'il serait préférable de changer de visage non pas en une célébrité, mais d'abord de classer par sexe, puis de transférer les visages des hommes et des femmes différemment (par exemple, à Navalny et à Sobchak). Et au dernier moment, ils ont réussi à ajouter différents niveaux d'anonymisation à la démo Web - il est devenu possible de choisir les éléments d'anonymisation à utiliser.




Nous sommes allés à la partie hors ligne avec l'attitude qu'il s'agit d'un cas d'utilisation utile et inhabituel, et pas seulement de masques faciaux viraux. L'un des messages de notre chat d'équipe:


Oui, si vous y réfléchissez, tout le monde en a besoin. Ils ne s'en rendaient toujours pas compte. Beaucoup de gens fouillent autour de leur contenu alors qu'ils battent, boivent, enfreignent la loi et pensent que l'État ne se soucie pas d'eux.
Et après 5 ans, l'IA viendra, regardez les anciens postes, et après coup, le terme sera soudé.

Sur le hackathon


La partie hors ligne a commencé vendredi. Chaque équipe a été affectée à une table séparée, et le buffet était sans fin glucides rapides les cookies. Après l'ouverture officielle, nous avons décidé de ne pas perdre de temps et de découvrir immédiatement auprès du jury ce qu'ils attendaient des participants. Après avoir discuté avec plusieurs organisateurs de manière informelle, nous avons estimé que leur anonymat ne les avait pas rattrapés. Mais j'ai aimé l'idée avec la segmentation des parties individuelles de la photo et leur changement. Il est également devenu clair qu'ils veulent quelque chose de notre part qui puisse être implémenté dans PicsArt. Néanmoins, dans la soirée, notre équipe a envoyé une description du projet, qui parlait d'anonymisation, mais en mettant l'accent sur la segmentation et l'édition de certaines parties de la photo.


Description du projet pour le jury vendredi soir:


Nous offrons un service qui vous permet de traiter simplement et automatiquement les photos pour les anonymiser. En segmentant les vêtements, les accessoires, les cheveux sur la tête, ainsi que les éléments d'arrière-plan, le service vous permet de traiter chaque objet indépendamment, sans avoir besoin d'une sélection manuelle. Le service vous permet également de changer de visage tout en conservant les expressions faciales et les expressions.

Selon le format du hackathon, les équipes qui se sont bien illustrées sur les commissions techniques seront autorisées à défendre. Les commissions ont eu une communication en direct avec le jury et l'équipe technique de PicsArt, ainsi qu'une démo démontrant son travail.



Lors de la toute première commande samedi, nous n'avons pas pu vendre l'anonymisation au jury, mais nous avons vu qu'ils aimaient l'idée de retoucher des objets individuels sur la photo. De plus, le jury a accepté avec enthousiasme l'idée d'une coiffure amovible en cliquant sur les cheveux (il s'est avéré qu'ils essayaient maintenant de faire quelque chose de similaire).


Notre équipe n'a pas pu (malheureusement) résister à cette pression et a accepté de changer la vision du produit. Il a été décidé de se concentrer sur un changement de vêtements de qualité.


Dans la démo sur l'écran principal, il était prévu de montrer plusieurs options pour la photo originale (idéalement, les vêtements changent en tapant sur l'écran):


Vêtements d'extérieur:


  • laisser tel quel
  • jeans
  • léopard

Pantalon:


  • laisser tel quel
  • jeans
  • léopard

Chaussures:


  • laisser tel quel
  • chaussures drôles

Dans la version de base avec des cheveux, il a été décidé de faire la transformation «chauve - pas chauve». Pour cela, chauve et tout le reste ont été sélectionnés à partir de l'ensemble de données des célébrités CelebA. Dans ces deux groupes, CycleGAN devait étudier, qui peut transformer des images du domaine A en domaine B, et vice versa (un autre exemple serait de transformer un cheval en zèbre).


Nous avons réussi à connaître l'un des développeurs de PicsArt et à en apprendre un peu plus sur leur cuisine intérieure. Il ne croyait pas vraiment au succès de notre expérience avec les cheveux, mais a jeté des liens dans quelle direction regarder. À notre grande déception, le neurone n'a vraiment pas appris à ajouter ou à réduire les cheveux. Mais elle a appris à changer le teint (devinez pourquoi).



La vision du produit a changé après chaque communication avec ces commissions. Les plans comprenaient l'amélioration du ciel et le changement des styles d'objets individuels (initialement uniquement des vêtements): bâtiments, voitures, ainsi que des accessoires en public. L'accent est de plus en plus mis sur l'anonymisation. Pour la présentation finale, nous avons décidé d'adhérer à la structure suivante de 4 diapositives:


  1. Segmentation des vêtements. Photo: photo originale, vêtements segmentés, 4 options de traitement des vêtements.
  2. Segmentation de la scène. Une photo sombre avec un ciel surexposé. Le ciel est rendu artistique, les bâtiments sont cartoony.
  3. Échange de visage et changement de cheveux. Alors ce qui va commencer.
  4. Tous ensemble. Une diapositive qui montre que cela se fait en trois clics.

Mais il s'est avéré que la présentation n'était pas nécessaire. Samedi soir, tout le monde a été informé que la défense devrait être une représentation de 3 minutes sans présentation. Depuis la scène, vous devrez montrer votre démo en temps réel. Les organisateurs veulent voir des technologies qui fonctionnent, pas de belles présentations, et c'est cool. Comparé à d'autres hackathons, où des équipes avec des démos cassées ont gagné, nous avons aimé ce concept. Le seul problème était qu'à cette époque, notre bouquet de modèles a été lancé individuellement et pendant très longtemps. Pour montrer la scène, une optimisation était nécessaire.


Pendant le développement, des mentors de la commission technique se sont promenés dans le hall et ont regardé les progrès. Après une autre conversation avec l'un des mentors, nous avons reçu une rétroaction selon laquelle il serait préférable pour nous de nous concentrer sur une chose, à son avis, sur le changement de vêtements. PicsArt veut que le résultat soit réaliste et visible par les utilisateurs. En fait, différents mentors et membres du jury avaient des points de vue différents sur ce qu'un projet idéal devrait être pour eux.


Plusieurs messages du chat d'équipe à ce moment
Soit ils ont un effet viral sur le site du hackathon, alors ils sont un éditeur sérieux

Ble, pas un hackathon, mais un solide: "voici une nouvelle INFA, refaites tout ce que nous avons"

Après que le changement de cheveux n'a pas été terminé par CycleGAN, nous avons décidé d'essayer une approche différente. Segmentez d'abord les cheveux, puis appliquez de la peinture dessus. La tâche d'inpainting consiste à restaurer la partie cachée de l'image à partir du contexte environnant. Selon notre plan, nous cachons les cheveux, et le réseau neuronal tentera de les restaurer. Mais comme le réseau n'a pas vu le type de cheveux de cette personne, il va restaurer une autre coiffure. Le problème est que même les modèles formés sur le visage des gens n'ont pas pu restaurer les cheveux normalement (si vous ne peignez qu'une partie des cheveux, cela fonctionne).



La principale difficulté est une grande variété de coiffures. Il y avait une idée de former à la peinture uniquement sur des personnes chauves, puis le modèle apprendrait probablement à changer toute coiffure par manque de cheveux. Nous avons repris l'implémentation du réseau neuronal de ce référentiel .


Étant donné que la démo devra être montrée à partir de la scène en temps réel, j'ai dû optimiser la vitesse du pipeline. La plus grande augmentation de vitesse a été donnée par le transfert de tous les réseaux de neurones en mémoire pendant toute la durée de l'application. Il y avait quelques difficultés: commencer à tout faire dans Docker, mais marquer des points en cours de route, à plusieurs reprises est tombé dans la douleur avec les versions tensorflow. En fait, il est difficile de ne pas se retrouver dans une telle situation lorsque vous essayez de lancer une douzaine de référentiels à partir d'un github par jour, chacun utilisant une version différente de tensorflow, se mettant à jour vers la version souhaitée à un endroit - vous la cassez à un autre. Docker peut être un bon ami dans une telle situation, mais dans un hackathon, vous voulez passer chaque minute à tester de nouvelles hypothèses et à ne pas créer une nouvelle image. Néanmoins, succombant à une telle tentation, vous courez le risque de passer encore plus de temps à déboguer le code et à essayer de déterminer quelle version de la bibliothèque à quel endroit vous avez besoin.


Dernier jour


Dimanche matin, nous avons décidé de la vision finale du produit (il est déjà temps): changer de vêtements avec la possibilité d'améliorer le ciel. Je voulais limiter la tâche autant que possible, mais ne faire que changer de vêtements me semblait trop petit. Voilà à quoi ressemblait le «design» de notre application web.



Au départ, ils voulaient ajouter un design adaptatif pour le rendre pratique à regarder depuis le téléphone. Mais le temps commençait à manquer et notre conception se résumait à np.vstack (imgs_list).


Avant la performance finale, je voulais mettre la fonctionnalité avec des vêtements dans un état fini. Le mélange alpha des vêtements et du fond a été ajouté - les transitions nettes ont disparu. Ne laisse que les textures les plus réalistes - jeans et peau de crocodile. Quelques heures avant le spectacle, j'ai réussi à démarrer la segmentation du ciel et à lui transférer le style depuis ce référentiel . Il y avait des options pour transformer le ciel en un dessin animé apocalyptique, toxique et toxique. Mais le ciel d'hiver est devenu le sujet le plus approprié du concours - son application a donné l'effet d'un «améliorateur» du ciel.



Il ne restait que très peu de temps lorsque tous les composants étaient connectés en un seul et gagnaient. Nous avons téléchargé de nombreuses photos à partir des réseaux sociaux et prévoyons de lancer une application sur eux pour sélectionner les cas les plus réussis (gribouillage). Mais il s'est avéré que notre équipe était la première, donc tout était aussi honnête que possible - ils ont montré des démos sur des photos aléatoires.



Arthur, s'exprimant sur la scène, a pu révéler notre idée, et Ilya a démontré notre MVP sur le projecteur - les vêtements ont changé sur toutes les photos et le ciel s'est amélioré.



Une autre photo









Tous les participants n'ont pas été en mesure de faire face à la tâche - de montrer uniquement leur démo. La tentation d'ajouter de belles diapositives était grande. Parmi les solutions que nous avons le plus appréciées dans la défense - transformer des vidéos en bandes dessinées, ainsi que combiner deux photos en une.


Résultats


En conséquence, selon les informations privilégiées, notre équipe a pris la 6e place à un pas du mani.


Après coup, nous sommes arrivés à une opinion commune (enfin, outre le fait que 3 des 5 meilleures équipes ont reçu le prix sans le mériter) qu'il était nécessaire d'être persévérant et de terminer de manière décisive l'idée initiale d'anonymisation. Aujourd'hui encore, nous sommes convaincus qu'il convient et apportera de la valeur à un certain nombre d'utilisateurs. Engagés à développer des idées avec anonymisation tout le week-end, nous aurions au moins plus de plaisir.


Si vous n'avez jamais participé à des hackathons, assurez-vous d'essayer - un excellent test de vous-même et de votre équipe, une chance de réaliser quelque chose pour lequel vous n'avez jamais eu le temps. Et bien sûr, assurez-vous de faire ce que vous aimez, car le maximum de café du processus ne peut être obtenu qu'en brûlant en hardcore.


État actuel du projet


Notre équipe a publié le code de la démo finale sur GitHub . Et il y a aussi un référentiel séparé qui fait l' anonymisation . À l'avenir, il est prévu de développer la version initiale avec anonymisation: tout réécrire sur PyTorch, s'entraîner à des photos avec une résolution plus élevée et moins de bruit (photo avec un seul visage), ainsi que soulever le bot en télégramme.


Pour ceux qui veulent déjà essayer la version née au tout début du hackathon, un bot en télégramme est lancé en mode démo ( @DbrainDeepAnon -> /start -> /unlock dbraindeepanon ). Cela fonctionne sur le serveur Dbrain (nos remerciements), sur lequel toute la formation de transfert de visage a eu lieu, alors essayez-le jusqu'à ce qu'il soit éteint. Le service utilise le wrapper interne Dbrain - wrappa, qui vous permet d'envelopper facilement le conteneur docker et de lancer le bot de télégramme. Wrappa sera bientôt disponible en open source.


Je voudrais noter que notre travail n'a pas été vain. Grâce à DeepAnon, une «personne anonyme», très inquiète pour la confidentialité de ses données, a finalement pu mener un instagram sur sa vie. Il n'a plus peur que les caméras de la ville puissent reconnaître son visage à partir de photographies provenant des réseaux sociaux, mais des amis pourront le reconnaître. Les visages de toutes les personnes sur son Instagram sont également anonymisés.



Liens vers les référentiels que nous avons utilisés:


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 Aussi, pour le fan, j'ai essayé de recycler le réseau pour remplacer les gens par l'un des membres ODS . Essayez de deviner qui. Les réseaux ont donné le nom de TestesteroNet.



Une autre photo


Source: https://habr.com/ru/post/fr433586/


All Articles