Slide 1

Slide 1 text

AI 2024.05.30 nagiss 株式会社ディー・エヌ・エー 音信号の電子透かし Audio watermark

Slide 2

Slide 2 text

AI 2 項目 01|音信号の電子透かしとは 02|OSS: audiowmark 03|OSS: audioseal 04|まとめ・所感

Slide 3

Slide 3 text

AI 3 01 音信号の電子透かしとは

Slide 4

Slide 4 text

AI 4 ▪ 聞き手が知覚できないように音信号に情報を埋め込む技術 ▪ 評価軸 ▪ 変化が知覚できないほど良い ▪ 除去しづらいほど良い ▪ (波形を変形した後でも) 検出精度が高いほど良い ▪ など (色々あるし場合による) 音信号の電子透かしとは

Slide 5

Slide 5 text

AI 5 ▪ 用途 ▪ (歴史的には) 音コンテンツの著作権保護 ▪ 劇場向けの音コンテンツを民生用機器で再生できなくする、など ▪ (最近では) 合成音声の悪用対策 ▪ 真の音声に透かしを入れ、真正性を担保 ▪ 生成音声に透かしを入れ、技術の悪用を検知 ▪ 悪用例: ジョー・バイデンを騙って投票の棄権を呼びかけた自動電話 https://wired.jp/article/biden-robocall-deepfake-elevenlabs/ 音信号の電子透かしとは

Slide 6

Slide 6 text

AI 6 ▪ OSSを例に、実用的な電子透かしがどういう仕組みで動い ているか紹介する ▪ audiowmark ▪ 信号処理で透かしを生成・検出 ▪ 固定されたコンテンツ向きな感じ ▪ AudioSeal ▪ NNで透かしを生成・検出 ▪ 生成AIには生成AIをぶつけんだよ ▪ 音声向きな感じ この発表の目的 基礎的なところを知るのは玉森先生の音声情報処理n本ノックが良さそう (これも紹介しようと思ったけど時間が足りず)

Slide 7

Slide 7 text

AI 7 02 audiowmark

Slide 8

Slide 8 text

AI 8 ▪ OSS (論文があるわけではない) ▪ 信号処理で埋め込み・検出をそれぞれ頑張る ▪ 860Hz ~ 4300Hz くらいの帯域を強弱させて埋め込む ▪ 44100Hz/1024*20, 44100Hz/1024*100 ▪ 強弱のパターンで埋め込まれた情報を検出する ▪ 最大128bitの情報を埋め込む ▪ 128bit埋め込む場合、52秒ほどのデータが必要っぽい ▪ それより短く切り出されても検出はできるっぽい audiowmark - 概要 https://github.com/swesterfeld/audiowmark

Slide 9

Slide 9 text

AI 9 ▪ むずい;; ▪ おそらくこうだろうという想像で + 所々簡略化して説明します ▪ 細かいところの正確性はないものとして 見てください audiowmark - 埋め込み 図はドキュメントより引用

Slide 10

Slide 10 text

AI 10 ▪ 入力 ▪ 埋め込む情報 (最大 128bit) ▪ 暗号の鍵 ▪ これによって埋め込まれ方が変わる ▪ 音信号 ▪ 出力 ▪ 情報が埋め込まれた音信号 audiowmark - 埋め込み - 入出力 図はドキュメントより引用

Slide 11

Slide 11 text

AI 11 1. 情報を冗長化(誤り訂正符号化)する 2. 検出用の情報を付加する 3. 埋め込み方を決める 4. 埋め込む audiowmark - 埋め込み - 処理の流れ 図はドキュメントより引用

Slide 12

Slide 12 text

AI 12 1. 情報を冗長化(誤り訂正符号化)する 2. 検出用の情報を付加する 3. 埋め込み方を決める 4. 埋め込む audiowmark - 埋め込み - 処理の流れ 図はドキュメントより引用

Slide 13

