ハッカソンに勝てなかった方法

11月30日から12月2日まで、 PicsArt AIハッカソンがモスクワで開催され、賞金は100,000ドルでした。 主なタスクは、PicsArtアプリケーションで使用できる写真またはビデオを処理するAIソリューションを作成することでした。 職場の同僚(当時)のArthur Kuzinが参加を申し出て、詳細(顔の表情など)を保存したユーザーの個人写真を匿名化するアイデアに興味を持っていました。 アーサーは、モスクワ物理学技術研究所の学生であるイリヤキバルディン(他の誰かがコードを書く必要がありました)とも呼びました。 名前は非常に早く生まれました:DeepAnon。













これは私たちの決定についての物語です、彼の 劣化 開発、ハッカソン、および方法 じゃない あなたはju審に適応する必要があります。







ハッカソンへ



ハッカソンに行くには3つの方法がありました。 1つは、顔のセグメンテーションのタスクでトップ50のリーダーボードに入ることです-「Datascience genius」。 2つ目は、最大4人のグループにすぐに団結し、稼働中のMVP-「元気なチーム」を見せることです。 後者のバージョンでは、彼の素晴らしいアイデアの説明を送信するだけでした。 時間を無駄にせず、ハッカソンの1週間前にすぐにMVPを行うことにしました。 まあ、一般的に、私たちは彼らがクールだと決めたので、Timaのすべてがリーダーボードのトップ10に入り、それに応じてインゼマンになりました。













私たちの製品の主なアイデアは次のとおりです:人々はソーシャルネットワーク上で自分自身と写真を軽率に共有し(時には合法ではない)、後悔したり、将来罰を受けることもあります。 自分を守るために、「四角」で顔を検閲し、背景に光沢を付けることができます。 しかし、顔だけでなく感情も隠され、背景が台無しになります。 顔と背景のオブジェクトの感情を維持するために、アプリケーションは写真のすべての顔を変更し、背景を漫画的にします。 そして、人が衣服によって認識されないように、別の人に置き換えられます。













1週間で、計画していたほぼすべてのことを行うことができました。 各段階で、個別のニューラルネットワーク(および場合によっては複数)が使用されました。 最初は、すべての顔が画像上にあり、同じ有名人の顔に置き換えられました。これには、DeepFakeに似たソリューションが使用されました。 次に、人間のセグメンテーションの助けを借りて、背景が分離され、その上で漫画風のスタイル転送が行われました(Rick and Morty)。 最終段階では、衣服のさまざまな部分とそれらの変化のセグメント化がありました-HS審員はMVPが表示される前にスタイルを転送する時間がなかったため、HSV空間の色のランダムなシフト。













各段階で、技術的な問題が発生しました。 たとえば、github上のすべてのDeepFake実装は、特定の顔Xのみを特定の顔Yに変換できました。この問題の定式化では、2人の多くの写真が必要です。 このようなデータセットを収集する最も簡単な方法は、ほとんどの場合に彼だけが表示される人のパフォーマンスのビデオを検索し、顔検出を使用して写真をカットすることです。 私たちのアイデアの主な強調点は、誰からでもまったく同じ異なる顔Yを作成できることです。1つの顔Xではなく、CelebAデータセットのさまざまな顔を多数使用してみました。 以下は、 使用した実装から取得したDeepFakeスキームです。













結果はフラスコWebデモにラップされ、表示のために実行されました。 こちらが審査員の利益センターの説明です。







メディアコンテンツ(写真やビデオ)を匿名化できるサービスの紹介。 基本バージョンでは、サービスは顔を非表示にします。 高度-ユーザーの顔を他の人の顔に変更し(DeepFake)、衣服と背景を変更します(セグメンテーション+スタイル転送)。 代わりの使用法として、このサービスは、有名人を置き換えて、楽しくてバイラルなビデオや写真を作成するのに役立ちます。

