ホーム » CIFAR-100

CIFAR-100」カテゴリーアーカイブ

TensorFlow: Network-In-Network で CIFAR-10 精度 90%

TensorFlow: Network-In-Network で CIFAR-10 精度 90%
作成 : (株)クラスキャット セールスインフォメーション
日時 : 05/08/2017

 

Network In Network

マイクロ・ネットワークで有名な Network in Network (NiN) は、より小さいモデルでより高速に訓練することを可能とし、over-fitting も比較的起きにくいとされます。多大な影響を与えた epoch-making なモデルです。

その基本アイデアは MLP 畳込み層 (mlpconv) – マイクロ・ネットワーク – の導入とグローバル平均プーリングによる完全結合層の代用ですが、特に前者については広く利用され、類似のアイデアは Inception や ResNet にも見られます。後者は解釈を容易にして over-fitting を起きにくくします。

Network In Network 全体の構成としては mlpconv 層のスタックになり、そのトップにグローバル平均プーリング、更に目的コスト層が存在することになります。イメージと違い、意外にシンプルなモデルです。

参照されることが多いわりにはオリジナル・モデルがそのまま使われることは (知る限りでは) 少ないように思われますが、実装は簡単ですので定番のデータセットで威力を試しておきます。
MNIST、CIFAR-10 及び CIFAR-100 について原論文の結果に匹敵、あるいは凌駕する結果が得られました。CIFAR-10 では精度 90 % に到達します。

Network In Network の原論文は以下です :

  • Network In Network
    Min Lin, Qiang Chen, Shuicheng Yan
    (Submitted on 16 Dec 2013 (v1), last revised 4 Mar 2014 (this version, v3))

Abstract のみ翻訳しておきますが、基本的にはここに書かれていることが全てです :

受容野内のローカルパッチのモデル識別性を強化するために “Network in Network” (NIN) と呼ばれる、新しい深層ネットワーク構造を提案します。従来の畳込み層は入力をスキャンするために、非線形活性化関数が続く線形フィルタを使用します。代わりに、受容野内のデータを抽象化するためにより複雑な構造でマイクロ・ニューラルネットワークを構築します。そのマイクロ・ニューラルネットワークは潜在的な関数近似器である多層パーセプトロンでインスタンス化します。特徴マップは CNN と同様の流儀で入力に渡ってマイクロ・ネットワークをスライドさせることで得られます; そしてそれらは次の層に供給されます。深層 NIN は上で記述された構造を多層化することで実装されます。マイクロ・ネットワークを通したローカルモデリングの強化により、分類層の特徴マップに渡るグローバル平均プーリングを利用することが可能で、これは伝統的な完全結合層よりも解釈がより容易で過剰適合しにくいです。私たちは CIFAR-10 と CIFAR-100 上の NIN で state-of-the-art な分類性能を示し、SVHN と MNIST データセットで合理的な性能を示しました。

実装

実装は簡単ですが、以下の Caffe 実装を参考にしました (というか後者を殆どそのまま TensorFlow に流用しました) :

 

MNIST

手始めに MNIST です。取り敢えず 80 epochs 実行してみましたが、最後の 10 epochs の平均エラー率は 0.393 % で、state of the art に近い精度が出ました (ちなみに原論文のエラー率は 0.47 % ですので、僅かばかり良い結果が得られたことになります)。

 

CIFAR-10

原論文では 91.2 % のようですが、そこまでは出ませんでしたが、400 epochs で 90 % に到達します :

念のため更に 100 epochs 再調整します :

最後の 10 epochs の平均精度は 90.204 でした。時間をかければ 91 % に近い精度は出る感じですが、超えるのは難しそうです。

 

CIFAR-100

続いて CIAR-100 ですが、スクラッチからの訓練ではなく上記の CIFAR-10 の訓練済みのモデルを流用しました。この方法だと 66 % は出ます。原論文の結果は 64.32% です :

 
以上

TensorFlow ResNet (Deep Residual Learning) で CIFAR-100

TensorFlow ResNet (Deep Residual Learning) で CIFAR-100

CIFAR-10 については TensorFlow のチュートリアル : 畳み込み ニューラルネットワーク で解説されていますが、
CIFAR-100 についてはまだ試していなかったので TensorFlow 実装で試しておくことにします。

モデルとしては Deep Residual Learning(いわゆる ResNet)を利用しました。
これは Microsoft Research Asia (MSRA) が提唱したモデルで ILSVRC 2015 の分類タスクで優勝したモデルです。ゲートがない LSTM であるとの批評もあるようですが、興味深いモデルです。

CIFAR-100

CIFAR-100 のデータセットも CIFAR-10 と同じサイトから取得できます :

CIFAR-10 and CIFAR-100 dataset

CIFAR-10 との違いは、単に 100 種類に分かれているのではなく、20 種類のスーパークラスに分割された上で更に 100 種類のサブクラスに分割されていることです :

 

スーパークラス

クラス
海洋哺乳類

ビーバー, イルカ, カワウソ, アザラシ, 鯨
魚類

