問題内容
- サーバーは画像Xをもっている。Xは参加者に公開されない。
- 640×400のアルファチャンネルを含まないPNG画像をサーバーにPOSTすると,あるアルゴリズムによってXと比較され,認識率(類似度)が返ってくる。アルゴリズムは参加者に公開されない。
- 4時間ごとにStageが進み,アルゴリズムのパラメータが変更される。パラメータは,厳しく判定する方向に変更される。
- 認識率が50%を超える画像をPOSTすると,Attack Flag 1を取得できる。
- 認識率が60%を超える画像をPOSTすると,Attack Flag 2を取得できる。
- 認識率が70%を超える画像をPOSTすると,Attack Flag 3を取得できる。
- 認識率が45%を超える画像のうち,最も認識率が高い画像をPOSTしたチームに対し,Defence Pointが付与される。
- アルゴリズムを推測し,認識率の高い画像をPOSTせよ。
Stage1
私は前年大会に出たわけではなかったが,事前の情報収集でSECCON 2018 国際決勝 Writeup - こんとろーるしーこんとろーるぶいを読んでいたので,前年大会でも似た問題が出されていることを知っていた。
そこで,上の記事を参考に(40,40,40)の単色画像を投げてみたところ,最高認識率89.85%を記録した。
その後,手動でいろいろ試したが,何をやっても逆に認識率が低下する結果となり,単色画像が一番良いという結論に至った。
Stage2
単色画像の認識率が低下したので,手動でいろいろ試すのを再開した。最高認識率は以下の画像で50.525%。
Stage3
Stage1,2でいろいろ試した知見を元に,画像をある程度の大きさのマスに分け,あるマスに色を付けてみて,認識率が上昇したら色を付けたままにし,下降したら色を取り消すという方針を立て,自動化した。しかし,競技終了までに認識率45%には届かず。最高認識率は以下の画像で21.275%。
その他
- ptr-yudai氏は,この問題は前年大会の使い回しであると指摘している。ただし,上でリンクした記事とこの記事を読み比べれば分かるように,全く同じというわけではない。