ハッカソンが始まる前に数日が残っていたので、私たちは何とか着替えを改善することができました。 それ以前にHSVの色が変更されていた場合、今では衣類の種類ごとに異なるスタイルが適用されています(さまざまなアーティストによって)。 別のアイデアは、顔を1人の有名人に変えるのではなく、最初に性別で分類し、次に男性と女性の顔を異なる方法で転送する方が良いという考えが浮かびました(たとえば、NavalnyとSobchak)。 そして最後に、Webデモにさまざまなレベルの匿名化を追加することができました。使用する匿名化要素を選択できるようになりました。



















これは、単なるバイラルマスクではなく、有用で珍しいユーザーケースであるという態度でオフラインの部分に進みました。 チームチャットのメッセージの1つ:







はい、あなたがそれについて考えるならば、誰もがそれを必要とします。 多くの人々は、彼らがコンテンツをぶらぶらし、飲み、法律を破り、国家が彼らを気にかけないと考えているので、彼らはまだそれを認識していませんでした。

そして5年後、AIは来て、古い投稿を見て、事実の後、用語ははんだ付けされます。


ハッカソンで



オフラインの部分は金曜日に始まりました。 各チームには別々のテーブルが割り当てられ、ビュッフェは無限でした 高速炭水化物 クッキー。 公式のオープニングの後、私たちは時間を無駄にせず、すぐに審査員から参加者に何を望んでいるかを知ることにしました。 数人のオーガナイザーと非公式に話し合ったところ、彼らの匿名性は彼らを捕らえないと感じました。 しかし、私は写真の個々の部分のセグメンテーションとその変更に関するアイデアが好きでした。 また、PicsArtで実装できるものを私たちから求めていることが明らかになりました。 それにもかかわらず、夕方に私たちのチームはプロジェクトの説明を送信しました。これは匿名化について話しましたが、写真の個々の部分のセグメンテーションと編集に重点を置いています。







金曜日の夕方の審査員のプロジェクトの説明:







写真を簡単かつ自動的に処理して匿名化できるサービスを提供しています。 このサービスでは、衣服、アクセサリー、頭髪、背景の要素を分割することで、手動で選択することなく、各オブジェクトを個別に処理できます。 このサービスでは、顔の表情や表情を維持しながら顔を変えることもできます。

ハッカソン形式によると、技術委員会でよく表明したチームは防御することが許可されます。 委員会は、審査員およびPicsArt技術チームとのライブコミュニケーション、および彼の作品のデモを行いました。













土曜日の最初の委員会では、匿名化を審査員に販売することはできませんでしたが、写真の個々のオブジェクトを編集するアイデアが気に入っていることがわかりました。 また、ju審員は、髪をクリックすることで、取り外し可能な髪型のアイデアを非常に熱心に受け入れました(現在、似たようなことをしようとしていることがわかりました)。







私たちのチームは(残念ながら)このプレッシャーに抵抗することができず、製品のビジョンを変えることに同意しました。 服の質の変化に焦点を合わせることが決定されました。







メイン画面のデモでは、元の写真のいくつかのオプションを表示する予定でした(理想的には、画面をタップすることで衣服が変わります)。







アウターウェア:









パンツ:









靴:









髪のある基本バージョンでは、変換を「balげない--げない」にすることが決定されました。 このため、bげ頭およびその他のすべてはCelebAセレブデータセットから選択されました。 これらの2つのグループでは、 CycleGANを勉強するように設定されており、ドメインAの写真をドメインBに、またはその逆に変換できます(別の例は馬をシマウマに変えます)。







PicsArtの開発者の1人と知り合い、彼らの内部のキッチンについて少し学ぶことができました。 彼は私たちの髪の実験の成功を本当に信じていませんでしたが、見る方向にリンクを投げました。 残念なことに、ニューロンは実際に髪を追加、削減する方法を学びませんでした。 しかし、彼女は肌の色調を変えることを学びました(理由を推測します)。













