Upgrade to Pro — share decks privately, control downloads, hide ads and more …

「Deep Fake Detection Challenge」が辛かったお話

shimacos
April 14, 2020

「Deep Fake Detection Challenge」が辛かったお話

社内の輪講で発表した資料です。
Kaggleで開催されたDeep Fake Detection Challengeに参加した備忘録的なものです。
過学習に対して真面目に取り組みましたが、結果は振るいませんでした。。

shimacos

April 14, 2020
Tweet

More Decks by shimacos

Other Decks in Science

Transcript

  1. Mobility Technologies Co., Ltd. 「Deep Fake Detection Challenge」 が⾟かったお話 2020/04/14

    AIシステム部 データサイエンスG 島越 直⼈
  2. Mobility Technologies Co., Ltd. n 名前 n 島越 直⼈ (シマコシ

    ナオト) n Twitter n @nt_4o54 n 経歴 n 奈良県⽣まれ n Kyoto Univ. 機械系⼤学院卒 n 2019/04 ~ 2020/03 DeNA n 2020/04 ~ DeNAよりMobility Technologiesに出向 n Kaggle n @shimacos (⾦ 1, ソロ銀 2) n Kaggle Master n ドメイン問わず参加 n 銅メダル。。お前はもういいよ。。 ⾃⼰紹介 2
  3. Mobility Technologies Co., Ltd. 概要 3 01

  4. Mobility Technologies Co., Ltd. n Kaggle上で⾏われたFace swapとVoice swapを検知するCompetition n 独⾃データセット

    n Fake or Realのbinary classification n 評価指標はLogloss n Face swapとVoice swapの⼿法は⾮公開 n 動画総数 約120,000 (470GB) n 総賞⾦$1,000,000 (!) n 動画というやりにくいタスクに2,281 Teamが参加 n Code Competition n 4000videoに対してKaggle Notebook上で9hour n Uploadできるデータセットは合計1GB未満 n 2020/04/14現在 Privateはまだ計算中 Deep Fake Detection Challengeについて 4
  5. Mobility Technologies Co., Ltd. データの特徴 5 02

  6. Mobility Technologies Co., Ltd. n 全てhttps://www.kaggle.com/c/deepfake-detection-challengeのデータを⽤いてます スライド上の画像について 6

  7. Mobility Technologies Co., Ltd. n ただの不均衡ではなく、あるSource Videoに対して複数Fakeが作られるという不均衡 n ⼀つの動画から⽣成される動画の数はRandom 不均衡

    7 Real Fake
  8. Mobility Technologies Co., Ltd. n 同じActorが違う動画で何回も出てくる。Actorについても不均衡。 n ⼀応データはFolder毎に提供され、Folderで分割すれば同じActorが出てくることはほとん どない 不均衡

    8
  9. Mobility Technologies Co., Ltd. データの⼀部のみSwapされているデータが存在 9

  10. Mobility Technologies Co., Ltd. データの⼀部のみSwapされているデータが存在 10

  11. Mobility Technologies Co., Ltd. n 分かりやすいFake ( 画像⼀枚で不整合を起こしている部分がある ) n

    分かりにくいFake (diffを⾒れば分かるが単体画像としては分かりにくい) 分かりやすいFakeと分かりにくいFakeがある 11
  12. Mobility Technologies Co., Ltd. n 両⽅にSwapがかかったりかからなかったり 顔が複数写っている動画 12

  13. Mobility Technologies Co., Ltd. n Face swapが失敗しているが処理はかけているのでFakeとラベルがついていることがある n ラベルノイズ n

    意図的にtrain dataとtest dataの分布が(多分)変わっている。CVとLBがだいぶ乖離。 n https://arxiv.org/pdf/1910.08854.pdf 1. Reduce the FPS of the video to 15. (2/9) 2. Reduce the resolution of the video to 1/4 of its original size. (2/9) 3. Reduce the overall encoding quality. (2/9) 4. Original (1/3) 5. Real : Fake = 1 : 1 n Privateは更に以下のような記述 (shake要因得る) その他 13
  14. Mobility Technologies Co., Ltd. コンペ中の進め⽅ 14 03

  15. Mobility Technologies Co., Ltd. n Voice swapは相当少なそうで無視している⼈が多かった。 n ⾃分もmel spectrogram

    -> CNN で少しVoice swap特化モデルを作成したが、訓練lossも 0.4くらいで全然下がらなかったので諦めた。 n データセットが1GB未満という制約のため、Ensemble祭りはできない 基本パイプライン 15 図はhttps://www.kaggle.com/c/deepfake- detection-challenge/discussion/140829から拝借
  16. Mobility Technologies Co., Ltd. n 動画の読み込み -> 何frame読み込めるかに直結 n Nvidia

    Dali n 速いがKernel上で動かず断念 n ffmpeg n 速度は分からないが、⼀度DiskにI/Oしなければいけないため除外 n cv2.VideoCapture n 遅いけど仕⽅なくこれを使うことに n Face Detector -> Face Cropの精度に直結 n MTCNN n 速いが精度が気になる(training setでも結構Errorを吐く) n Blaze Face n MTCNNより速いが、精度はもっと悪い n S3FD n Inputの画質を半分にしてもMTCNNより精度が良く、要件も満たせそう。これを採⽤。 推論条件を満たすように⾊々調査 16
  17. Mobility Technologies Co., Ltd. n Folderで⼤体Actorが分かれているという話があったので、同⼀Folder内の動画は同じFoldに⼊ るように n Fakeの数も動画によって変わるので、Fold毎になるべく同じFake数になるように n

    要するに簡単なStratifiedGroupKFold n K=5とし、Stackingを考えてモデルを10個作っても⼤丈夫そうなペアを考えた。 n SeResNext50とEfficientnet-b3で⾏けそう Validation の作成 17
  18. Mobility Technologies Co., Ltd. n Face detector : S3FD (100frames

    / video) n 100frameからrandom sampling, 推論は30frameのaverage, MultiFaceについてはmax n 過学習めちゃくちゃするので、いつもよりLR⼩さめAdam (この部分めちゃくちゃ敏感だった) n Efficientnet-b3とSeResNext50のアンサンブル n Weighted sampler (Fake : Real = 1 : 5) n Sigmoid -> logit -> s倍 -> sigmoid のpostprocess (sigmoidのゲインを上げることに相当) n Privateでは画質が下がったりするため、⾃信度が低くなりがちになると考えた。 n Public 0.33 (この時点の60thくらい) n めちゃくちゃ過学習するな。。。という感じ n Train loss 0.05, Validation loss 0.11とか 初期モデル 18
  19. Mobility Technologies Co., Ltd. n Face detector : S3FD (100frames

    / video) n 100frameからrandom sampling, 推論は30frameのaverage, MultiFaceについてはmax n 過学習めちゃくちゃするので、いつもよりLR⼩さめAdam (この部分めちゃくちゃ敏感だった) n Efficientnet-b3とSeResNext50のアンサンブル n Weighted sampler (Fake : Real = 1 : 5) n Sigmoid -> logit -> s倍 -> sigmoid のpostprocess (sigmoidのゲインを上げることに相当) n Privateでは画質が下がったりするため、⾃信度が低くなりがちになると考えた。 n Public 0.33 (この時点の60thくらい) n めちゃくちゃ過学習するな。。。という感じ n Train loss 0.05, Validation loss 0.11とか 初期モデル 19 銀圏くらいなら余裕じゃね??
  20. Mobility Technologies Co., Ltd. n 過学習の例 n Frameのindexに起因する過学習 n Fakeを奇数frame⽬、Realを偶数frame⽬などとするとFake部分ではなく、顔の傾きな

    どで学習してしまう。 n Actorに起因する過学習 n RandomにWeighted Samplingすると、Actor AをFakeとして多くSampling、BをRealと して多くSamplingなどの問題が発⽣してしまう (かもしれない)。 n Aの顔が来たらFake, Bの顔が来たらRealみたいになる n 訓練データの分布に起因する過学習 n Testデータは画質が落ちていたり、FakeとRealの分布が1 : 1だったりするので、 Validation Setもその分布に合わせなければいけない n Face Swapの元になっている顔画像に起因する過学習 n Preview Datasetの論⽂によれば、恐らくCross Swap n Training dataに存在するActorの顔同⼠で属性が似ているもの同⼠の顔をSwapする (Test については別) n 多分Test Set内には同じActorが存在しない? (ValidationをActor uniqueにする?) 過学習について真⾯⽬に考え始めた (このコンペのポイント) 20
  21. Mobility Technologies Co., Ltd. n Validation Metricの調整 n FakeとRealのサンプル数に合わせて重み付け。 n

    最初はReal VideoからランダムにペアのFake Videoを⼀つサンプリングしていたが、なるべ く多くのFakeパターンが認識できているか確認したかったのでこの形に n Testと同じAugmentationをかける (TrainのAugmentationにも追加) n 2/9 にJpegCompression (Encodingクオリティを下げることに相当) n 2/9 にDownscale n MiniBatchのSampling⽅法変更 n 同じMiniBatch内に必ずReal VideoとペアのFake Videoが存在するように n Fake Videoはepoch毎にペアの中からRandom Sampling n RealとFakeのFrameのindexも同じに n 同じindexはその動画の全てのindexを使い切るまで使わない(1 ~ 8 あるFrameの中で 1epoch⽬で1, 3, 4, 7使ったとしたら、次は2, 5, 6, 8から選ぶということ) n 各epochでそれぞれのVideoからサンプルするFrame数を1にする。 n 20とか選んでしまうとそのペアにLossが強くかかってしまう。 過学習を防ぐためにやったこと 21
  22. Mobility Technologies Co., Ltd. n なんでペアで⼊れた? n ペアで同じFrame indexでモデルに⼊⼒すると、肌の⾊とか顔の向きとかFakeとは関係のな い情報ではなく、diffに起因した特徴を学習してくれる気がしませんか?

    Sampling Methodについて 22 これが正しいと思ってずっとやっていたが Publicで全くスコアが出ない
  23. Mobility Technologies Co., Ltd. n StackingでLightGBMをかませて調整した n 単純に30 frameの平均だと⾃信度が低くなりがち n

    CNN-LSTM(GRU)とかCNN-Transformerとかめちゃくちゃ効きそう n 試したけど過学習が酷く、使えなかった。(Validationの時点で酷い) n ここの原因がいまだに分からない。何故Workしなかったのか n CNNをtrainした後freezeして学習でもダメ Fakeが動画⼀部分しか存在しないものに対しての対処 23
  24. Mobility Technologies Co., Ltd. 常に出⼒の分布はモニタリング 24 n 下⼆つはほぼ同じのlog lossだが左のモデルの⽅が良さそう

  25. Mobility Technologies Co., Ltd. n 分かりやすいFakeと分かりにくいFakeでLossに重みをつけたかったのでdiff情報を元にした Segmentation Maskを作成し、UNetモデルを作成 その他試したこと (Not

    worked in validation) 25 n Diffが少ないsingle frame画像はノイズになるので、 それをSegmentation Maskを同時に学習させるこ とで軽減できないか n 学習が重いし、そこまでValidationの差がなく1GB の制限もあるのでやめた n Remove Hard Example n Large Batch Training n TPU training n 動いたけど、Lossが下がらない問題に直⾯し早々 に断念 n Focal Loss, Weighted BCE Loss n Triplet Loss n Label Smoothing
  26. Mobility Technologies Co., Ltd. n Preprocessing n S3FDを使うため画質を半分に落としていたところをTest dataで既に画質が半分になってい るものはResizeしない。

    n 顔が最初から写っていないものに関しての対処として、初めて顔が写った時から等間隔あけ て30 frameを抽出 n そもそも顔が写っていないものなどErrorを吐いたものには0.5を出⼒ n 複数の顔が写っているときは上⼿く座標からTrackingするように n 閾値より⼩さかったり⼤きすぎるcropは顔ではないとして弾く n 前述のValidationとSampling Methodを取り⼊れたSeResNext50とEfficientnet-b3のStacking n 30 frames n Validation loss 0.16, Public 0.33 n CVとLBの乖離は改善されたが、初期モデルと性能変わらず。。⾟い。。 n Label noiseが多く、pairで⼊⼒することによる正則化が強く働きすぎた? n 前述したとおり、Privateは更に分布が変わるのでshakeに期待するしかない 最終的なモデル (Public 125th ) 26
  27. Mobility Technologies Co., Ltd. n データセット作成は⾃⼒ n Face cropするだけで1⽇溶ける n

    同じ顔をtracking (face align)するようにとか、 顔でないものは弾くなど本番の学習を始める前 に考えることが多い。ミスったらまた作り直し で1⽇かかる。 n 最初の1 frameだけ抜き出しとかだとすごく過学 習する。 n CVとLBの乖離 n CVとLBを近づけるために頑張るか、CVを下げ ることを頑張るか n しかも⼀⽇2sub n 7hour推論を回した後のSubmission Error n 気をつけないとDataLoaderがLeakしていたりし て、すぐMemory Errorになる n testの分布が異なるため、想定外のデータに対す る対処をミスると死ぬ ⾟かったこと 27
  28. Mobility Technologies Co., Ltd. Public LBの上位解法 28 04

  29. Mobility Technologies Co., Ltd. n Face Detector : RetinaFace n

    Unet Architecture n Tuned by LB n RAdam + ReduceLROnPlateau & Tune Learning Rate n Use different frames of each video every epoch n Hard Augmentations & Large Model(efficientnet-b5) (0.3 -> 0.27 boost) n shift, scale, rotate, rgbshift, brightness, contrast, hue, saturation, value, noise and blur n JpegCompression and Downscale n Increase Face Margin (0.27 -> 0.214 boost) n 7 efficientnet-b4 and 3 efficientnet-b5 with different seeds and did simple average by 30 frames Public 2nd Place Solution 29 Face Marginを⼤きく取るというところの差分が⼤きい 恐らく顔周辺にミスでSwapしてしているということがあるのでその分Robustになるのか? Augmentation後の情報も上⼿く学習させるにはMarginが必要なのかも(ScaleやRotate, Shift) Modelが⼩さかったのもAugmentationが上⼿くいかなかった要因かも
  30. Mobility Technologies Co., Ltd. n Face Detector : MTCNN n

    Self-Attention based Model n Backbone: efficientnet-b4 n Imagenet pretrained & first 4 blocks freeze n 2x extra margin n Actor Clustering & cluser based split Kfold n 2 model ensemble n Label smoothing n TTA n Different margin, Different y-axis offset and Horizontal Flip Public 7th Place Solution 30 Transformer Likeで成功していてすごい 最初の4Blockをfreezeしてることで上⼿く正則化されているのか? やはりExtra Marginの部分の差分が⼤きい気がする
  31. Mobility Technologies Co., Ltd. Public 14th Place Solution 31 やっぱりFace

    Margin ⼤きめ。。 n BlazeFaceだと精度が悪いところをMTCNNで補完 n Median Prediction n Face Margin : (widthscale, heightscale) = (1.67, 1.43)
  32. Mobility Technologies Co., Ltd. n Marginのことは頭をよぎりはしたが、Face cropまで⼿戻りする余裕がなかった n 1⽇かかることと、subが1⽇2回しかできないという制限からなかなか踏ん切りがつかな かった

    n 0.3切ってて公開されてるSolutionは⼤体Margin取ってる n Sampling Methodを変えてからPublicがなかなか改善しない沼にハマっていたが、そこに問題が あるとは考えれなかった。 n 実際問題あるのかは分からないが、初期モデルの⽅がいいので⼿戻りするべきだった。 n 5-foldモデルを作成してからPublicで性能を実験していたが、時間がかかりすぎるのでとりあえ ず1-foldで実験を回す⼯夫をした⽅が良かった。 n StackingならAudio情報もうまいこと取り込めそうと思い、初期のStacking脳から離れられな かった。 n その結果modelを⼩さくする⽻⽬になり、Augmentation情報を上⼿く学習できなかった可 能性がある 反省ポイント 32
  33. Mobility Technologies Co., Ltd. まとめ 33 Face Margin は⼤きく取ろう