はじめに
前回、【論文読み】画像内の文字を自然に別の文字と入れ替えるSTEFANNの紹介という論文を紹介しましたが、関連手法の紹介です
まずSTEFANN: Scene Text Editor using Font Adaptive Neural Networkでは以下のような問題がありました
- 単語単位ではなく、文字単位で置換するため、置き換えたい文字が画像内のソースとなる文字と同じ長さという制限がある
- アルファベットのone-hotベクトルを使用して学習するため、多言語対応していない
SRNetはこの制限がなく、STEFANNより自由度の高い編集が可能です
SRNetのGitHubリポジトリはこちら
TL;DR
簡単にいうと
「オリジナルのスタイルを維持したまま、シーンテキスト画像からテキストを置き換えることができる、テキスト編集作業のためのEnd-to-Endネットワークを
- 前景テキストのスタイルを抽出し、スケルトンを用いて入力テキストに変換する
- スタイル画像を適切なテクスチャで消去して背景画像を得る
- 変換されたテキストを消去された背景にマージする
という3つのステップで実現する」手法です
下のように、画像内の文字を自然に編集することができます。(左が入力となるソース画像、右が出力画像)
手法
先ほどの3つのステップとモジュールの対応関係は以下のようになります
- 前景テキストのスタイルを抽出し、スケルトンを用いて入力テキストに変換する:Text conversion module
- スタイル画像を適切なテクスチャで消去して背景画像を得る:Background inpainting module
- 変換されたテキストを消去された背景にマージする:Fusion module
Text Conversion Module
ソース画像$I_s$(モデル図でいうとStyle Image)と対象テキスト画像$I_t$(モデル図でいうとInput text)を入力として、$I_s$から文字部分のスタイルを抽出し、$I_t$の文字に変換します
ここで、特徴的なのがSkeleton-guided Learning Mechanismです。
簡単にいうと、人間は文字のスケルトン(フォントや色などの情報を除いた文字としての情報)を認識して、文字の意味を理解しているので、それを考慮して文字を変換しよう、ということです。
どう考慮するかというと、スケルトンと生成された文字を比較してスケルトン誤差とし、Text Conversion Moduleの誤差$L_T$に含めます。
詳しい内容(deepl翻訳)
Skeleton-guided Learning Mechanism
他の自然なオブジェクトとは異なり、人間は、テキストのスケルトンまたはグリフに応じて主に異なるテキストを区別します。そのためには、テキストスタイルを変換した後も、テキストのスケルトンを保持しておく必要がある。これを実現するために,本研究ではスケルトン学習機構を導入する.具体的には、3つのアップサンプリング層と1つの畳み込み層からなるスケルトン応答ブロックにシグモイド活性化関数を加えてシングルチャンネルのスケルトンマップを予測し、スケルトンヒートマップとデコーダ出力を深度軸に沿って連結する。スケルトン応答マップの再構成品質を測定するために、クロスエントロピー損失の代わりにサイコロ損失[18]を使用する。数学的には、スケルトン損失は次のように定義される。
ここで,$N$はpixellの数,$T_{sk}$はスケルトン基底真理値マップ,$O_{sk}$はスケルトンモジュールの出力マップである.さらにL1損失を採用してテキスト変換モジュールの出力を監視している。
スケルトンロスと組み合わせると、テキストコンバージョンロスは
ここで,$T_t$はテキスト変換モジュールの基底真理値,$\alpha$は正則化パラメータであり,本論文では1.0に設定されている.
Background Inpainting Module
元画像$I_s$のみを入力とし、テキスト部分を消去し、適切なテクスチャで埋めた背景画像$O_b$を出力します。
詳しい内容(deepl翻訳)
ここで、$T_b$はバックグラウンドの基底真理値である。式は、逆境損失とL1損失を組み合わせたものであり、追試では$\beta$を10としている。
Fusion Module
Text Conversion Moduleの生成画像$O_t$とBackground Inpainting Moduleのアップサンプリング層の重みを用いて、文字情報と背景情報を合成します。
また、$L_F$にVGG-19学習済モデルの層の重みを使用したVGG Lossを組み込むことで微妙に崩れている文字を補正したりすることもしているみたいです
詳しい内容(deepl翻訳)
ここで、$T_f$は編集されたシーン画像の基底真理値である。ここでは、敵対的損失とL1損失のバランスをとるために$\theta_1=10$としている。
VGG-Loss
歪みを低減し、よりリアルな画像を生成するために、知覚損失[13]とスタイル損失[6]を含む融合モジュールにVGG-Lossを導入した。知覚的損失$L_{per}$は、その名の通り、事前に学習したネットワークの活性化マップ間の距離を定義することで、ラベルと知覚的に類似しない結果に対してペナルティを与えるものである(ImageNet[25]で事前に学習したVGG-19 model[28]を採用している)。一方,スタイル損失$L_{style}$はスタイルの違いを計算する.VGG-loss $L_{vgg}$は以下によって表される
ここで$\phi_i$はVGG-19モデルのrelu1_1,relu2_1,relu3_1,relu4_1,relu5_1層からの活性化マップであり、$M_i$は$i$番目の層で得られた特徴マップの要素サイズであり、$G$はグラム行列$G(F)=FFT∈Rn×n$であり、重み$θ_2$と$θ_3$はそれぞれ1と500に設定されています。融合モデルの全体的な学習目的は以下の通りである。
学習方法
GANの学習のような形式で学習します。損失関数は
のようになります。ここで出てくる$L_T,L_B,L_f$はぞれぞれのモジュールの損失、$D_B,D_F$はそれぞれBackground Inpainting Module, Fusion Moduleの出力画像を本物かどうか2クラス分類をするDiscriminatorです。
データセット
データセットは学習用と、評価用の2つを用います。
学習用
このように、
- 背景画像を含むソース画像
- 変換後の文字の画像
- 返還後の文字のスケルトン
- 返還後の文字でスタイルはソース画像(背景なし)
- ソース画像の背景
- 期待する出力
- バイナリマスク
で構成されています。
学習データの生成スクリプトはモデルとは別のリポジトリにあります
GitHubのリポジトリ
評価用
評価用のデータセットは現実世界の画像を使います。
使用するのはICDAR2013(2013 International Conference on Document Analysis and Recognition for Competition)のテキストシーン画像データセットです。
結果
執筆時に単語レベルのテキスト編集タスクがまだなかったため、Pix2pixを用いての比較です。一目瞭然ですが、SRNetの方はかなり自然に編集できていると言えます。
また、STEFANNでできなかった多言語での変換ですが、すこし違和感があるもののARを用いた翻訳などにも応用できそうですね
まとめ
- オリジナルのスタイルを維持したまま、シーンテキスト画像からテキストを置き換えることができる、テキスト編集作業のためのEnd-to-Endネットワークを3ステップで実現した
- 任意の文字数で、文字を変換することができる
- 多言語に対応にした文字変換ができる