ホーム エンジニア AI 機械学習によるアイコン画像生成のこころみ (下調べ編)
機械学習によるアイコン画像生成のこころみ (下調べ編)
 

機械学習によるアイコン画像生成のこころみ (下調べ編)

何かと必要とされるアイコン画像を、人手をかけず気軽に作ることができたらうれしい! そんな夢をかなえたく、機械学習によるアイコン画像生成をこころみました。

今回こころみたこと

ここでは先行事例(くわしくは後述します)にならい、CycleGAN でのアイコン画像生成をこころみます。この下調べ編では仕組みについて見ていき、続く 実践編で具体的に動かしていきます。

すすめていくと、気軽な生成のためには気軽ではない準備が必要でした。またコストの面でも “機械学習で発生するものとしては現実的な範囲、ただし気軽に試すにはためらう程度” のリソースが必要になりました。今回のこころみでは気軽な範囲にとどめ、最後の一歩手前までを実践していきます。

動機

今回アイコン画像の生成をこころみた動機は主に以下の2点でした。

  1. 機械学習での生成をためしたい
  2. オリジナリティのあるアイコン画像を気軽に手に入れたい

1.機械学習での生成をためしたい

過去の案件で何かを予測したり識別したりするような課題を扱ったことはありますが、何かを生成するような課題については経験が少ないため、生成に関する知見を増やしたいです。

2.オリジナリティのあるアイコン画像を気軽に手に入れたい

システム開発では何かとアイコン画像の出番があります。しかも、対象のシステムに特化した “こういうアイコン画像が欲しいです” となることがたびたびあります。また、いろいろなアイコン画像を試してみたいという要望もしばしばあります。

特化したアイコンについては、様々なテイストのアイコンセットやニッチな領域に特化したアイコンが販売されているのでそれを利用する手もあります。とはいえピンポイントなものを探す手間はかかりそうです。

いろいろなアイコンを試してみたいという要望については、なるべくデザイナーの手を煩わすことなくアイコン画像の候補を用意したいところです。デザイナーの手にかかる前のプロトタイピングの段階で仮のそれらしいアイコン画像を用意できれば手戻りも減らせそうです。


上記では、一般的な用途のアイコン画像に加え、用途の偏ったアイコン画像を気軽にためしたいという要望があります。アイコン画像の生成については、あらかじめ用意されたアイコン画像の色調を変更したりアウトライン・塗り潰しを切り替えたりするなど、組み合わせで実現する方法もあります。ただしこの場合、バリエーションを用意するのに手がかかってしまうし、用意されたものから逸脱するアイコン画像を手に入れることはできません。

ここでは、任意の対象がアイコンとして表現されている画像が欲しい、と言えそうです。あらかじめ用意した選択肢をこえたものが欲しいというような問題の解決に機械学習の手法が使えないか、というのを理由に今回の課題を考えてみます。

課題設定

上述したとおり、機械学習の生成で “任意の対象がアイコンとして表現されている画像” が得られること、という課題に設定します。ぼんやりしたところを以下で詳しくしていきます。

そもそもアイコンとは何なのかを考える必要がありそうです。通常、アイコンは何かの対象を記号的に表現したものが多い印象です。簡潔な表現からそれが指す物体や概念を判別できるようなものです。今回は課題をわかりやすくするため、何かの “物体” を記号的に表現したものとしてアイコンを考えます。”概念” については、記号的に表現するのは難易度が高いため今回の課題の範囲外としました。

物体をアイコンとして表現するのに使えそうな手法として、今回は機械学習のスタイル変換 (style transfer) を候補としてみました。突然出てきたスタイル変換ですが、これについては “AI で画像をゴッホの画風に変換する技術” などと呼ばれているもので目にしたことがあるかと思います。A Neural Algorithm of Artistic Style の論文で jcjohnson/neural-style などの実装があります。このスタイル変換をアイコン画像の生成に利用できないかと考えました。

スタイル変換での画像生成について、以下の2つのパターンを検討してみました。

  • もともとアイコンではない何かの物体の画像をアイコンスタイルに変換する
  • もともとアイコン画像になっているものを異なるスタイルのアイコン画像に変換する