製品のビジョンは、これらの委員会との各コミュニケーション後に変化しました。 計画には、空の改善と個々のオブジェクト(当初は衣服のみ)のスタイル(建物、車、公共のアクセサリー)の変更が含まれていました。 焦点は匿名化からますます高まっています。 最終プレゼンテーションでは、次の4つのスライドの構造に従うことにしました。







  1. 服のセグメンテーション。 写真:元の写真、分割された衣服、衣服を処理するための4つのオプション。
  2. シーンのセグメンテーション。 露出オーバーの薄暗い写真。 空は芸術的で、建物は漫画的です。
  3. 顔の交換と髪の変化。 それから何が始まります。
  4. すべて一緒に。 これが3回のクリックで行われることを示すスライド。


しかし、プレゼンテーションは不要であることがわかりました。 土曜日の夕方までに、全員に、プレゼンテーションなしで3分間のパフォーマンスを守るべきだと言われました。 ステージから、デモをリアルタイムで表示する必要があります。 オーガナイザーは、美しいプレゼンテーションではなく、実用的なテクノロジーを見たいと思っています。 動作しないデモを使用するチームが優勝した他のハッカソンと比較して、このコンセプトが気に入りました。 唯一の問題は、その時点で私たちのモデルの束が個別に非常に長い間発売されたことでした。 ステージを披露するには、最適化が必要でした。







開発中、技術委員会のメンターが会場を歩き回り、進捗状況を確認しました。 メンターの一人との別の会話の後、私たちは、彼の意見では、服を着替えることに一つのことに集中する方が良いというフィードバックを受け取りました。 PicsArtは、結果が現実的でユーザーに表示されることを望んでいます。 実際、メンターと審査員は、理想的なプロジェクトが彼らにとってどうあるべきかについて異なる視点を持っていました。







そのときのチームチャットからのいくつかのメッセージ
彼らはハッカソンのサイトにウイルス効果を持っているか、彼らは深刻な編集者です



Ble、ハッカソンではなく、堅実:「ここに新しいinfaがあります。私たちが持っているすべてをやり直してください」


CycleGANで髪の毛が変わっていないので、別のアプローチを試してみることにしました。 最初に髪をセグメント化してから、その上に修復を適用します。 修復タスクは、周囲のコンテキストから画像の隠された部分を復元することです。 私たちの計画によれば、私たちは髪を隠し、ニューラルネットワークはそれを復元しようとします。 しかし、ネットワークはこの人物の髪の毛の種類を認識しなかったため、別の髪型を復元します。 問題は、人々の顔で訓練されたモデルでさえ、髪を正常に復元できないことです(髪の一部だけをペイントする場合、機能します)。













主な困難は、多種多様なヘアスタイルです。 ハゲの人々だけに修復を訓練するという考えがありました、そして、モデルはおそらく髪の不足のためにどんな髪型でも変えることを学ぶでしょう。 このリポジトリからニューラルネットワークの実装を取得しました。







デモはシーンからリアルタイムで表示する必要があるため、パイプラインの速度を最適化する必要がありました。 速度の最大の増加は、アプリケーションの全期間にわたってすべてのニューラルネットワークをメモリに転送することによってもたらされました。 いくつかの困難がありました:Dockerですべてを実行し始めましたが、途中で得点し、数回テンソルフローバージョンで苦痛に陥りました。 実際、1日にgithubから1ダースのリポジトリを起動しようとすると、そのような状況に陥ることは難しくありません。各リポジトリは異なるバージョンのテンソルフローを使用し、1つの場所で目的のバージョンに更新します。 Dockerはそのような状況では良い友達になりますが、ハッカソンでは、新しいイメージを作成するのではなく、毎分新しい仮説をテストしたいと考えています。 それでも、そのような誘惑に負けて、コードのデバッグにさらに時間を費やし、必要な場所にあるライブラリのバージョンを把握しようとするリスクがあります。







最終日



日曜日の朝、私たちは製品の最終ビジョンを決定しました(もう時間はあります)。空を改善する可能性のある衣服を着替えます。 できる限り仕事を絞りたいと思っていましたが、着替えるだけでは小さすぎるように思えました。 これが、Webアプリケーションの「デザイン」の外観です。













