【検証】スマホタップ音の分類


本件は、[@penta250] (https://qiita.com/penta250)さんにモデル分析など検証の多くの部分についてご協力いただきました。この場をお借りして御礼申し上げます。
##はじめに
スマートフォンを利用したサービスの増加に伴い、スマートフォン上で入力された機密情報の保護は、新しいセキュリティ上の課題として認識されています。中でもタップ音による情報漏洩は、AI音声認識技術の発展により徐々に現実的な問題になってきています※。今回は、近年Kaggleの音声認識タスクでも注目されたPANNsアーキテクチャを用いて、タップ音の分類について検証します。

※以前はジャイロスコープデータとの組み合わせが必要だったが、2019年にはタップ音のみで推測させるモデルの論文が発表[1]

##検証データ
今回検証に使用するデータは、スマホ※の内臓マイクによって取得した「1」と「9」のタップ音です。ここでの「タップ音」とは、タップした際にスマホから鳴る効果音やバイブではなく、指とスマホ画面との衝突によって発生する小さな音になります。メルスペクトログラムで可視化してみると、特徴は細い線として現れます。(※スマホ機種：iPhoneX)

__■ スマホタップ音のメルスペクトログラムの例__
※「１」と「９」のタップ音
![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/892617/3e51a815-9423-b345-a460-4db7e1fe21ec.png)
####参考：Kaggle鳥蛙コンペにおける鳥の鳴き声
Kaggleの音声認識コンペのデータ[2]を同様に可視化すると、特徴の違いが目で見ても分かりやすく、タップ音タスクは通常の音声認識タスクよりも難易度が高いと考えられます。

__■ 鳥の鳴き声のメルスペクトログラムの例__
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/892617/82b47781-f243-462c-f670-766c4028e049.png)

##検証条件
####問題設定
- スマホの内蔵マイクを使用できる悪意のあるアプリを想定し、タップ音により暗証番号などが取得されてしまうリスクについて簡易検証します(参考：[3])。

####データと評価
- 検証データは、鳥の鳴き声[2]とiPhoneのタップ音(内臓マイクで取得)の2種類を用いました。複数の10秒のクリップからモデルごとに設定した秒数をクリップごとにランダムに抽出して1データとします。

|学習データ|位置づけ|内容|件数|評価|
|:---|:---|:---|:---|:---|
|鳥蛙コンペデータ|音声認識可能データ|2種類の鳥|鳥1:830件<br>鳥2:240件|鳥1,鳥2を<br>83件ずつ|
|iPhoneデータ|タップ音|2種類のタップ音|「1」:240件<br>「9」:240件|「1」,「9」 を<br>24件ずつ|

####モデル
- 検証では、CNN、EfficientNet、PANNsモデルの3つを用いました。(深層学習を利用した音声認識モデルについては、[4]などをご参照)

|学習データ|モデル|Period|備考|
|:---|:---|:---:|:---:|
|鳥蛙コンペデータ|CNN, EfficientNet|3秒|音声画像を224x224にリサイズ|
|鳥蛙コンペデータ|PANNs|	5秒|	|
|iPhoneデータ|CNN, EfficientNet|2秒|音声画像を224x224にリサイズ|
|iPhoneデータ|PANNs|	5秒|	|

##検証結果
検証の結果は表1のようになりました。特徴が分かりやすい鳥蛙コンペデータではスコアが、 CNN<EfficientNet<PANNs となり、特にPANNsが良い結果となりました。一方、タップ音では、PANNsはスコアが著しく低下しています。

__■ 表1：検証結果__

|(ROC AUC)|CNN|EfficientNet|PANNs|
|:---|:---|:---:|:---|
|鳥蛙コンペデータ|0.493|0.630|__0.958__|
|iPhoneデータ|0.500|0.625|0.521|

##追加検証の方針
PANNsのスコアがタップ音データで低下してしまったのは、「検証データ」の説明部分でも取り上げた、「タップ音特徴の分かりにくさ」が原因ではないかと考えられます。そこで、「タップ音特徴の分かりにくさ」を解消する前処理を行い、PANNsのスコアが上がるかを確認しました。前処理の方法はいくつか考えられたので、以下に記載します。

__■ 検証案（課題内容についてはタップ画像例参照）__

|No|課題内容|検証案|対応技術|
|:---:|:---|:---|:---|
|1|タップ音以外の環境音のみが鳴っている領域が広く、モデルが環境音を注目してしまう|	①環境音のフィルタリング<br>②タップ音のみを抽出|①ハイパスフィルタ、波形の移動平均|
|2|	タップ音が細く、特徴としてみなされない|	③タップ音の時間軸方向への拡大|③Windowサイズの設定|

