目次

16. Flowers102

16.1 データセットの説明

Flowers102はOxford大学の Visual Geometry Group [25] (ニューラルネットVGGの開発者)の公開している花のデータセットです。
総数8189個の画像が102種類に分類されています。 各種類ごとの画像の数は40~258と不均一です。 各画像は500ピクセル程度の不均一な長方形です。
図16-1に各種類ごとに一つの画像を取り出した図を示します。英国で見られる花です。
本データセットは画像が大きいことが特徴です。

図16-1 データセット

データセットを取得するには[26]から以下の2個のファイルをダウンロードしてください。

  1. Dataset images (102flowers.tgz) : 展開するとjpgフォルダに8189個のjpgファイルができます
  2. The image labels (imagelabels.mat) : ラベルを表すMATLABファイルです、SciPyの関数を用いてラベルを取り出します

花の名前は以下の通りです[27]。上から順にラベル=0,1,...,101です。
日本語訳が間違っているときはlabels.pyを修正してください。

'pink primrose サクラソウ',
'hard-leaved pocket orchid ラン',
'canterbury bells フウリンソウ',
'sweet pea スイートピー',
'english marigold マリーゴールド',
'tiger lily オニユリ',
'moon orchid 月蘭',
'bird of paradise 極楽鳥',
'monkshood トリカブト',
'globe thistle アザミ',
'snapdragon キンギョソウ',
'colt"s foot フキタンポポ',
'king protea キングプロテア',
'spear thistle ノゲシ',
'yellow iris 黄菖蒲',
'globe-flower 玉虫花',
'purple coneflower ムラサキツユクサ',
'peruvian lily 百合水仙',
'balloon flower 風船花',
'giant white arum lily 白百合',
'fire lily オレンジリリー',
'pincushion flower 西洋松虫草',
'fritillary 豹紋蝶',
'red ginger 紅生姜',
'grape hyacinth グレープヒヤシンス',
'corn poppy ヒナゲシ',
'prince of wales feathers',
'stemless gentian リンドウ',
'artichoke アザミ',
'sweet william ヒゲナデシコ',
'carnation カーネーション',
'garden phlox クサキョウチクトウ',
'love in the mist ニゲラ',
'mexican aster コスモス',
'alpine sea holly ヒイラギ',
'ruby-lipped cattleya カトレア',
'cape flower ケープフラワー',
'great masterwort アストランティア',
'siam tulip チューリップ',
'lenten rose レンテンローズ',
'barbeton daisy ガーベラ',
'daffodil ラッパスイセン',
'sword lily 剣百合',
'poinsettia ポインセチア',
'bolero deep blue バラ',
'wallflower ウォールフラワー',
'marigold マリーゴールド',
'buttercup キンポウゲ',
'oxeye daisy フランス菊',
'common dandelion セイヨウタンポポ',
'petunia ペチュニア',
'wild pansy パンジー',
'primula サクラソウ',
'sunflower ヒマワリ',
'pelargonium ゼラニウム',
'bishop of llandaff ダリア',
'gaura 白蝶草',
'geranium ゼラニウム',
'orange dahlia ダリア',
'pink-yellow dahlia ダリア',
'cautleya spicata カトレヤ',
'japanese anemone 秋明菊',
'black-eyed susan キク',
'silverbush シルバーブッシュ',
'californian poppy ハナビシソウ',
'osteospermum オステオスペルマム',
'spring crocus クロッカス',
'bearded iris アヤメ',
'windflower アネモネ',
'tree poppy ツリーポピー',
'gazania ガザニア',
'azalea アザレア',
'water lily スイレン',
'rose バラ',
'thorn apple チョウセンアサガオ',
'morning glory アサガオ',
'passion flower トケイソウ',
'lotus ハス',
'toad lily ホトトギス',
'anthurium ベニウチワ',
'frangipani プルメリア',
'clematis クレマチス',
'hibiscus ハイビスカス',
'columbine コロンバイン',
'desert-rose デザートローズ',
'tree mallow モクアオイ',
'magnolia モクレン',
'cyclamen シクラメン',
'watercress クレソン',
'canna lily テッポウユリ',
'hippeastrum アマリリス',
'bee balm ビーバーム',
'ball moss タマゴケ',
'foxglove キツネノテブクロ',
'bougainvillea ブーゲンビリア',
'camellia カメリア',
'mallow ウスベニアオイ',
'mexican petunia ペチュニア',
'bromelia ブロメリア',
'blanket flower オオテンギク',
'trumpet creeper ラッパズイセン',
'blackberry lily クロユリ',

16.2 計算条件の考察

16.2.1 自作CNN