当初、彼らは電話から見やすくするために適応設計を追加したいと考えていました。 しかし、時間がなくなり、私たちの設計はnp.vstack(imgs_list)になりました。







最終的なパフォーマンスの前に、私は衣服を備えた機能を完成状態にしたかったのです。 衣服と背景のアルファブレンディングが追加されました-シャープな移行が消えました。 最もリアルなテクスチャ-ジーンズとワニ皮のみを残しました。 ショーの数時間前、私は何とか空のセグメンテーションを開始し、 このリポジトリからスタイルをそこに転送しました。 空を終末論的で有毒な漫画風に変えるオプションがありました。 しかし、冬の空はコンテストの最も適切なトピックになりました-その適用は空の「改善者」の効果を与えました。













すべてのコンポーネントが単一の全体に接続して獲得するまでの時間はほとんどありませんでした。 ソーシャルネットワークから多くの写真をダウンロードし、最も成功したケース(落書き)を選択するためのアプリケーションを起動する予定です。 しかし、チームが最初であることが判明したので、すべてが可能な限り正直でした-彼らはランダムな写真でデモを見せました。













ステージで話すアーサーは私たちのアイデアを明らかにすることができ、イリヤはプロジェクターで私たちのMVPを示しました-すべての写真で服が変わり、空が改善しました。













別の写真






















































すべての参加者がタスクに対応できたわけではありません-デモのみを表示します。 いくつかの美しいスライドを追加する誘惑は素晴らしかった。 私たちが防衛に関して最も気に入った解決策-ビデオを漫画に変換し、2枚の写真を1枚に合成します。







結果



その結果、インサイダー情報によると、私たちのチームはマニから一歩離れて6位になりました。







事後、私たちは共通の意見になりました(トップ5チームのうち3チームが不当に賞品を受け取ったという事実に加えて)。それは、永続化して、匿名化の最初のアイデアを断固として完成させる必要があるということです。 今でも、それが適切であり、多くのユーザーに価値をもたらすと確信しています。 週末中に匿名化でアイデアを開発することに取り組んだので、少なくとももっと楽しくなるでしょう。







あなたがハッカソンに参加したことがない場合は、自分自身とあなたのチームの優れたテスト、あなたが時間がなかった何かを実現するチャンスを試してください。 そしてもちろん、プロセスからの最大のカフェインはハードコアで燃やすことによってのみ得られるので、あなたが好きなことをしてください。







プロジェクトの現状



私たちのチームは、最終デモのコードをGitHubに投稿しました。 また、 匿名化を行う別のリポジトリもあります。 将来的には、匿名化を使用して初期バージョンを開発する計画があります:PyTorchですべてを書き換え、より高解像度でノイズの少ない写真(片面のみの写真)でトレーニングし、電報でボットを上げます。







ハッカソンの最初に生まれたバージョンを試してみたい人のために、 電報のボットがデモモードで起動されます( @DbrainDeepAnon



> /unlock dbraindeepanon



> /unlock dbraindeepanon



)。 これは、すべての顔転送トレーニングが行われたDbrainサーバー(感謝)で機能するため、オフになるまで試してください。 このサービスは、内部ラッパーDbrain-wrappaを使用します。これにより、ドッカーコンテナーを簡単にラップし、電報ボットを起動できます。 間もなくwrappaはオープンソースで利用可能になります。







私たちの仕事は無駄ではなかったことに注意したいと思います。 DeepAnonのおかげで、データのプライバシーを非常に心配していた1人の「匿名の人」が、ついに自分の人生に関するインスタグラムを作成することができました。 彼はもはや街のカメラがソーシャルネットワークの写真から自分の顔を認識できるようになることを恐れていませんが、友人は彼を認識することができます。 彼のInstagramのすべての人々の顔も匿名化されています。













使用したリポジトリへのリンク:







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また、ファンのために、ネットワークを再トレーニングして、人をODSメンバーの1人に置き換えようとしました。 誰に推測してみてください。 ネットワークの名前はTestesteroNetでした。













別の写真



















All Articles