Slide 13 text

AI 13 ▪ 15次の畳み込み符号によって 情報を6倍に冗長化する audiowmark - 埋め込み - 冗長化 図はドキュメントより引用

Slide 14

Slide 14 text

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 が出力 畳み込み符号ってなんだよ

Slide 15

Slide 15 text

AI 15 1. 情報を冗長化(誤り訂正符号化)する 2. 検出用の情報を付加する 3. 埋め込み方を決める 4. 埋め込む audiowmark - 埋め込み - 処理の流れ 図はドキュメントより引用

Slide 16

Slide 16 text

AI 16 ▪ 検出時に位置合わせに使うための 情報を付加する ▪ 255bit相当の固定データが末尾に 追加されると考えて差し支え無さそう ▪ 合わせると1113bit audiowmark - 埋め込み - 検出用の情報付加 本当は結構違うことをしている気が するが、まあ実質同じ 図はドキュメントより引用

Slide 17

Slide 17 text

AI 17 1. 情報を暗号化する 2. 情報を冗長化(誤り訂正符号化)する 3. 検出用の情報を付加する 4. 埋め込み方を決める 5. 埋め込む audiowmark - 埋め込み - 処理の流れ 図はドキュメントより引用

Slide 18

Slide 18 text

AI 18 ▪ まず80(帯域) * 2226(フレーム)の 行列を用意する audiowmark - 埋め込み - 埋め込み方を決定 1/4 ※心の清らかな人には 80x2226に見える 80 2226 図はドキュメントより引用

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

AI 20 ▪ 各ビットに2個ずつフレームを割り当てる ▪ 鍵をシード値にしてランダムに割り当て audiowmark - 埋め込み - 埋め込み方を決定 3/4 3 1 0 3 0 2 2 1 図はドキュメントより引用

Slide 21

Slide 21 text

AI 21 ▪ 立っているビットに対応するフレームの +と−を反転 ▪ これで完成 audiowmark - 埋め込み - 埋め込み方を決定 4/4 3 1 0 3 0 2 2 1 図はドキュメントより引用

Slide 22

Slide 22 text

AI 22 1. 情報を暗号化する 2. 情報を冗長化(誤り訂正符号化)する 3. 検出用の情報を付加する 4. 埋め込み方を決める 5. 埋め込む audiowmark - 埋め込み - 処理の流れ 図はドキュメントより引用

Slide 23

Slide 23 text

AI 23 audiowmark - 埋め込み - 埋め込む - ざっくり ▪ ざっくりとした説明 ▪ さっきの行列の、 +の部分の振幅をちょっと大きく −の部分の振幅をちょっと小さくする 図はドキュメントより引用

Slide 24

Slide 24 text

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 - 埋め込み - 埋め込む - 詳しく (わかりやすくするのを諦めた) 図はドキュメントより引用

Slide 25

Slide 25 text

AI 25 1. 情報を暗号化する 2. 情報を冗長化(誤り訂正符号化)する 3. 検出用の情報を付加する 4. 埋め込み方を決める 5. 埋め込む できた! で、どうやって埋め込まれた情報を 取り出すの? audiowmark - 埋め込み 図はドキュメントより引用

Slide 26

Slide 26 text

AI 26 ▪ むずい;; ▪ こちらも想像で説明します audiowmark - 検出 図はドキュメントより引用

Slide 27

Slide 27 text

AI 27 ▪ 入力 ▪ 情報が埋め込まれた(であろう)音信号 ▪ 埋め込みに使った暗号の鍵 ▪ これがないと検出できない ▪ 出力 ▪ 埋め込まれた情報 ▪ 検出された位置、信頼度など audiowmark - 検出 - 入出力 図はドキュメントより引用

Slide 28

Slide 28 text

AI 28 1. 検出用の情報を作成する 2. 検出用の情報を音声から探す 3. 強弱から冗長化されたビットを読み出す 4. 畳み込み符号を復号する audiowmark - 検出 - 処理の流れ 図はドキュメントより引用

