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

音信号の電子透かし

nagiss
June 20, 2024

 音信号の電子透かし

2024/5/30のDeNA/Go AI技術共有会の発表資料です。

nagiss

June 20, 2024
Tweet

More Decks by nagiss

Other Decks in Technology

Transcript

  1. AI 4 ▪ 聞き手が知覚できないように音信号に情報を埋め込む技術 ▪ 評価軸 ▪ 変化が知覚できないほど良い ▪ 除去しづらいほど良い

    ▪ (波形を変形した後でも) 検出精度が高いほど良い ▪ など (色々あるし場合による) 音信号の電子透かしとは
  2. AI 5 ▪ 用途 ▪ (歴史的には) 音コンテンツの著作権保護 ▪ 劇場向けの音コンテンツを民生用機器で再生できなくする、など ▪

    (最近では) 合成音声の悪用対策 ▪ 真の音声に透かしを入れ、真正性を担保 ▪ 生成音声に透かしを入れ、技術の悪用を検知 ▪ 悪用例: ジョー・バイデンを騙って投票の棄権を呼びかけた自動電話 https://wired.jp/article/biden-robocall-deepfake-elevenlabs/ 音信号の電子透かしとは
  3. AI 6 ▪ OSSを例に、実用的な電子透かしがどういう仕組みで動い ているか紹介する ▪ audiowmark ▪ 信号処理で透かしを生成・検出 ▪

    固定されたコンテンツ向きな感じ ▪ AudioSeal ▪ NNで透かしを生成・検出 ▪ 生成AIには生成AIをぶつけんだよ ▪ 音声向きな感じ この発表の目的 基礎的なところを知るのは玉森先生の音声情報処理n本ノックが良さそう (これも紹介しようと思ったけど時間が足りず)
  4. AI 8 ▪ OSS (論文があるわけではない) ▪ 信号処理で埋め込み・検出をそれぞれ頑張る ▪ 860Hz ~

    4300Hz くらいの帯域を強弱させて埋め込む ▪ 44100Hz/1024*20, 44100Hz/1024*100 ▪ 強弱のパターンで埋め込まれた情報を検出する ▪ 最大128bitの情報を埋め込む ▪ 128bit埋め込む場合、52秒ほどのデータが必要っぽい ▪ それより短く切り出されても検出はできるっぽい audiowmark - 概要 https://github.com/swesterfeld/audiowmark
  5. AI 10 ▪ 入力 ▪ 埋め込む情報 (最大 128bit) ▪ 暗号の鍵

    ▪ これによって埋め込まれ方が変わる ▪ 音信号 ▪ 出力 ▪ 情報が埋め込まれた音信号 audiowmark - 埋め込み - 入出力 図はドキュメントより引用
  6. AI 14 ▪ PyTorch 風に書くと、こう nn.Conv1d( in_channels=1, out_channels=6, kernel_size=16, padding=15,

    bias=False )(x) % 2 ▪ 重みは 0 と 1 のいずれかからなる固定値 (ハードコードされている) ▪ パディングされるので出力は入力より長くなる (128bit -> 143bit) ▪ 143bit * 6 = 858bit が出力 畳み込み符号ってなんだよ
  7. AI 16 ▪ 検出時に位置合わせに使うための 情報を付加する ▪ 255bit相当の固定データが末尾に 追加されると考えて差し支え無さそう ▪ 合わせると1113bit

    audiowmark - 埋め込み - 検出用の情報付加 本当は結構違うことをしている気が するが、まあ実質同じ 図はドキュメントより引用
  8. AI 18 ▪ まず80(帯域) * 2226(フレーム)の 行列を用意する audiowmark - 埋め込み

    - 埋め込み方を決定 1/4 ※心の清らかな人には 80x2226に見える 80 2226 図はドキュメントより引用
  9. AI 19 ▪ 各フレームに+と−を30個ずつ割り当てる ▪ 鍵をシード値にしてランダムに割り当て audiowmark - 埋め込み -

    埋め込み方を決定 2/4 80 ※心の清らかな人には 30個ずつに見える 2226 図はドキュメントより引用
  10. AI 21 ▪ 立っているビットに対応するフレームの +と−を反転 ▪ これで完成 audiowmark - 埋め込み

    - 埋め込み方を決定 4/4 3 1 0 3 0 2 2 1 図はドキュメントより引用
  11. AI 23 audiowmark - 埋め込み - 埋め込む - ざっくり ▪

    ざっくりとした説明 ▪ さっきの行列の、 +の部分の振幅をちょっと大きく −の部分の振幅をちょっと小さくする 図はドキュメントより引用
  12. AI 24 1. 音信号(44.1kHz) を1024サンプル(23ms) ごとに区切ってフレームにする 2. 連続した2226フレーム(52秒) を取り出す ▪

    音信号がこれより長ければ複数種類を繰り返し埋め込む 3. ハン窓かけてFFT(0Hzから22kHzまで513帯域に分割される) 4. 860Hzから4300Hzまで80帯域を取り出す 5. さっきの行列と要素毎の積を計算する 6. 逆FFTして繋げて1つの波形に戻す ▪ 取り出されなかった部分は0 ▪ 分析した時の窓よりも広い窓で戻す小技が使われている?謎 7. 振幅を0.01倍(-40dB) くらいにする 8. 元の音信号に重ねる ▪ クリッピングしそうな部分はいい感じに音量を調整する audiowmark - 埋め込み - 埋め込む - 詳しく (わかりやすくするのを諦めた) 図はドキュメントより引用
  13. AI 25 1. 情報を暗号化する 2. 情報を冗長化(誤り訂正符号化)する 3. 検出用の情報を付加する 4. 埋め込み方を決める

    5. 埋め込む できた! で、どうやって埋め込まれた情報を 取り出すの? audiowmark - 埋め込み 図はドキュメントより引用
  14. AI 27 ▪ 入力 ▪ 情報が埋め込まれた(であろう)音信号 ▪ 埋め込みに使った暗号の鍵 ▪ これがないと検出できない

    ▪ 出力 ▪ 埋め込まれた情報 ▪ 検出された位置、信頼度など audiowmark - 検出 - 入出力 図はドキュメントより引用
  15. AI 35 ▪ どちらがそれっぽいかを検出する ▪ 以下のことを考えていい感じにやる ▪ +の部分はその周辺よりも音量が大きい可能性が高い ▪ −の部分はその周辺よりも音量が小さい可能性が高い

    ▪ 0/1の確率が出力される ▪ 858bit埋め込んだので858個それぞれの確率 audiowmark - 検出 - ビット読み出し 2/2 図はドキュメントより引用
  16. AI 37 ▪ 858bit((128+15)*6bit) それぞれの確率が得られて いるが、元は128bitの情報 ▪ 最尤推定によって元の情報を復元する ▪ ビタビアルゴリズムとか使うらしい

    ▪ 生成モデル(原義)という感じ ▪ 元の情報が得られた! audiowmark - 検出 - 復号 図はドキュメントより引用
  17. AI 41 ▪ 論文 ▪ San Roman et al. “Proactive

    Detection of Voice Cloning with Localized Watermarking,” ICML, 2024 ▪ Meta から 今年の1月に出たもの ▪ 推論コードは公開されているが学習コードは準備中とのこと ▪ 声に特化 ▪ 合成音声の悪用を意識している ▪ GeneratorとDetectorを学習 ▪ Generator: 音声を入力して透かしを出力するNN ▪ Detector: 音声を入力して透かしの有無と埋め込まれた情報を出力するNN ▪ Detectorの出力はサンプル(1/16000秒)ごと ▪ 局所的な音声の改変を検知できるようにしている ▪ 16bitの情報を埋め込む AudioSeal - 概要
  18. AI 42 ▪ 論文中の図の通り ▪ 注: GeneratorとDetectorの関係はGANではない ▪ 2つの部品からなる1つのネットワークをマルチタスク学習するようなもの ▪

    なおDiscriminatorは別で存在する(Perceptual Lossesに敵対的lossが含まれている) AudioSeal - 学習の全体像 1/4 図は San Roman et al. “Proactive Detection of Voice Cloning with Localized Watermarking,” ICML, 2024 より引用
  19. AI 43 ▪ Generator ▪ 透かしを出力する ▪ 入力音声と足し合わせて「透かし入り音声」になる ▪ 図では足し合わせる部分が省略されている

    AudioSeal - 学習の全体像 2/4 図は San Roman et al. “Proactive Detection of Voice Cloning with Localized Watermarking,” ICML, 2024 より引用
  20. AI ▪ Mask ▪ 部分的に元の音声に戻したり0埋めしたり別の音声に置換したり ▪ → 透かしが消える ▪ Augment

    ▪ フィルタをかけたりノイズを重ねたりmp3圧縮したり (かなり多様・検出精度の低い種類が頻度高く選ばれる) ▪ → 透かしは存在したまま (Detectorで検知できなければならない) 44 AudioSeal - 学習の全体像 3/4 ✨ここが面白い部分✨ 図は San Roman et al. “Proactive Detection of Voice Cloning with Localized Watermarking,” ICML, 2024 より引用
  21. AI 45 ▪ Detector ▪ 音声に透かしが埋め込まれたかサンプル単位で判定する AudioSeal - 学習の全体像 4/4

    図は San Roman et al. “Proactive Detection of Voice Cloning with Localized Watermarking,” ICML, 2024 より引用
  22. AI ▪ アーキテクチャ ▪ EnCodecの構造をベースにしたもの 46 AudioSeal - Generator -

    アーキテクチャ 図は San Roman et al. “Proactive Detection of Voice Cloning with Localized Watermarking,” ICML, 2024 より引用
  23. AI 49 ▪ 余談: 波形レベルで音声を扱うのは今でもConv/LSTM/GANがち ▪ もちろんタスクによる ▪ 大域的な関係性を扱う必要が無いことが多い →

    Transformerに対して Conv/LSTMが有力 ▪ 生成波形の多様性が不要な場合が多い → Diffusionに対してGANが有力 * EnCodecってなんだよ? 3/3 * Shibuya, et al. “BigVSAN: Enhancing GAN-based Neural Vocoders with Slicing Adversarial Network,” ICASSP, 2024. のイントロに書いてあった
  24. AI ▪ アーキテクチャ ▪ EnCodecの構造をベースにしたもの ▪ 量子化の代わりに情報の埋め込みがある ▪ 2 x

    channels の embedding層がメッセージのbit数(16)個ある感じ 50 AudioSeal - Generator - アーキテクチャ 図は San Roman et al. “Proactive Detection of Voice Cloning with Localized Watermarking,” ICML, 2024 より引用
  25. AI 51 ▪ Encoderはさっきと同じ、その後雑に元の解像度に戻した感じ ▪ 出力チャンネル数は 1 + bit数 ▪

    1は透かしの有無の判定 AudioSeal - Detector - アーキテクチャ 図は San Roman et al. “Proactive Detection of Voice Cloning with Localized Watermarking,” ICML, 2024 より引用
  26. AI 52 AudioSeal - loss ▪ 2種類のloss ▪ Perceptual losses

    ▪ 透かしの有無で聴覚上の差が小さくなるようにする ▪ EnCodecと同じもの + TF-Loudness ▪ Detection loss ▪ 各時刻に透かしがあるか/埋め込まれたメッセージは何か正しく判定できるようにする ▪ 普通にバイナリクロスエントロピー 図は San Roman et al. “Proactive Detection of Voice Cloning with Localized Watermarking,” ICML, 2024 より引用
  27. AI 53 AudioSeal - loss - EnCodecと同じものってなんだよ ▪ 2種類のloss ▪

    Perceptual losses ▪ 透かしの有無で聴覚上の差が小さくなるようにする ▪ EnCodecと同じもの + TF-Loudness ▪ Detection loss ▪ 各時刻に透かしがあるか/埋め込まれたメッセージは何か正しく判定できるようにする ▪ 普通にバイナリクロスエントロピー 波形の L1 loss メルスペクトログラムの L1 loss, L2 loss GAN の Hinge loss EnCodecと一緒ならFeature matching lossも あるはずだが……? :thinking_face: 図は Défossez, et al. “High Fidelity Neural Audio Compression,” arXiv preprint arXiv:2210.13438, 2022. より引用
  28. AI 54 AudioSeal - loss - TF-Loudnessってなんだよ ▪ ▪ Perceptual

    losses ▪ 透かしの有無で聴覚上の差が小さくなるようにする ▪ EnCodecと同じもの + TF-Loudness ▪ Detection loss ▪ 各時刻に透かしがあるか/埋め込まれたメッセージは何か正しく判定できるようにする ▪ 普通にバイナリクロスエントロピー 透かしを帯域毎に分けて、 窓関数で時間毎に切り出した信号の b帯域目・w時刻目 入力信号に対して 同じ処理をしたもの ラウドネス関数 人間は高域の方が音を知覚しやすいので それを反映させた音量を計算している 出力される値の単位はたぶんdB lossの重み付け 透かしが入力信号と比べて大きい時刻/帯域に 大きいペナルティを与えるようにしている time-frequency ▪ 音量の大きい時刻/周波数に透かしが仕込まれるようにする
  29. AI 55 AudioSeal - loss - Generatorまで逆伝播するDetection loss ▪ ▪

    Perceptual losses ▪ 透かしの有無で聴覚上の差が小さくなるようにする ▪ EnCodecと同じもの + TF-Loudness ▪ Detection loss ▪ 各時刻に透かしがあるか/埋め込まれたメッセージは何か正しく判定できるようにする ▪ 普通にバイナリクロスエントロピー ▪ Augmentはなるべく微分可能なように実装されている (無理ならVQ-VAEみたいに勾配をそのまま伝える) ▪ → Generatorも識別しやすい透かしを生成するように学習される 図は San Roman et al. “Proactive Detection of Voice Cloning with Localized Watermarking,” ICML, 2024 より引用
  30. AI 56 ▪ 提案法はハイパスフィルタ以外全部に頑健で、先行研究はハイパス フィルタには頑健らしい ▪ 提案法は低域に情報を忍ばせている ▪ Detectorの重みを公開してしまうと、Detectorの勾配を利用して学習 したNNによる透かし除去攻撃が可能になってしまう

    ▪ 逆に、透かし無しの音声 * や重みなどの情報を隠せば透かし除去が難しいことを実 験結果を元に主張している AudioSeal - 実験結果とか (一部を抜粋) * 合成音声に透かしを入れる前提で、その透かし を入れる前の合成音声という意味 先行研究より性能が良いみたいな部分は省略