観賞魚, カレイ, エイ, サメ, マス

ラン, ひなげし, バラ, ヒマワリ, チューリップ
食品容器

ボトル, ボウル, カン, カップ, プレート
果物と野菜

リンゴ, キノコ, オレンジ, ナシ, ピーマン
家庭用電気機器

時計, コンピュータ・キーボード, ランプ, 電話, テレビ
家庭用家具

ベッド, 椅子, ソファー, テーブル, タンス
昆虫

蜂, カブトムシ, 蝶, 蝶等の幼虫, ゴキブリ
大きな肉食獣

クマ, ヒョウ, ライオン, 虎, 狼
大きな人造の屋外物

橋, 城, 家, 道, 超高層ビル
大きな自然野外シーン

雲, 森, 山, 平野, 海
大きな雑食動物と草食動物

ラクダ, 牛, チンパンジー, 象, カンガルー
中位の哺乳類

キツネ, ヤマアラシ, オポッサム, アライグマ, スカンク
昆虫でない無脊椎動物

カニ, ロブスター, カタツムリ, クモ, ワーム
人々

赤ちゃん, 少年, 少女, 男性, 女性
爬虫類

ワニ, 恐竜, トカゲ, ヘビ, 亀
小哺乳類

ハムスター, マウス, ウサギ, トガリネズミ, リス

カエデ, オーク, ヤシ, 松, 柳
乗り物 1

自転車, バス, オートバイ, ピックアップトラック, 電車
乗り物 2

芝刈り機, ロケット, 市街電車, タンク, トラクタ
 

参考まで、CIFAR-100 のトレーニング・セットの最初の 25 枚の画像を表示しておきます :
cifar100_top25b

画像が粗いので分かりにくいですが、最初の 10 枚の画像はそれぞれ以下のクラスに属します :

牛, 恐竜, リンゴ, 少年, 観賞魚, 電話, 電車, カップ, 雲, 象

Deep Residual Learning

Deep Residual Learning は Microsoft Research Asia (MSRA) が提唱したモデルで ILSVRC 2015 の分類タスクで優勝したモデルです :

ImageNet Large Scale Visual Recognition Challenge 2015 (ILSVRC2015)
and Results

ペーパーは以下 :

Deep Residual Learning for Image Recognition
K. He, X. Zhang, S. Ren and J. Sun

参考まで、abstract だけ翻訳しておきます :

ニューラルネットワークはより深くなるに従ってトレーニングがより困難になります。ネットワークのトレーニングを容易にすることが可能な residual learning フレームワークを公開します。これは前から使われていたものよりも本質的にはより深くなります。層を、learning unreferenced function の代わりに、learning residual function として明示的に再公式化 (reformulate) します。これらの residual ネットワークが最適化するのがより簡単であり、かなり増やした深さからでも精度を得られることを示す、包括的で実証的な証拠を提供します。ImageNet データセット上で 152 層まで増やした深さで residual ネットを評価します — これは VGG ネットよりも 8 倍深いですが依然として複雑の度合いは低いです。これらの residual ネットのアンサンブルは ImageNet テスト・セット上でエラー率 3.57 % を達成しています。結果は ILSVRC 2015 分類タスクにおいて1位を勝ち取りました。また 100 と 1000 層による CIFAR-10 上の解析も示します。表現の深さは多くのビジュアル認識タスクのために中心的な重要性があります。極めて深い表現のみによって、COCO 物体検知データセット上で 28% の相対的改善を得ました。deep residual ネットは ILSVRC & COCO 2015 コンペへの提示の拠り所で、そこではまた ImageNet 検知、ImageNet localization、COCO 検知、そして COCO セグメンテーションのタスクにおいて1 位を獲得しました。

 
それから関連記事も紹介しておきますと、ResNet については “ゲートのない LSTM と同等である” という興味深い議論もあります。以下で後者は評価しつつも、批判的なニュアンスもこめられています :

How does deep residual learning work?
Microsoft Wins ImageNet 2015 through Feedforward LSTM without Gates

以下は何故 Residual なのかという説明があります :

Why is Deep Residual Learning called that way?

この説明は短いので粗く翻訳しておきます :

【質問】
何故 Deep Residual Lerning はそのように呼称されるのでしょう?

F(X)=H(X)-X を学習することの本質は何でしょう?
フィッシャー・ベクトル (Fischer vectors) や他の residual テクニックとの関係は?
その関係がそこから名をとってこのテクニックに命名するに十分に本質的なのは何故でしょう?

【回答】
深層 Convolutional ネットワークを解析し始めた時、直感に反して、より深いネットワークはより少ないエラーを持つわけではないことを発見しました。事実、追加層は恒等写像であるにもかかわらず、エラーはより浅いネットワークよりも大きいです。これは奇妙なことです、何故なら全ての追加層が恒等層であるならば、ネットワークは少なくとも基となったネットワークと同程度の性能は保持すべきです。この問題は、バッチ正規化で効果的に取り組まれてきた勾配消失問題とは異なっていました。