Slide 29

Slide 29 text

AI 29 1. 検出用の情報を作成する 2. 検出用の情報を音声から探す 3. 強弱から冗長化されたビットを読み出す 4. 畳み込み符号を復号する audiowmark - 検出 - 処理の流れ 図はドキュメントより引用

Slide 30

Slide 30 text

AI 30 ▪ 鍵から、検出用に予め付加されていた情報の 埋め込みパターンを復元 audiowmark - 検出 - 検出用の情報作成 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3 1 0 3 0 2 2 1 図はドキュメントより引用

Slide 31

Slide 31 text

AI 31 1. 検出用の情報を作成する 2. 検出用の情報を音声から探す 3. 強弱から冗長化されたビットを読み出す 4. 畳み込み符号を復号する audiowmark - 検出 - 処理の流れ 図はドキュメントより引用

Slide 32

Slide 32 text

AI 32 ▪ ちょっとずつずらしながら総当たり的に 一番それっぽいところを見つける ▪ 色々細かい工夫とかしてるっぽいけど 飽きてきたので省略 audiowmark - 検出 - 同期 図はドキュメントより引用

Slide 33

Slide 33 text

AI 33 1. 検出用の情報を作成する 2. 検出用の情報を音声から探す 3. 強弱から冗長化されたビットを読み出す 4. 畳み込み符号を復号する audiowmark - 検出 - 処理の流れ 図はドキュメントより引用

Slide 34

Slide 34 text

AI 34 ▪ 各ビットが0の時のパターンと1の時の パターンは鍵から計算できる audiowmark - 検出 - ビット読み出し 1/2 3 1 0 3 0 2 2 1 図はドキュメントより引用

Slide 35

Slide 35 text

AI 35 ▪ どちらがそれっぽいかを検出する ▪ 以下のことを考えていい感じにやる ▪ +の部分はその周辺よりも音量が大きい可能性が高い ▪ −の部分はその周辺よりも音量が小さい可能性が高い ▪ 0/1の確率が出力される ▪ 858bit埋め込んだので858個それぞれの確率 audiowmark - 検出 - ビット読み出し 2/2 図はドキュメントより引用

Slide 36

Slide 36 text

AI 36 1. 検出用の情報を作成する 2. 検出用の情報を音声から探す 3. 強弱から冗長化されたビットを読み出す 4. 畳み込み符号を復号する audiowmark - 検出 - 処理の流れ 図はドキュメントより引用

Slide 37

Slide 37 text

AI 37 ▪ 858bit((128+15)*6bit) それぞれの確率が得られて いるが、元は128bitの情報 ▪ 最尤推定によって元の情報を復元する ▪ ビタビアルゴリズムとか使うらしい ▪ 生成モデル(原義)という感じ ▪ 元の情報が得られた! audiowmark - 検出 - 復号 図はドキュメントより引用

Slide 38

Slide 38 text

AI 38 1. 検出用の情報を作成する 2. 検出用の情報を音声から探す 3. 強弱から冗長化されたビットを読み出す 4. 畳み込み符号を復号する audiowmark - 検出 - 処理の流れ 図はドキュメントより引用

Slide 39

Slide 39 text

AI 39 ▪ 信号処理で頑張る ▪ 鍵がないと情報埋め込んだ情報がわからず安全 ▪ 埋め込んだ情報がわからないと除去も難しい ▪ 広い範囲に情報を埋め込むことで頑健になっている ▪ 実用を強く意識している印象 audiowmark - まとめ

Slide 40

Slide 40 text

AI 40 03 AudioSeal

Slide 41

Slide 41 text

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 - 概要

Slide 42

Slide 42 text

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 より引用

Slide 43

Slide 43 text