あわよくば、両者をあわせて 実写画像 → アイコン画像 → いろいろな表現のアイコン画像 という変換ができれば都合がよいです。

ひとまずここでは前者をみていきます。(ちなみに後者はまた別なメンバーがトライしました)

“機械学習のスタイル変換を使い、アイコンではない何かの物体画像をアイコン画像に変換することでアイコン画像を生成する” という課題としてみます。

事例をさがす

素人が考えつくようなアイディアなのでおそらく先例がありそうです。具体的な手法としてはスタイル変換関連のものを探せばよさそうですが、もうすこし詳しいキーワードが欲しいところです。ひとまずとっかかりとして『生成 Deep Learning (David Foster 著 オライリー・ジャパン発行)』を見てみます。画像についての生成の項目を見たところ “CycleGAN” と “ニューラルスタイル変換” というキーワードが出てきました。当初の方向性としても間違ってはいなそうなので、このあたりで調べてみます。

それらしいキーワードで検索していくと、やろうとしていることに近い先例 (というかソノモノな先例) に達したのでそれを見ていきます。

Iconify: Converting Photographs into Icons (arXiv.org)

IN THIS PAPER, WE TACKLE A CHALLENGING DOMAIN CONVERSION TASK BETWEEN PHOTO AND ICON IMAGES. ALTHOUGH ICONS OFTEN ORIGINATE FROM REAL OBJECT IMAGES (I.E., PHOTOGRAPHS), SEVERE ABSTRACTIONS AND SIMPLIFICATIONS ARE APPLIED TO GENERATE ICON IMAGES BY PROFESSIONAL GRAPHIC DESIGNERS. MOREOVER, THERE IS NO ONE-TO-ONE CORRESPONDENCE BETWEEN THE TWO DOMAINS, FOR THIS REASON WE CANNOT USE IT AS THE GROUND-TRUTH FOR LEARNING A DIRECT CONVERSION FUNCTION. SINCE GENERATIVE ADVERSARIAL NETWORKS (GAN) CAN UNDERTAKE THE PROBLEM OF DOMAIN CONVERSION WITHOUT ANY CORRESPONDENCE, WE TEST CYCLEGAN AND UNIT TO GENERATE ICONS FROM OBJECTS SEGMENTED FROM PHOTO IMAGES. OUR EXPERIMENTS WITH SEVERAL IMAGE DATASETS PROVE THAT CYCLEGAN LEARNS SUFFICIENT ABSTRACTION AND SIMPLIFICATION ABILITY TO GENERATE ICON-LIKE IMAGES.

ICONIFY : CONVERTING PHOTOGRAPHS INTO ICONS. / KARAMATSU, TAKURO; BENITEZ-GARCIA, GIBRAN; YANAI, KEIJI; UCHIDA, SEIICHI.

MMART-ACM 2020 – PROCEEDINGS OF THE 2020 JOINT WORKSHOP ON MULTIMEDIA ARTWORKS ANALYSIS AND ATTRACTIVENESS COMPUTING IN MULTIMEDIA. ASSOCIATION FOR COMPUTING MACHINERY, INC, 2020. P. 7-12 (MMART-ACM 2020 – PROCEEDINGS OF THE 2020 JOINT WORKSHOP ON MULTIMEDIA ARTWORKS ANALYSIS AND ATTRACTIVENESS COMPUTING IN MULTIMEDIA).

研究成果: CHAPTER IN BOOK/REPORT/CONFERENCE PROCEEDING › CONFERENCE CONTRIBUTION

CycleGAN で写真画像とアイコン画像のスタイル変換を試してみたところ「いい感じにアイコン風画像生成の抽象化ができた」ということなので、まさに求めているものという印象です。なお、見つけたときはこれを再現できれば目的が達成できそうだと大船に乗った気持ちでしたが、後々考えの甘さに気付きます (実証の完遂に敬意です)。

詳細は論文の本文を参照してもらうとして、ひととおり読んでみたところ以下がキモだと解釈しました。

  • CycleGAN を使う
  • 段階的に学習する
  • 目的にあうデータセットを使う

それぞれについて見ていきます。