この奇妙な挙動をガイド的な手がかりとして、特徴マッピングを学習するために、residual を学習して元の特徴ベクトルを追加することによりネットワークをトレーニングすることを決めました。こうして、residual が 0 だとしてもネットワークは恒等写像を学習します。residual は H(x) = F(x) – x によって与えられます、ここで x は画像で F(x) は通常ネットワークが学習するマッピング(写像)です。

この大きなアイデアは、もし AlexNet, VGG あるいは GoogLeNet のような成功したネットワークがあれば、そしてそれに更なる多くの層を追加したならば、後の層で基本的な恒等写像を学習することが今や可能になります。その結果、少なくとも元のネットワークと同程度には性能が出ます。この residual 公式化 (formulation) はそれを可能にします。

結果、1000 層以上を持つネットワークをトレーニングすることが今や可能となり、そして追加された深さは認識タスクにおいてより良い性能を提供する役割を果たします。

ResNet の TensorFlow 実装とトレーニング

cifar100_residual上記の abstract によればオリジナル・モデルは 152 層 – VGG の 8 倍の深さがあるわけですが、TensorFlow による実装は実は簡単です。

サンプルを流用することもできますし、各種ビルディング・ブロックも用意されています。但しビルディング・ブロックで構築した場合には右図の TensorBoard によるモデル・グラフ画像のようにブロックが積層されていることしか分かりませんが。

トレーニングは取り敢えず 200 epochs 回してみました。
その結果が下図です。左が損失グラフで、右がテストセットに対する精度です。
精度は約 50 % が獲得できています。この数字は必ずしも悪いわけではありません。
CIFAR-100 は決して易しい問題ではなく、公式記録では 76 % 程度が最高で 55 % もあればベスト 30 に入ります。

cifar100_loss2

cifar100_acc_test2

以上

Keras : データセット

Keras : Datasets(翻訳/要約)

* 本ページは、Keras 本家サイトの Keras : Datasets の簡単な要約です。

 

CIFAR10 小画像分類

keras.datasets.cifar10

10 カテゴリーにラベルづけられた、50,000 32×32 カラー訓練画像のデータセット、
そして 10,000 テスト画像。

使用方法:

(X_train, y_train), (X_test, y_test) = cifar10.load_data()

戻り値:

  • 2 タブル:
    • X_train, X_test: shape (nb_samples, 3, 32, 32) の RGB 画像データの uint8 配列。
    • y_train, y_test: shape (nb_samples,) のカテゴリー・ラベル(range 0-9 の整数値)の uint8 配列。
 

CIFAR100 小画像分類

keras.datasets.cifar100

100 カテゴリーにラベルづけられた、50,000 32×32 カラー訓練画像のデータセット、
そして 10,000 テスト画像。

使用方法:

(X_train, y_train), (X_test, y_test) = cifar100.load_data(label_mode=’fine’)

戻り値:

  • 2 タブル:
    • X_train, X_test: shape (nb_samples, 3, 32, 32) の RGB 画像データの uint8 配列。
    • y_train, y_test: shape (nb_samples,) のカテゴリー・ラベルの uint8 配列。

引数:

  • label_mode: “fine” または “coarse”.
 

MNIST 手書き数字のデータセット

keras.datasets.mnist

10 数字の 60,000 28×28 グレースケール画像のデータセット、10,000 画像のテストセット添付。

使用方法:

(X_train, y_train), (X_test, y_test) = mnist.load_data()

戻り値:

  • 2 タブル:
    • X_train, X_test: shape (nb_samples, 28, 28) のグレースケール画像データの uint8 配列。
    • y_train, y_test: shape (nb_samples,) の数字ラベル(range 0-9 の整数値)の uint8 配列。

引数:

  • path: if you do have the index file locally (at ‘~/.keras/datasets/’ + path),
    if will be downloaded to this location (in cPickle format).

以上

AI導入支援 #2 ウェビナー

スモールスタートを可能としたAI導入支援   Vol.2
[無料 WEB セミナー] [詳細]
「画像認識 AI PoC スターターパック」の紹介
既に AI 技術を実ビジネスで活用し、成果を上げている日本企業も多く存在しており、競争優位なビジネスを展開しております。
しかしながら AI を導入したくとも PoC (概念実証) だけでも高額な費用がかかり取組めていない企業も少なくないようです。A I導入時には欠かせない PoC を手軽にしかも短期間で認知度を確認可能とするサービの紹介と共に、AI 技術の特性と具体的な導入プロセスに加え運用時のポイントについても解説いたします。
日時:2021年10月13日(水)
会場:WEBセミナー
共催:クラスキャット、日本FLOW(株)
後援:働き方改革推進コンソーシアム
参加費: 無料 (事前登録制)
人工知能開発支援
◆ クラスキャットは 人工知能研究開発支援 サービスを提供しています :
  • テクニカルコンサルティングサービス
  • 実証実験 (プロトタイプ構築)
  • アプリケーションへの実装
  • 人工知能研修サービス
◆ お問合せ先 ◆
(株)クラスキャット
セールス・インフォメーション
E-Mail:sales-info@classcat.com