AI 43 ▪ Generator ▪ 透かしを出力する ▪ 入力音声と足し合わせて「透かし入り音声」になる ▪ 図では足し合わせる部分が省略されている AudioSeal - 学習の全体像 2/4 図は San Roman et al. “Proactive Detection of Voice Cloning with Localized Watermarking,” ICML, 2024 より引用

Slide 44

Slide 44 text

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

Slide 45

Slide 45 text

AI 45 ▪ Detector ▪ 音声に透かしが埋め込まれたかサンプル単位で判定する AudioSeal - 学習の全体像 4/4 図は San Roman et al. “Proactive Detection of Voice Cloning with Localized Watermarking,” ICML, 2024 より引用

Slide 46

Slide 46 text

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

Slide 47

Slide 47 text

AI 47 ▪ NNでエンコード/デコードする音声の圧縮方式 (これもMeta) ▪ 量子化部分は今回関係ない ▪ 音楽生成AIはこういったモデルによる量子化表現を出力したりする EnCodecってなんだよ? 1/3 図は Défossez, et al. “High Fidelity Neural Audio Compression,” arXiv preprint arXiv:2210.13438, 2022. より引用

Slide 48

Slide 48 text

AI 48 ▪ 波形in波形outのNN ▪ Encはブロックごとに時間方向の解像度が下がりチャンネル数が増える、Decはその逆 ▪ 学習可能パラメータのほとんどは時間方向の解像度が低い中央付近 ▪ 一番外側の時間方向の解像度ってつまりサンプリングレート(秒間数万)なので、そこでチャンネル数のでかいConv使えないのはそれはそう ▪ ConvとLSTMでできていて、時間軸方向の大域的な関係性は見ない EnCodecってなんだよ? 2/3 図は Défossez, et al. “High Fidelity Neural Audio Compression,” arXiv preprint arXiv:2210.13438, 2022. より引用

Slide 49

Slide 49 text

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. のイントロに書いてあった

Slide 50

Slide 50 text

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 より引用

Slide 51

Slide 51 text

AI 51 ▪ Encoderはさっきと同じ、その後雑に元の解像度に戻した感じ ▪ 出力チャンネル数は 1 + bit数 ▪ 1は透かしの有無の判定 AudioSeal - Detector - アーキテクチャ 図は San Roman et al. “Proactive Detection of Voice Cloning with Localized Watermarking,” ICML, 2024 より引用

Slide 52

Slide 52 text

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 より引用

Slide 53

Slide 53 text

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. より引用

Slide 54

Slide 54 text

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

Slide 55

Slide 55 text

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 より引用

Slide 56

Slide 56 text

AI 56 ▪ 提案法はハイパスフィルタ以外全部に頑健で、先行研究はハイパス フィルタには頑健らしい ▪ 提案法は低域に情報を忍ばせている ▪ Detectorの重みを公開してしまうと、Detectorの勾配を利用して学習 したNNによる透かし除去攻撃が可能になってしまう ▪ 逆に、透かし無しの音声 * や重みなどの情報を隠せば透かし除去が難しいことを実 験結果を元に主張している AudioSeal - 実験結果とか (一部を抜粋) * 合成音声に透かしを入れる前提で、その透かし を入れる前の合成音声という意味 先行研究より性能が良いみたいな部分は省略

Slide 57

Slide 57 text

AI 57 ▪ NNで透かしを生成・検出 ▪ 情報量の効率が良さそう ▪ 波形の変形に頑健 ▪ 透かし除去攻撃に対抗するには自分で学習する必要がある AudioSeal - まとめ

Slide 58

Slide 58 text

AI 58 04 まとめ・所感

Slide 59

Slide 59 text

AI 59 ▪ OSSで使われている手法2つを紹介した ▪ 長めのコンテンツであればaudiowmarkは使いやすそう ▪ 局所的に情報を埋め込もうとするとNNの力が頼りになる ▪ 2つともよくできてるよなあ まとめ・所感