AI coordinator

人工知能 & ロボティクス

サイト運営者

© AI coordinator All rights reserved.

201710/9

Fine-tuningを使って少ない画像データから効率よく学習モデルを作成する方法

VGG16モデルを使ったFine-tuning

近々、人を認識させる学習モデルを真面目に開発する機会が発生したため、以前からチャレンジしてみたかったFine-tuningに挑戦してみました。

筆者のように趣味でDeepLearningをやっている人にとって、大量の学習データを集めることは非常に困難です。

そんな時に使えるのが、Fine-tuningと言う学習方法です。

Fine-tuningとは既存の学習モデルを流用する学習方法で、少ない画像データからでも精度が高い学習モデルを作成することができるようになります。

大量の学習データを集められない時に重宝する手法ですね。

 

今回は1000クラス学習されているVGG16モデルを流用します。

VGG16モデルは2014年のILSVRCで提案された畳み込み層13層とフル結合層3層から成るCNNモデルです。

 

しかも、このVGG16モデルはKerasのモジュールにも対応しているため、簡単に流用して学習することができます。

これにより、1から学習モデルを作成させる必要がなくなり、今まで以上に効率よく学習モデルを作成することが可能となります。

 

今回はこのVGG16を流用したFine-tuningについて紹介したいと思います。

 

参考にさせて頂いたサイトの紹介

情報提供ありがとうございます。

 

開発環境

macOS Sierra

Anaconda3-4.2.0-MacOSX-x86_64

python 3.5.2

opencv3 3.1.0

tensorflow 1.1.0

 

まずはVGG16を試してみる

まずは、高機能学習モデルVGG16を試してみました。

冒頭でも説明しましたがVGG16はKerasのモジュールとしても対応しているため、事前に学習モデルをダウンロードせずとも、ソースを実行するだけでダウンロードが始まります。

初回実行時はダウンロードに時間がかかりますが、2回目以降は瞬時に動きます。

 

以下、ソースコードです。

以下、使用した画像です。

実行結果は・・・

素晴らしいです。

チワワと犬の種類まで判別してくれました。

噂通りの性能ですね。

 

このモデルそのままでも色々なことに使えそうですね。

 

VGG16を流用したFine-tuningに挑戦

それでは本題です。

VGG16の性能の高さを知ったところで、早速このVGG16を流用したFine-tuningにチャレンジしたいと思います。

参考元サイトのソースコードをほとんど流用させて頂きました。

 

今回は人物画像を学習させたいと考えています。

ただし、悲しいことにVGG16は人物を学習させたモデルではありません。

Fine-tuningの注意点として元々学習で使われた画像データと、今回新たに分類しようとしている画像が似ていない場合は、その特徴モデルがそのまま使えない可能性があります。

これメッチャ重要です。

Fine-tuningは似たような画像を準備しなければ、あまり精度が出ないと言うことですね。

そのため人物画像の場合、VGG16を使ったFine-tuningでどこまで精度が出るかわかりませんが、今回はFine-tuningのやり方を学ぶことを目的としているので精度が低くても良しとします。

 

以下ソースコードです。

画像を水増しするImageDataGeneratorも組み込んであります。

今回は、子供、成人男性、成人女性、の3クラスでFine-tuningしています。

それぞれの画像枚数は約1000枚です。

以下のように学習データとテストデータの枚数を指定する必要があります。

頑張ってデータを集めましょう。

 

畳み込み層は15層目まではそのまま固定し、以降の畳み込み層を学習するように設定します。

 

以下、学習結果です。

epoch = 20で止めました。

それ以上はval_lossが上昇し過学習となるので・・・

それでもVal_loss = 0.3060は1から学習モデルを作成することを考えると、中々の精度かと思います。

 

Fine-tuningの結果は

以下の画像でテストしてみました。

 

 

 

う〜ん、微妙。

 

やはりVGG16モデルで、人物画像のFine-tuningは精度が高くならない感じですね。

それともやり方が悪いのか。

とはいえ、Fine-tuningがどんなものなのか知ることができたので良しとします。

 

次回は別の画像でチャレンジしてみたいと思います。

 

GPU欲しいっす。

 

それではまた。

 


その他の物体検出記事はこちらから

関連記事

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

リアルタイム映像からの美人女優検出

リアルタイム映像から特定の人物検出 以前からやってみたかった映像からの特定人物検出にチャレンジしてみたので、その内容の紹介です。 S…

20176/1

jupyter notebookの便利な使い方や起動しなくなった時の対処法

便利なショートカットキー jupyter notebookを便利に使用する上で、最低限知っておけば良いショートカットキーを紹介します。 …

20178/30

Fashion-MNISTをCNNで学習させて精度を上げてみた

Fashion-MNISTをCNNモデルで学習 前回の記事「TensorFlowでFashion-MNISTを試してみた」で学習モデルを作…

20173/11

Pepperコントローラー for Python

PythonでPepperコントローラーを作成 Pepperを簡単に動かせるPepper用コントローラーをPythonで作成してみましょう…

20177/25

カメラ映像から動く物体の輪郭検出が簡単にできた話

OpenCVを使って動く物体の輪郭検出をやってみた 今更ながらにOpenCVの凄さを実感しました。 まさか物体の輪郭検出までできると…

対話ができる?kerasで英文を自動生成するLSTMモデルの作成方法

英文だけど、LSTMモデルを作成して文章を自動生成できるか試してみた 文章を自動生成できるようになれば、AIも大きく進化するなぁ〜なんて日…

20176/21

カメラ映像からの物体検出

PC内蔵カメラから自分の顔の物体検出をやってみる ほとんど筆者の備忘録的な内容になります。 色々な映像や画像からの物体検出をチャレン…

Watson NLCに学習データを投入できるGUIの開発方法

Watson NLCに学習データを投入できる画面をPythonで実装する方法 Watson NLCに学習データを投入できる簡単な画面を開発…

20177/22

Pepperのカメラ映像からリアルタイムで物体検出する方法

Pepperのカメラからリアルタイムに物体検出してみる 以前からチャレンジしてみたかったPepperに搭載されているカメラ映像からの物体検…

自然言語解析の形態素解析 janome を使ってみよう

形態素解析 janome とは 簡単に説明しますと、自然言語の文章を意味を持つ最長単位に分割し、品詞を判別することができるライブラリです。…

ページ上部へ戻る