Comment nous avons gagné le hackathon interne en apprenant le skibidi, la soie dentaire et le javascript

VK a une belle tradition - un hackathon interne, auquel seuls les gars de VKontakte peuvent participer. Je vais vous parler du hackathon au nom de l'équipe, qui cette année a remporté la première place et est mort de fatigue dans son intégralité, mais a réussi à essayer un détecteur de mouvement de danse pour la caméra de l'histoire.



Mon nom est Pavel , je dirige la meilleure équipe de recherche sur VKontakte et traite chaleureusement les hackathons: en tant que participant (Junction ou un certain nombre de deephack-s) et récemment en tant que conservateur (hackathon VK ou cas VK sur Junction - à propos, c'était la première fois, lorsqu'une entreprise russe a participé). Ouvert à tous les VK Hackathon, nous passons la quatrième année (la dernière fois que nous sommes montés au siège général de l'Hermitage), et une partie importante de notre équipe technique y a participé avant de s'installer à VK.

Le hackathon interne permet à l'équipe elle-même d'expérimenter librement sur la plateforme, de tester différentes idées et généralement de s'amuser. Une différence importante est que les solutions peuvent être nettement plus intégrées dans VK, ce qui nous donne la possibilité de réaliser des prototypes intéressants.

Le hackathon a lieu à la Maison du Chanteur pendant une journée entière - en plein milieu de la semaine, le siège social se transforme en mouvement de minuit. C'est drôle de voir comment les nettoyeurs regardent autour de eux le matin avec surprise - généralement un bureau vide à 6 heures du matin se révèle soudain rempli de gens hirsutes qui se déplacent comme des zombies et crient: "Il reste cinq heures!" Ou quand à trois heures du matin, vous allez dans la cuisine et ça sent comme dans les dortoirs universitaires pendant les sessions: énergétique, pizza et panique. Cela se produit, bien sûr, au cours d'une journée typique, mais si massivement - rarement.

Trois hackathons nationaux ont eu lieu cet été. En 2019, nous avons décidé de ne pas jouer et passer un autre hiver - deux hackathons valent bien mieux qu'un, car c'est une excellente occasion d'expérimenter et de mettre en œuvre une idée qui n'a pas assez de temps à un rythme normal. Les règles ont également changé: avant, une équipe pouvait avoir un maximum de trois personnes, et cette année - quatre, mais une n'écrit pas de code, mais se spécialise dans autre chose. Vous pourriez appeler une équipe de designers, chefs de produit, testeurs, spécialistes du marketing et autres gars. Au total, 38 équipes ont participé à ce hackathon.

Drimtim (plus précisément, l'un des 38)


Nous avons comploté avec les Danois et avons convaincu ensemble Yegor et Tyoma de se joindre à l'équipe. Les modèles devaient être derrière nous, Yegor était responsable d'iOS, Tyoma - pour la production et la conception. Développement mobile + design + un peu d'apprentissage machine et un backend est la clé du succès du hackathon 2k19.

Même cette année, il y avait une division en pistes qui n'avaient pas été auparavant: médias (auxquels nous avons participé), communications, infrastructure, contenu et divertissement. Nous avions de puissants concurrents. Par exemple, nous étions constamment motivés par le designer senior VK Ilya , qui est venu dans notre chambre et a montré des prototypes des idées de son équipe.

Idée


«J'ai remporté des prix dans presque tous les hackathons auxquels j'ai participé et j'attendais la même chose de l'intérieur cet hiver.» ( Dania était confiante)

Notre idée (en particulier, Danina) était à l'origine comme ça: je voulais explorer le sujet de la génération de musique + tout mettre sur l'appareil, sinon «trop backend». Le hackathon a commencé par un brainstorming - ils se sont demandé ce qui pouvait être imaginé. Générer de la musique est intéressant, mais je veux que cela dépende de l'utilisateur. Des boutons? Peut-être dessiner sur l'écran et générer de la musique en fonction de cela? En parallèle, les gars de l'équipe Musique ont appris à ajouter les morceaux dont nous avons besoin. Mais cela ne semblait toujours pas tout à fait ça. Les équipes voisines ont joyeusement découvert quelque chose derrière leur ordinateur portable et ont causé de la frustration.
- Et si vous reconnaissiez une guitare aérienne, comme si vous jouiez d'une guitare, et en fonction de cela, jouez le son de la guitare? ( Sombre )

Bingo! C'est une idée de combat, et c'est cool de tout arranger en notre pouvoir. Pour la reconnaissance des mouvements, il y a un posenet , et c'est très bien (en plus du mobile-friendly). Figachim!



Solution


Les tâches principales sont d'obtenir une grille sur l'appareil (elle doit être réelle) et d'apprendre à reconnaître les mouvements. Egor a pris le portage, Tyoma - inventant quel genre de mouvements serait intéressant à visser (juste une guitare - ennuyeux), et Dani et moi - les reconnaissant. Mais cela nécessite des données. Quelle est la différence entre PRO et amateur? PRO a un cluster avec un GPU - c'est une fois, et deux - PRO collectera des données pour lui-même quand il en aura besoin. Dania a organisé un stand où des données brutes sur les coordonnées de la figure reconnue ont été écrites à partir de la caméra, puis dansent! Cette nuit-là, nous avons appris à danser la soie dentaire, le skibidi et la pipe .




Pour enregistrer les mouvements, nous avons utilisé un ordinateur portable en état de marche, qui a d'abord enregistré le visage de Dani (avant qu'il n'ait écrit une seule ligne sur js) quand il a vu une autre erreur js incompréhensible.



- Je ne comprends pas, j'ai une erreur de niveau: l'impression a disparu en Python! ( Dania )

Danse nocturne (littéralement)


Filmé la nuit pendant de nombreuses heures de mouvement continu devant la caméra. Nous l'avons enregistré nous-mêmes, et avons également surpris les développeurs qui ont erré sur le sol et FORCED TO DANCE. Il s'est avéré sept combinaisons différentes - maintenant, nous devions apprendre à les distinguer.




- Je suis venu toutes les trois heures pour vérifier si les gars sont vivants. Pacha a crié: "Nous avons un pivot!" - et Dania fleksil des dernières forces. Ensuite, tout le monde a dansé la pipe. Quand Daniel a manqué d'énergie, Pacha a ouvert la fenêtre et a dit: "Les garçons, nous devons nous rafraîchir." ( Madina )

Les données de la figure ont été prétraitées: elles ont jeté leurs jambes, ont fait la moyenne de leurs têtes et ont été transférées en coordonnées polaires par rapport au torse. Formation d'un détecteur de mouvement à l'aide de catboost - un extrait de données de trois secondes provenant du modèle. Jusqu'à cette nuit, ils ne fonctionnaient pas avec la bibliothèque - cela s'est avéré être un combat, et dans iOS, vous pouvez le pousser.



Ils ont enseigné une classification multiclasse, alors qu'une classe était aussi ennuyeuse que possible - juste chancelante devant la caméra. La chose la plus difficile a été d'enregistrer le mouvement «rock» - nous avons secoué la tête si altrueusement qu'au bout d'un moment, elle a commencé à tourner. Et ils ont tendu une main avec une "chèvre", même si c'était inutile - posenet n'a qu'un seul point sur toute la brosse, il ne voit pas ses doigts.



- Quelque part à 3 heures du matin, Pacha est monté dans un sac de couchage et a passé une heure à bouger exclusivement dedans, sautant comme un vrai kangourou. ( Madina )

Vers 8 heures du matin, une petite crise nous a frappés - tout est tombé en panne et rien n'a fonctionné, mais tout a soudainement fonctionné. Transformer les deux modèles en application s'est avéré être le plus grand défi - Yegor a terminé l'assemblage cinq minutes seulement avant la date limite. Nous lui donnons la parole:

- Après avoir trouvé l'idée, tout s'est très bien passé et de manière productive. Les gars ont formé la grille et dansé, et j'ai vissé la caméra des histoires PoseNet à JavaScript directement dans le navigateur. Les premiers tests ont bien fonctionné et ont été étonnamment rapides. Par conséquent, lorsque le matin, il s'est avéré que WebGL dans WebView se bloque de manière inattendue lorsque vous travaillez avec des textures pour un non-sens et qu'il n'y a aucun moyen de trouver une solution, je suis presque tombé dans le désespoir. Mais il était trop tard pour abandonner: nous brûlions avec l'idée. Par conséquent, depuis le dernier effort et sur la dernière banque de redbull, en mouvement, nous avons fait glisser un modèle CoreML alternatif vers le client iOS et avons commencé à suivre les poses déjà en natif - afin de les donner au modèle avec des danses et d'obtenir des résultats à leur sortie. En fait, nous avons recommencé le travail! Un autre défi était le deuxième modèle, qui a soudainement commencé à attendre plus d'un millier d'arguments pour entrer! Xcode a généré pour lui une interface qui serait tout simplement irréaliste à utiliser de front. L'avantage d'Objective-C n'a pas été abandonné et une solution élégante a été trouvée. ( Egor )

Pitching


Vendredi à 14 heures, il a fallu mettre en ligne une vidéo sur le projet - plusieurs équipes n’ont pas eu le temps et ont été disqualifiées. Et à 14h40 nous avons eu un pitch devant les curateurs de la piste liés au produit. Nous avions des gars de l'équipe Video and Music, et il semble qu'ils aient tout aimé sur le terrain. Sur notre piste, nous avons pris la deuxième place (nous voulions la première, car nous avons un projet tellement cool!) Et nous nous sommes retrouvés en finale (deux équipes sont passées de notre piste).

- Cette année, j'ai été le premier conservateur du hackathon interne. Je dirai avec retenue: évaluer le travail a été extrêmement difficile. Le niveau de toutes les équipes sans exception était en quelque sorte transcendantal. La fonctionnalité ne doit pas être uniquement technologique, pas seulement «proche de la production», pas seulement «potentiellement utile à nos produits». Le projet gagnant doit répondre à tous ces critères en même temps. Il semble que les gars l'ont fait. ( Andrey )

Le tangage final était à 17h40. À cette époque, il était nécessaire de préparer une autre démo, déjà pour toute l'équipe, et le jury était différent - directeur technique, directeur de produit et directeur marketing.

À cinq heures du soir, tout était fini - nous sommes rentrés à la maison pour dormir, sans rien savoir des résultats.

Résultats enfin


Les résultats n'ont été annoncés que lundi. D'abord, nous avons récompensé les gagnants des titres (pas notre cas - je vous rappelle que nous étions les seconds), puis les leaders du public (pas nous), puis le troisième (et ce n'est pas nous), le second (encore une fois pas nous) et, enfin, nous.

Voici quelques projets avec lesquels nous avons dû concurrencer:

2e place - un assistant vocal réactif;
3e place - chronologie des erreurs internes;
Le prix du public rappelle les prochaines réunions de chat.

«C'est le meilleur hackathon auquel j'ai participé.» Il y avait beaucoup plus de route que même sur Junction. ( Dania )

- J'ai vraiment aimé travailler avec des collègues d'un département complètement différent - Je n'avais jamais touché à l'apprentissage automatique, cela me semblait une sorte de magie, mais maintenant ce n'est plus le cas. ( Egor )
- C'était très cool de faire partie d'une équipe aussi cool avec un projet aussi cool. Au cours de la journée, j'ai réussi à être designer, vidéaste, ingénieur du son, monteur, musicien et rédacteur! Et j'étais le seul à pouvoir dormir. ( Sombre )

La vie après le hackathon


La plupart des projets développés lors des hackathons n'atteignent pas la vente pour diverses raisons: un changement d'orientation, une complexité de mise en œuvre, quelque chose d'imprévu dans la mise en œuvre. Le hackathon intérieur ne fait pas exception.

Néanmoins, nous listons les projets qui ont vu le jour:


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


All Articles