この記事は IPFactory OB Advent Calendar 2023 25日目の記事です。
はじめに
こんにちは、ふたばとです。
つぶグミは言わずと知れたウマスギ物質の一つです。最近値上げしてしまったり内容量が減ったりしまっていますが、それでも1袋 130 円程度で 80 gも入っているのでとても満足できる商品となっています。個人的に弾力も完璧で、味・量・食感・価格などの観点から総合第一位のグミとなっているため、どのグミを買おうかと迷ったらつぶグミを購入するようにしています。一時期、一口で十何粒を食べるオーバードーズにハマっていたのですが、ドン引きされたのでもう辞めました。
つぶグミと双璧をなすウマスギグミに、ポイフルがあります。ポイフルはつぶグミに比べてやや酸味が強く、弾力はやや低いです。このため、つぶグミをオーバードーズすると顎関節症を発症する可能性がありますが、ポイフルでオーバードーズをしても顎を痛めつけない設計になっています。
なんならつぶグミは奥歯を破壊する報告がなされています。
もとより、ポイフルとつぶグミは販売者から異なる全く別物の商品です。 見た目としては正直ポイフルが少し白くコーティングされている印象を抱きますが、それ以外の大きさや形などはほとんど同じように見えます。
みなさん、エーアイを使ってイイ感じにポイフルとつぶグミの分類をしたいと思ったことはありませんか?私はありません。 私は別にないんですが、彼はありました。
なんか見覚えあると思ったら7ヶ月前だった https://t.co/zKhQh1sG8m pic.twitter.com/cp38dz1SQY
— ばにらびいんず(鳥) (@n01e0) 2023年12月25日
今回はポイフルとつぶグミを識別する画像分類器を作成して、つぶグミであると誤認識されてしまう敵対的ポイフルを作成してみようと思います。
データの準備
オープンなグミデータセットなんてあるわけもないので、つぶグミとポイフルを購入してクリスマスイブの夜に一粒一粒写真を撮りました。 「クリスマスイブの夜に何をやってるんだ…?」と思ってしまうと負けです。無心で作業することが重要です。
手持ちの Web カメラの画質がかなり悪かったので iPhone のカメラで撮影しました。HEIC を JPEG に変換することで画像データを用意しています。
木目調のおぼんにグミを乗せて写真を撮りました。背景情報を加味してほしくないので、できるだけシンプルなヤマザキ春のパンまつりで貰えるような白いお皿に乗せて写真を撮ろうとしましたが、光の反射で逆に撮影が難しかったです。
できるだけカメラの高さやグミの位置などは統一して撮影したつもりですが、すべて手動でやっていたため、画像ごとに厳密な撮影条件は異なります。
また、ポイフル → つぶグミの順に撮影したのですが、作業に慣れてくるほど安定した撮影ができるようになってきたため、全体的にポイフルのデータは品質があまり高くないように見えます。Data Augmentation でどうにでもなるでしょと高を括って作業をしてしまっていました。
EDA
撮影して得られたデータをよくよく分析すると衝撃の事実が発覚しました。
ポイフルは一袋 80g 56 粒だった一方で、つぶグミはなんと一袋 80g 58 粒でした。これはつぶグミに軍配が上がったことでしょう。しかしポイフル、なんとハート型のグミが2つも入っていました。これはどちらの方が優れているのかという比較が難しくなってしまいました…。みんな違ってみんないいのです。好きなグミを食べましょう。
グミ分類器の実装
つぶグミとポイフルを分類するエーアイを作っていきます。
Torchvision で提供されている事前学習済みモデルを使うと簡単にグミ分類器が作れるだろうと判断しました。
cross-validation はしません。sklearn の train_test_split で データの 25% をテストデータに回しました。データ数はお世辞にも多くないので、Data Augmentation で誤魔化していきます。
当初は pretrained ResNet-18 でグミ分類器を作ろうとしたのですが、Accuracy 0.5 程度で実はそう簡単にできないということが分かりました。データの量を含む品質が悪いのですが…。
データの品質を上げるための作業時間は取れなかったのでいくつか試行錯誤をしました。 結果的には ResNet から MobileNetV3 にモデルを変更すると少ない epoch 数でも Accuracy 0.9 を超えるモデルを作成することができました。
敵対的ポイフルの脅威
グミ分類器ができました。やったねと言いたいところですが、ここから先が本番です。
つぶグミと誤認識されてしまう敵対的ポイフルを生成していきます。
まずはセキュリティ要素として敵対的ポイフルの脅威を考えたいなと思い、 ChatGPT くんと議論しました。
ふたばと:
ポイフルとつぶグミの違いを教えてください。
ChatGPT:
ポイフル(puyofuru)とつぶグミは、日本のお菓子の種類です。ポイフルは、ジェリー状の食感で、一般的に色とりどりな小さな球状のもので、重なったり結びついたりして楽しい食感を提供します。一方で、つぶグミは、ゼリーの中に果肉や果実のつぶつぶが入ったもので、噛むと本物の果物のような食感が楽しめます。基本的な違いは、ポイフルが球状でジェリーのみ、つぶグミがゼリーに果物のつぶつぶが含まれている点です。
ふたばと:
ポイフルとつぶグミは似ていませんか?
ChatGPT:
はい、ポイフルとつぶグミは似ている点があります。どちらもゼリー状の食品であり、楽しい食感や色とりどりな見た目が特徴です。ただし、違いはポイフルが球状の小さなもので、つぶグミがゼリーに果肉や果実のつぶつぶが含まれていることです。同じジャンルのお菓子ではありますが、微妙な違いがありますね。
ふたばと:
敵対的ポイフルとしてつぶグミであるとなりすます輩が居ると考えられます。敵対的ポイフルの脅威を教えてください。
ChatGPT:
敵対的ポイフルの脅威を考えると、例えば以下のようなアイディアがあります:
- 形状変化能力: 敵対的ポイフルが変幻自在に形状を変え、つぶグミに擬態して混ざり込むことができます。これにより、見た目では区別が難しくなります。
- 口の中での爆発: つぶグミとして摂取された時に、敵対的ポイフルが口の中で爆発的に拡散する能力を持っているとします。これにより、口内に混ざっていたつぶグミを破壊し、口内全体に影響を与えることができます。
- 催眠効果: 敵対的ポイフルがつぶグミとして摂取されると、催眠効果を発動し、食べた者を操ることができる能力を持っています。これにより、ポイフルはつぶグミを通じて敵対的な影響を及ぼすことが可能です。
これらの要素を組み合わせて、敵対的ポイフルがつぶグミに変装して様々な脅威をもたらす概念を作り上げることができます。
ふたばと:
それは恐ろしいですね…。つぶグミになりすますポイフル、俺許せないです…!!!!
ChatGPT:
その感情は理解できますね。ポイフルがつぶグミになりすむというアイディアは、ちょっとした冒険心やユニークな発想から生まれたものかもしれませんが、心配せずに、実際のお菓子は安全で楽しいものであることを覚えておいてください。美味しいつぶグミをお楽しみいただくことができるといいですね。
敵対的ポイフルの生成
閑話休題。
今回はより洗練された攻撃というより、敵対的ポイフルという存在自体を作り上げることが目的なので、White-box Attack で一番有名な FGSM*1 を使って敵対的ポイフルを作ります。
Accuracy と Epsilon の関係を見てみると Epsilon=0.05
より強くしても精度がそこまで落ちていないことがわかります。
これもデータが少ないことが問題な気がしますが、Accuracy 0.5 を下回る時点でランダムな選択より精度が低いことになるのでよいこととしましょう。
敵対的ポイフルの例
生成された敵対的ポイフル(Epsilon=0.05
)を見てみましょう。
Augment 時に正規化しているため撮影時のデータよりもやや暗くなった画像となっています。
これにて、つぶグミであると誤認識される敵対的ポイフルを作ることができました。やったね。 データセット作成に用いたグミはスタッフがおいしくいただきました。
本稿の内容を LT として発表しました。
この記事は IPFactory OB Advent Calendar 2023 25日目の記事です。
現役生のアドカレはこちら。
昨日 24 日目の記事は n01e0 の SECCON 2023 Capsule CTF Writeup でした。
なんとか今年も命のリレーを完走することができました。
来年度もどうぞよろしくお願いいたします。よいお年をお迎えください。