なお、論文では以下の3つ、

  • “実写の人間の画像” と “単色白黒アイコンの人間の画像” で学習しての変換
    • 限定的な物体についての実写画像とアイコン画像との変換
  • “実写の物体の画像” と “単色白黒アイコンの画像” で学習しての変換
    • 物体全般についての実写画像とアイコン画像との変換
  • “実写の物体の画像” と “ロゴ画像” で学習しての変換
    • 物体全般についての実写画像とロゴ画像との変換
    • アイコン画像の話をしているところで突然ロゴ画像が出てきますがそれについては後述

が検証されていますが、より汎用的で良好な結果が得られたと思われる3つめの再現をこころみます。

CycleGAN を使う

CycleGAN とは何者なのか、というところから見ていきたいです。その前に GAN について軽く触れておきます。

GANとは何なのか?

GAN (敵対的生成ネットワーク, Generative adversarial networks) を Wikipedia で見てみると以下のように説明されています。

敵対的生成ネットワーク (てきたいてきせいせいネットワーク、英: GENERATIVE ADVERSARIAL NETWORKS、略称: GANS)は、2014年にイアン・グッドフェローらによって発表された教師なし学習で使用される人工知能アルゴリズムの一種であり、ゼロサムゲームフレームワークで互いに競合する2つのニューラルネットワークのシステムによって実装される[1]。

GANSは生成ネットワーク(GENERATOR)と識別ネットワーク(DISCRIMINATOR)の2つのネットワークから構成される。例として画像生成を目的とするなら生成側がイメージを出力し、識別側がその正否を判定する。生成側は識別側を欺こうと学習し、識別側はより正確に識別しようと学習する。このように2つのネットワークが相反した目的のもとに学習する様が敵対的と呼称される所以である。

HTTPS://JA.WIKIPEDIA.ORG/WIKI/%E6%95%B5%E5%AF%BE%E7%9A%84%E7%94%9F%E6%88%90%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF (2020年10月20日 (火) 19:27 時点の版)

ざっくり言えば、

  • 生成する役と識別する役が互いに高めあうように学習して、上手に生成ができるようになる仕組み
  • ニューラルネットワークで作られている (ここでのニューラルネットワークはディープラーニングの一種と言ってよさそうです)

というものです。

CycleGANとは何なのか?

戻って CycleGAN についてです。これは論文の本文をざっと要約してみます。

CycleGAN はドメイン変換手法で、一対一で対応する画像の情報なしで2つのドメイン間のマッピングを決めることができます。今回のケースで言えば、実写の物体の画像とアイコン画像という2つのドメインについて、実写の物体とアイコンの一対一の対応関係の情報なしでそのマッピングを決めることができます。今回のような課題の場合、実写の車の画像と車を表わすアイコン画像といった組み合わせを用意することは非現実的です。pix2pix で使うようなデータを用意することは難しいでしょう。

CycleGAN では双方向に一対一のマッピングを実現するために “cycle-consistency loss” を使っています。前出の『生成 Deep Learning』の用語で言うなら “復元性損失” と訳されるものでしょうか。今回で言えば実写の物体の画像とアイコン画像の変換を双方向に行います。双方向の変換が上手にできるならば、実写の物体をアイコン画像に変換し、さらにそのアイコン画像を実写の物体の画像に変換すると元の実写の物体の画像とよく似たものを作れるはずです。

ざっくり言えば、

  • 2つのドメイン間の対応情報なしにマッピングを決めることができる
  • 双方向に変換する仕組みを使っている

というものです。より詳細は論文の本文や CycleGAN の原論文を参照してください。なお CycleGAN も、馬とシマウマの変換 (Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks) で有名です。

実装は junyanz/pytorch-CycleGAN-and-pix2pix を利用したとのことなので、これにならいます。

補足: CycleGAN では “identity mapping loss” (同一性損失) という色の不変性に関連する仕組みが使われています。実写画像と白黒アイコン画像の変換を検証する際に、色は重要な要素ではないためこの損失を弱めたとあります。今回は実写の物体の画像とロゴ画像とを利用するパターンの再現を目標としているので、とくに手心を加えずやっていきます。

段階的に学習する

学習につかうデータセットのバリエーションに対してうまく対処するため、段階的な学習という手段を使ったとあります。