![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/892617/52c9363b-fc4b-6275-4549-100b259ba540.png)

##追加検証①：環境音のフィルタリング＋タップ音の時間軸方向への拡大
ここでの方針は、「タップ音特徴自体を太くして、タップ音以外の環境音の影響を少なくすれば、タップ音特徴がモデルにとって分かりやすくなるのでないか」という発想に基づいています。Windowサイズ調整、ハイパスフィルタ、移動平均などを駆使して、タップ音特徴を強調した上で、スコアを確認しました。
検証の結果、スコアの改善は見られたものの、前処理によって情報を落としているからか、鳥蛙コンペデータと比較すると、改善の余地がありそうな結果となりました。

__■ 前処理過程の可視化__

![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/892617/b8c8a6af-ab1d-ff80-1cfe-afb4b4ac128a.png)

__■ 追加検証①の結果__

|(ROC AUC)|PANNs(画像調整前)|PANNs(画像調整後)|
|:---:|:---:|:---:|
|iPhoneデータ|0.521|__0.771__|


##追加検証②：タップ音のみ抽出 
環境音の影響を減少させ、タップ音の情報は保つため、「タップ音のみを抽出する」方針を検証します。今回はタップ音が最も大きい音となる環境でデータを取得したため、大きな音が鳴っている付近のデータを抽出することが可能でした。まとめて可視化してみると、「１」と「９」のタップ音には判別可能な特徴があるように見られます。
検証の結果、スコアは大きく改善し、鳥蛙コンペデータでの判定と同様、高精度な分類が可能であることが示唆されます。

![図5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/892617/679fd107-6721-c8a6-8d8e-53854746ae76.png)

__■ 追加検証結果__
テスト検証では、CNN、PANNsともにスコアが高くなり、抽出の効果が見られた。※（）内は抽出前の結果

|(ROC AUC)|PANNs(画像調整前)|PANNs(画像調整後)|
|:---:|:---:|:---:|
|iPhoneデータ|0.922<br>(0.500)|__0.951__<br>(0.521)|

####参考：PANNsの注目箇所の可視化
PANNsのframewise出力結果により、モデルが注目している箇所を可視化しました。結果を見ると、「９」については、特徴を捉えられているように見えますが、「１」は背景含め判断しているように見えます。また、「９」でも適切に注目できてない例が散見されました。

__■ framewise可視化結果__
![図6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/892617/1b029b7b-da4f-b9a8-63ac-4948b1f1a889.png)
![図7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/892617/37babd16-ab2b-d8f5-6d08-8381d6425dd0.png)

##まとめ
今回は、近年Kaggleの音声認識タスクでも注目されたPANNsアーキテクチャを用いて、タップ音の分類について検証しました。通常の音声認識タスクと比較すると、タップ音の分類は難しいタスクではあるものの、前処理の工夫などにより、分類可能になる可能性が示唆されました。
PANNsに限らず、今後モデルが改善していくにつれ、タップ音のセキュリティ上のリスクは高くなる可能性があります。ただし、現在の技術では環境音の影響を受けやすく、背景音がある程度大きい環境ではセキュリティリスクは低いのではないかというのが検証した印象でした。
また、機種、タップ音、環境音、マイク性能、ノイズキャンセリングなどの影響についての検証は今回行っていないため、より一般的な議論をするにはさらなる検証が必要です。
数年後には、大きなセキュリティリスクとなる可能性も踏まえ、引き続き研究動向には注目していきたいと思います。
改善点やご質問などあれば、コメントいただければ幸いです。

##参考
1.	スマホのタップ音から暗証番号を盗み出す、恐るべき盗聴手法の精度はいかに (勝村 幸博 日経クロステック／日経NETWORK)
https://xtech.nikkei.com/atcl/nxt/column/18/00676/020400071/


2.	音声データ出典
Rainforest Connection Species Audio Detection | Kaggle
https://www.kaggle.com/c/rfcx-species-audio-detection
(DATA ACCESS AND USE: Academic, Research & Non-Commercial Use)

3.	参考研究
Hearing your touch: A new acoustic side channel on smartphones,
Ilia Shumailov and Laurent Simon and Jeff Yan and Ross Anderson, 
https://arxiv.org/abs/1903.11137

4.	【まとめ】ディープラーニングによる環境音の認識 - Qiita (@shinmura0)　　
https://qiita.com/shinmura0/items/6befb83f7cde7b091905