Open yoheikikuta opened 4 years ago
久々に adversarial example 系の論文をチェックしてみようかなと思って ICML2019 の論文を眺めてたら見つけたもの。
デジタル処理ではなく実世界での操作で誤認識をさせるものは Adversarial Patch が結構話題になったと思う。 これは確かに面白かったけど、実際に何かに使おうと思ったら制限がパッチを画面に映さないといけないという制限が強いから難しいよなと思っていた。
この論文ではカメラにシールを貼るだけで誤認識させることができる、ということでこれは何かに使おうと思った時に現実的になりうるかなと期待して読んでみることにした。
この論文が主張するところのセールスポイントは以下の3点。
Background and Related Works
はデジタルな攻撃と物理的な攻撃が紹介されているが、これはそんなに知らないことは書いてないなかったので割愛。
どのようにモデルを騙すシールを作るのかという手順の話。 まずは形式的な話から。ある特定のクラスの画像を別の特定のクラスに誤認識させる、という問題設定を考える。
$ π(x) = x + δ $ で $ x $ が元画像で $ δ $ が摂動、f が model で l が loss function としたときに以下のように書ける。
y は真のラベルで、$ y_{\text{targ}} $ は誤認識させたいラベル。$ π ∈ \Pi $ は可能な摂動の集合から一つ具体的な摂動を取っていることを意味している。 ここでは具体的な一つの画像 x を考えているが、達成したいのはあるクラスの画像全てに有効となる "universal" な摂動なので、それを踏まえると次のように書ける。
ここまでが形式的な話で、どのように実現するかを以降では考えていく。
先に述べたように細かい処理は物理的な世界には持ち込めないため、この論文では色付き半透明の丸模様をプリントすることで摂動を作ることにしている。この丸模様はある点を中心にそこから離れると共に元の画像に近づくようなアルファブレンディングをしていくものになっている。
記号が多いのでガッと論文の記述を持ってくる。
loss function はこれらのパラメタで微分可能なので、原理的には勾配法を適用して適切なパラメタを見つけ出せば良いということになっている。
ちなみに図示すると以下のようになっている。記号はやや多かったが難しいところは特にない。複数の色付き半透明丸模様をぼやっとアルファブレンディングしていくことで摂動を作るというものになっている。一つアルファブレンディングしたら次のものをアルファブレンディングして、ということで複数の丸模様を混ぜ込んでいく。
具体例を見せると以下。これは上述のアルファブレンディングをデジタル処理で実現したもので、例えば白色は実際にはプリントできないなどの制限がかかることに注意せねばならない。一部だけ薄くするようなシールは作れないということ(本当にそうなんだっけというのがちと分からん)。 なので、実際には全てのパラメタ空間を実現できるわけではないのでそこに注意して学習をデザインしないといけないことが分かる。
形式的な議論のときは言わなかったが、摂動はできるだけ小さくしたい。そうでなければ元画像から大きく異なるものになるので、例えば攻撃したい時に相手に簡単に気づかれてしまう。
なので loss function を小さくするのと同時に、元画像からできるだけ離れないという要素も取り入れたい。 ここでは SSIM を最大化するということでそれを実現する。
これを constraint として、constraint 有りの状況で使える勾配法である、projected gradient descent (PGD) で最適化していくことになる。アイデアとしては単純で勾配法でアップデートしてから射影して constraint を満たすようにする、というものでここでは詳細は省く。
要素は揃ったが、先に述べたように物理的には実現不可能なパラメタセットがあったり何だりでそのまま学習しても効率が悪い。ここでは様々な heuristics を駆使して探索範囲を狭めている。
全パラメタ空間は広大なので、$ r, α_{max}, β $ を固定してしまうということをする。 ここでは、プリントされる色と観測される色との補正を単純なパラメトライズで求めるとか、 SSIM を最大化するために block coordinate descent (パラメタ毎に gradient descent で最適化していく) とか、色々やっているが、色々な場合で試して適切と思われる値を求めたと言っている。
最終的には以下のようになる。
だいぶ探索空間は狭まったが、色のチョイスを離散化したのでこれは勾配法では最適化できない。 実際のアルゴリズムでは、まずは greedy に丸模様の中心位置と色を決めて、そこから fine-tuning として中心位置を勾配法で調整するというものになっている。
ということで実験。
まずは学習した摂動をデジタル処理で埋め込んでちゃんと誤認識できるかを試しているが、まあそれはできるし細かい調整ができるので誤認識させる率も高い、という話で驚きはないので割愛しておく。
実際の摂動と撮影された画像は以下のようになる。摂動は(そうデザインしたわけだが)だいぶぼやけたものになっていて、撮影画像はなんかちょっと色味が変になっているところがあるな〜と感じるようなレベルになっている。
動画にして 1000 frame での認識結果をまとめたものが以下。上で述べたもの以外の結果もあるが、結構騙せていることが見て取れる。
そのほかにも丸模様の数と誤認識率の関係とか色々述べているが、本質的な内容としてはこれくらいな感じ。
カメラにシール貼るだけでこれくらい誤認識させることができる、というのは結構面白いと思った。デジタル処理と比べると制限がめちゃくちゃ多くて変換画像も見てすぐに分かるレベルでもあるけど、それなりにちゃんと誤認識させることができることが分かった。
一方で実際に何かの目的で使う、というには性能がまだ不十分だし変換画像も見てすぐにわかるレベルなので、すぐに何かに使われるというものではなさそう。
防御方法も含めて、実際のデバイスを考慮した adversarial example の今後の発展が楽しみだ。adversarial example は ICML とかでも結構論文が多いし、自分も好きなトピックなので、ちょこちょこ進展を追っていこう。
著者に確認取りつつ粗い再現実装をしたのがこれ: https://github.com/yoheikikuta/adversarial-camera-stickers
論文リンク
https://arxiv.org/abs/1904.00759
公開日(yyyy/mm/dd)
2019/03/21
概要
色付きの半透明ドットをプリントしたシールをカメラに貼ることで、あるクラスを特定のクラスに誤認識させる adversarial attack を提案。 道路標識をギターピックに誤認識させるリアルタイムのデモ動画も公開されている(なぜか音楽がイケイケである): https://youtu.be/wUVmL33Fx54 カメラと対象物の間の光学的な path 上で操作を加えることで adversarial example を作る、ということを目的として、物理的に実現可能であるという制約条件を考慮して heuristics を用いつつ実際に誤認識させるシールを作ることに成功した。
実際にカメラにシールを貼っている画像と撮影された画像がどう見えるかは以下のようになっている。