実写の物体の画像とアイコン画像との間の変換は、馬とシマウマのときのように特定の対象同士を扱うものではありません。論文中の検証のうちの1つめ、”実写の人間の画像と単色白黒アイコンの人間の画像で学習しての変換” は、馬とシマウマのケースに近いと考えられます。しかし “実写の物体” の画像は人間だけでなく、車やボールなどいろいろなバリエーションがあります。またアイコン画像についても、それぞれが全く異なる抽象化の施された表現になっています。このバリエーションへ対応するために PGGAN という手法にならい、段階的な学習で対処しています。今回は前出の CycleGAN の実装で --continue_train フラグをつけてモデルをファインチューニングしていくことになります。

PGGAN (tkarras/progressive_growing_of_gans) という新しいワードが出てきました。これはざっくり言えば “低解像度の画像から学習をはじめて層を増やしていくと訓練の速度があがり、安定性が向上する” というものです。32×32 ピクセルのサイズから 64×64 → 128×128 → 256×256 と段階的にファインチューニングして学習をしたとあります。

目的にあうデータセットを使う

今回は “実写の物体の画像とロゴ画像で学習しての変換” を再現するため、以下のデータセットを用意します。

  • 実写の物体の画像として COCO – Common Objects in Context
    • 物体認識やセグメンテーション、キャプションのアノテーションデータと画像を提供するデータセットです
    • 今回はアノテーションとして “2017 Train/Val annotations” を、画像データとしてそれに対応する “2017 Train images” をもとにデータを作成します
    • アノテーションの情報をもとに、画像から物体だけを切り抜き白背景にして正方形にし、リサイズして使います
  • ロゴ画像として LLD – Large Logo Dataset
    • favicon や Twitter のプロフィール画像を集めたデータセットです
    • 今回は LLD-logo (Twitter のプロフィール画像をロゴととらえ集めたもので、400×400 ピクセルの画像) からランダムに選んだ 20000 画像をリサイズして使います

実写の物体の画像

実写の物体の画像をアイコン画像に変換するにあたり、その元となる実写の物体を切り出す必要があります。アイコン画像は通常、背景持っていません。ただ、そのような画像のデータセットは存在しないので、COCO のデータセットをアノテーションの情報で切り抜きデータを作成しています。ここで使うアノテーション情報は、ピクセル単位で画像のどこに何の物体があるかという情報を使います。

また、対象の物体が小さすぎる場合も除外します。COCO のアノテーション情報は、ある画像内に存在する物体の領域の情報なので、対象が小さく写っていたり部分的に写っているものも多いです。本来ならば対象がわかりやすく写っている画像が好ましいのですが、そのようなデータセットは存在しないため COCO をよしなに加工して利用しています。結局のところ、今問題としているのは識別ではなく生成なので、アイコンとして生成したい見栄えのよい画像が用意できるとうれしいです。

ロゴ画像

論文内では、実写の物体の画像と白黒のアイコン画像とを使った検証も行なっていますが、今回は以下の理由から白黒アイコン画像での再現を見送りました。

  • Microsoft PowerPoint で提供されている白黒アイコン画像を使ったとあるものの、そもそもそのアイコン画像たちを特定できていない
  • 数が少なく、別途データ拡張が必要 (オリジナルの画像を回転・拡縮・ノイズ追加をしてデータを水増しする工夫が必要)
  • 白黒アイコン画像の場合には同一性損失を弱めたとあるものの (前述)、どの程度弱めたのかは詳しく言及されていないため試行錯誤の必要がある

ロゴはテキストを含んでいたり色があったりと、その用途と形状に差異はあるものの、抽象的なデザインという点でアイコンに似ているためアイコン画像とともに試されています。検証でも悪くない結果を得られたようなので、ロゴ画像で再現をこころみます。ロゴ画像については LLD のデータセットで十分な数が提供されているためデータ拡張が不要な点もありがたいです。

下調べ編 まとめ

ざっくりまとめます。

  • アイコン画像の生成に CycleGAN が使えそう
  • ただし段階的な学習などひと工夫が必要
  • データセットもぴったり要件にあうものはないのでひと工夫必要

スタイル変換でアイコン画像を生成できないか?というあいまいな状態からすこし具体的になってきました。以上に見てきた内容をもとに画像生成を実践してみます。実践編に続きます

記事を共有

最近人気な記事