図16-2にCNN6とCNN8の正解率を示します。
元の画像の画素数が大きいので小さくリサイズした画像を用いて学習しています。
図中のパラメーターはチャンネル数とリサイズ画素数です。
(a)のCNN6ではチャンネル数が大きいほど、リサイズが"小さいほど"正解率が高いことがわかります。
(b)のCNN8ではリサイズを大きくすると正解率が上がることがわかります。
以上からネットワークと画素数をバランスよく大きくして長く学習させると正解率が上がることがわかります。

(a) CNN6
(b) CNN8
図16-2 正解率の収束状況(自作CNN, Adam, 前処理なし, ドロップアウト0.3, ミニバッチ50)

訓練データを変換して訓練データに加えることをデータ増量(data augmentation)と呼びます。 これによって正解率が上がることが知られています。
図16-3は各種方法でデータ増量を行ったときの正解率です。
元データ以外に以下のデータ増量を行っています。

  1. 左右反転した画像を追加
  2. 上下反転した画像を追加
  3. 変換しない画像を追加 !
  4. 左右反転した画像と上下反転した画像と左右上下反転した画像を追加しさらに全体を2倍
図中の()内の数字は訓練データ数の比です。 エポックあたりの計算時間は訓練データ数に比例します。
左右反転画像を追加したときに正解率が最も上がります。 花は左右反転しても同じ花ですが、上下反転したときは意味が少し変わるためと思われます。 また何も変換しない画像を追加したときも正解率が上がります。
全部追加してさらに2倍したときに最高の正解率89.0%が得られます。 データ増量を行うことにより正解率が6%上がります。

図16-3 データ増量の効果(自作CNN8, 128ch, 64px, Adam, ドロップアウト0.3, ミニバッチ50)

16.2.2 自作ResNet

図16-4に自作ResNetのパラメーター(ブロック数, チャンネル数, リサイズ) を変えたときの正解率を示します。
(a)はブロック数を変えたときです。ブロック数3,4,5はほぼ同じで、6はやや劣ります。 ブロック数を増やせば単純に正解率が上がるわけではありません。
(b)はリサイズ(画素数)を変えたときです。32<64<96=128となります。 リサイズを大きくすると正解率が上がりますが上限があります。
(c)はチャンネル数を変えたときです。128<192=256となります。 チャンネル数を大きくすると正解率が上がりますが上限があります。
いずれの場合も正解率が大きく変動して収束しませんが、 逆に言えばAdamは極小値を脱出する能力があると言えます。
正解率は最高で89.6%です。

(a) ブロック数変化, チャンネル数一定, リサイズ一定
(b) ブロック数一定, チャンネル数一定, リサイズ変化
(c) ブロック数一定, チャンネル数変化, リサイズ一定
図16-4 正解率の収束状況(自作ResNet, Adam, 前処理なし, ドロップアウト0.3, ミニバッチ50)

図16-5に各種方法でデータ増量を行ったときの正解率を示します。
データ増量によって収束が速くなることがわかります。 ただしエポック当たりの計算時間は増えます。 元データでも計算を続けると正解率が89%を超えることを考えると、 本ケースではデータ増量を行っても全体の計算時間と最終的な正解率は変わらないことがわかります。

図16-5 データ増量の効果(自作ResNet, 4ブロック, 192ch, 96px, Adam, ドロップアウト0.3, ミニバッチ50)

16.2.3 公開ResNet(重みなし)

図16-6に公開ResNet(重みなし)の正解率を示します。
(a)公開ResNetは224ピクセルで学習しているために、 リサイズを224に近づけると正解率が上がります。
(b)公開ResNetのブロック数(層数)を大きくすると正解率が下がります。

(a) リサイズ変化
(b) ブロック数変化
図16-6 正解率の収束状況(Adam, 前処理なし, ミニバッチ50)

図16-7に左右反転画像を追加したときの正解率を示します。
正解率は最高85.9%であり、データ増量によって約2%上がります。

図16-7 データ増量の効果(ResNet18, 重みなし, 224px, Adam, ミニバッチ50)

16.2.4 公開ResNet(重みあり)

図16-8に公開ResNet(重みあり)の正解率を示します。
(a)ResNet18共通でリサイズを224に近づけると正解率が顕著に上がります。
(b)リサイズ224共通ではモデルによる違いは小さく、 むしろResNet50の正解率が少し低下しています。
(c)ResNet18共通でリサイズを224より大きくした場合です。 理由は不明ですがリサイズ300で正解率が有意に高くなっています。
ResNet18+リサイズ300でエポック数100まで計算を行うと正解率は最高98.51%となります。

(a) ResNet18共通, リサイズ変化
(b) リサイズ224共通, ResNet変化
(c) ResNet18共通, リサイズ変化
図16-8 正解率の収束状況(momentum(0.001,0.9), 前処理なし, ミニバッチ50)

16.3 計算結果

図16-9に回答の一部を示します。赤は不正解で、上が正解、下が誤回答です。

図16-9 回答例

図16-10に不正解の全部(1675個のうちの25個)を示します。上が正解、下が誤回答です。

図16-10 全不正解(25個)