モデル - みる会図書館


検索対象: TensorFlowはじめました 3
21件見つかりました。

1. TensorFlowはじめました 3

FLAGS. image_dir if FLAGS. output—dir is None \ output_dir else FLAGS . output_dir evaI(FLAGS . train—path, tist(file—list) , output_dir, model . INPUT_ 工 MAGE) name tf. app. run ( ) 学習済みモデルを検証画像 ( 学習に使ったデータセットに含めていない画像 ) に適用した結 パスは [ ディレクトリ ]/modet. ckpt-l@@@@@ となります。 たとえば、 model. ckpt ー 1@@@@@. index というファイルを読み込む場合、指定するファイル ません。また、その際はピリオド (. ) 以降は除いて指定する必要があります。 「学習・訓練で保存したファイルのパス」にはファイルを指定します。ディレクトリではあり -train-path [ 学習・訓練で保存したファイルのパス ] -output-dir [ 結果を出力するディレクトリ ] \ -image—dir [ 画像ファイルがあるディレクトリ ] \ —tfrecords_dir [ 学習データを出力したティレクトリ ] \ $ python eval—ssd . py \ リスト 2.14 のプログラムは、次のように実行します。 算した後、正規化された座標を実際の値に変換します。 モデルの出力は b 。 x の座標とからの相対位置 (offset) なので、 b 。 x そのものの座標から再計 関数 _write-regions は、モデルの出力を画像上にプロットします。 ドを作成してから、モデルの出力をそれぞれ対応する b 。 x に割り当てます。 関数 _create-boxes は、モデルの出力と同じ形 (modet. OUTPUT-SHAPES で定義 ) のグリッ で実行します。得られる結果が、確信度と座標を含むグリッドです。 学習済みモデルによる推論は、 base_model.prepare_layers と modet . output_layers を介して行います。 計算グラフに画像データに対する画像データの入力は、プレースホルダー image_placeholder とバイトデータに変換します。これらの処理は Pi Ⅱ ow と NumPy で行います。 関数 _load-image は、画像をグレースケール ( 1 チャンネル ) で読み込み、リサイズしたあ 第 2 章グリッドベースの物体検出 果が、図 2.12 です。 52

2. TensorFlowはじめました 3

現在は YOLO (You On ツ Look Once)l や SSD (SingIe Shot MuItiBox Detector) と いった手法が発表されていて、検出と分類を 1 つのネットワークで行うことができます。 本書では、 TensorFlow を使ってイラスト画像から顔を検出する機械学習のモデルを作成し モデルは、次の手順で作成します。 0 4 . 検証 3 . 学習 データセットの作成 モデルの定義 2 . 1 . リングを経て [ 21 , 21 , 256 ] の中間結果を返します。 output_tayers は、 prepare_layers prepare-layers は、縦横 192PX (INPUT-IMAGE で定義 ) の画像を入力すると、畳み込みとプー を構築します。 リスト 2.1 の prepare_layers と output_layers は、本書で使う物体検出のモデル ( 図 2.2 ) 2.2 モデルの定義 で得た中間結果を元に [ 21 , 21 , 5 ] を出力します。 図 2.2 : モテル構造 ReLU ReLU ReLU ReLU 2X2 stnde 2 ReLlJ 3X3X256 conv conv 2X2 3X3X64 3X3X64 stride 2 リスト 2.1 : tfbook_modeI/modelO. py nmport tensorftow as 'modet@' NAME NUM_CLASSES 1 conv 3X3X128 3X3X128 conv tf INPUT_IMAGE OUTPUT_SHAPES [ 21 , 21 ] , 192 ReLU 3X3X256 第 2 章 Sigmoid conv 21X21X5 conv 1XIX4 Tanh グリッドベースの物体検出 23

3. TensorFlowはじめました 3

図 2.11 : 誤差の変化 グリッドベースの物体検出 0.0040 0.0035 0.0030 0.0025 0.0020 0.0015 0.0010 0.0005 0 modelO be 凵 055 20000 0.00008 0.00007 0.00006 0.00005 0.00004 0.00003 0.00002 0.00001 0 20000 modelO IOC b55 60000 2 つの誤差は、概ね順調に下がっているように見えます。特に座標の誤差 (model@-toc ユ oss) は、確信度誤差 (modet@_label-loss) と比較して誤差が小さく、ステップ数を重ねるにつ れて下がっています。 次に、この学習済みモデルを使って、実際にイラスト画像から顔領域を検出します。 2.5 検証 リスト 2.14 は、画像を学習済みモデルに入力して結果を出力するプログラムです。 リスト 2.14 : eval_ssd. py import json nmport OS import numpy as np import tensorftow as tf from PIL import lmage, ImageDraw import box—util from tfbook_model import model@ as base—model # 使用するモデル from tfbook—model import model@ as model tf. app . ftags . FLAGS FLAGS tf. app. flags . DEF 工 NE—string('image_dir' , None, " 処理対象のディレクトリ " ) tf. app. flags. DEFINE—string('output—dir' , None, " 出力するディレクトリ " ) tf. app . flags . DEFINE—string('train_path' None, " 訓練結果のファイルバス " ) 48 第 2 章

4. TensorFlowはじめました 3

lower=@ . 2) return distorted image 関数 load_ssd-dataset は、 TFRecord 形式のファイルを読み込んだあと、その後の処理で 取り扱い易いように Tens 。 r の形を変換 (tf. reshape) します。また、画像のリサイズ、グレー スケールへの変換、標準化 (standardization) など必要な処理をします。 誤差関数の定義 誤差関数 (Loss Function) は、入力をモデルの出力が期待する出力 ( 学習データ ) とどの 程度離れているかを算出します。 誤差関数には、 MSE (Mean Squared Error: 平均ニ乗誤差 ) を使います ( リスト 2.11) 。 リスト 2.11 : train_ssd. py def _loss(logits, box_labets , boxes) : logits—label logits[: logits—loc logits[: : 4 ] tf. squared—difference(logits—labet, box—labels) tf. reduce—mean(labet—losses) tabet losses label loss tf. squared—difference(logits—loc, boxes) tf. reduce—mean(loc—tosses) loc_tosses 10C ー loss IOSS tabet_loss + loc_toss return IOSS モデルの出力 ( [ 21 , 21 , 5 ] ) は、座標と確信度を含んでいます。そこでまず、スライスを 使って @ー 4 までを座標、 4 より上の要素を確信度として切り出します。次に、それぞれについ て誤差を計算した後、 2 つを加算することで誤差を求めます。 最適化アルゴリズムの設定 最適化アルゴリズムは、誤差関数が算出した誤差をもとに、誤差が小さくなるようにモデル のパラメーターを更新します。 関数 _init_optimizer は、 AdamOptimizer を最適化アルゴリズムに設定します ( リスト 2.12 ) 。 第 2 章グリッドベースの物体検出 43

5. TensorFlowはじめました 3

目次 本書について・・ 本書の構成 前提知識 開発環境 検証環境・ ソフトウェアのノヾージョン・ サンプルコードの配布・サポート 表記関係について・・ 著作権について・・ 免責事項・ ライセンス・ 第 1 章 TensorFIow の基礎・ 1.1 TensorFlow とは・ 1.2 データフローグラフ・・ 1.3 テンソル (Tensor) 1.4 変数とプレースホルダー 1.5 演算子のオーバーロード・ 1.6 プロードキャスティング・・ 第 2 章グリッドベースの物体検出・ 2.1 物体検出とは・ 22 モデルの定義・ 2.3 データセットの作成 2.4 学習 ( 訓練 ) 2.5 検証・ 第 3 章物体認識奮闘記・・ 3.1 確信度と座標・・ 32 畳み込み層・・ 3.3 モデルの定義・ 3.4 データセットの再作成・ 1 1 1 っ朝 ワワ朝っ 0 8 0 8 ワワ朝ワ朝ワ朝 4 4 ・ 54 ・・ 54 冖 / 1 ワ朝 目次 2

6. TensorFlowはじめました 3

第 3 章物体認識奮闘記 第 2 章で作成したモデルは、期待した動作をしませんでした。 本章では、失敗の原因を探り、どのようにすれば期待通り動作するのか。その方法を探ります。 3.1 確信度と座標 第 2 章で定義したモデルは縦横 21 個、合計 441 の b 。 x で構成されるグリッドを出力します ( 図 それぞれの b 。 x は、入力画像の位置に対応して 5 つの値を含みます。物体が存在する確信度 (confidence) と、検出した物体の座標 (left, t 叩 , right, bottom) です。 3. l) 。 出 デ モ 0 _c 0 図 -Q confidence なぜ上手くいかないのかを考えたとき、原因として次の 2 つが挙げられます。 1 . 期待する b 。 x の確信度が高くなっていない 2 . box から正しい座標 (offset) が求められていない そこでまず、それぞれの b 。 x の確信度を確認します。 リスト 3.1 の関数 _write_confidence は、確信度 (label) が高い box を白くした画像を出 力します。 54 第 3 章物体認識奮闘記

7. TensorFlowはじめました 3

3.3 モテルの定義 [ 6 , 6 ] , [ 3 , 3 ] , [ 2 , 2 ] , 図 3.10 : モデル構造 21 x21 X256 conv 3X3X2 stride 2 conv 3X3X256 stride 2 conv 3X3X2 stride 2 conv 3X3X256 stride 2 SigmoidfTanh 21X21X5 11X11X5 6X6X5 。 1XIX5 conv stride 2 ロ 2X2X5 ロ 3X3X5 conv lxlx ( 4 + 1 ) リスト 3.2 の output_tayers は、モデルを構築します。 output ユ ayers は、 prepare ユ ayers で得た中間結果を繰り返し畳み込んで、各段階の特 徴マップから確信度と座標の組み合わせを出力します ( 図 3.10 ) 。出力するグリッドのサイズは 1 NUM_CLASSES NAME 'modell' import tensorflow as tf リスト 3.2 : tfbook_model/modell . py OUTPUT_SHAPES で定義しています。 工 NPUT 工 MAGE OUTPUT_SHAPES 1 ] , 11 ] , [ 21 , 21 ] , [ 1 , [ 11 , 192 第 3 章 物体認識奮闘記

8. TensorFlowはじめました 3

name リスト 2.10 は、 TFRecord 形式のデータセットを読み込むプログラムです。 うようにするには、モデルに画像を入力すると、顔の確信度と座標を出力するように「学習 ( 訓 モデルを定義しただけでは、期待するとおりの機能 ( 物体検出 ) は果たしません。目的に適 2.4 学習 ( 訓練 ) -image-size [ 画像をリサイズする大きさ ] -output—dir [TFRecord を出力するディレクトリ ] \ -base-dir [ 処理する対象データのディレクトリ ] \ $ python create—dataset ・ py \ リスト 2.9 のプログラムは、次のように実行します。 のとして含んでいるためです。 ともとのデータセットが画像分類のために作成したもので、顔と誤認識した領域を負例 (labet Annota ⅱ on を読み込んだあと labet が@ より大きい Region のみフィルターしているのは、も main(sys. argv) 学習は、次の手順で行います。 練 ) 」する必要があります。 4 . 学習の実行 3 . 最適化アルゴリズムの設定 2 . 誤差関数の定義 データセットの読み込み m a 1 n 1 . def —get—filelist(path) : import tensorflow as tf import OS リスト 2.10 : dataset 」 oader. py データセットの読み込み return [ ] if not os. path. isdir(path): 40 第 2 章 グリッドベースの物体検出

9. TensorFlowはじめました 3

リスト 2.12 : train_ssd. py def _init_optimizer(learning—rate) : return tf. train. AdamOptimizer(Iearning—rate=Iearning—rate) tf ・ app ・ flags tf ・ app ・ flags tf ・ app. flags tf ・ app ・ ftags tf ・ app . flags tf ・ app . flags リスト 2.13 は、これまで作成したプログラムを使ってモデルの学習を行います。 学習の実行 dataset_loader.load_ssd_dataset でデータセットを読み込み、 tf. train. shuffle ー batch を通してバッチサイズの数だけまとめます。 model-base. prepare-layers に与えて得た中間結果 ([batch-size, を、さらに model. output ユ ayers に与えて出力を得ます。 リスト 2.13 : train_ssd. py import OS import tensorftow as tf import numpy as np from tfbook_model import modet@ as model—base # 使用するモデル from tfbook_model import modet@ as modet 21 , 21 , 256 ] ) nmport FLAGS tf ・ app ・ dataset_loader tf. app . flags . FLAGS flags . DEF 工 NE . DEF 工 NE . DEFINE . DEFINE . DEFINE . DEFINE . DEF 工 NE string( 'tfrecords_di None, " 学習データを出力したディレクトリ " ) string('train_dir' . /train' " 学習結果のディレクトリ " ) 32 , 、ニバッチのサイズ " ) float( 'learning—rate' integer( 'batch_size integer('capacity' , integer( 'min—after—dequeue' 600 , ー 1 , " 学習するステップ数 " ) integer( 'max—step' , 44 第 2 章グリッドベースの物体検出

10. TensorFlowはじめました 3

with tf. Session() as sess: print(sess . run(result)) [ 6 7 8 9 ] 1 訓練・学習済のモデルを使った認識 ( 評価 ) を前提としています 2. 「オペレーション」というと何らかの操作に限定すると思われがちですが、 Tenso 「日 ow では、定数や変数も「値を出力するオペレーション」と考えられています 3. ただし ConvolutionaI Neural Netwo 「 k で処理する場合は tf. 月 0at32 に変換する必要があります 4. https.//www tensorflow org/programmers_guide/dims types 5. https.//docs.scipy.org/doc/numpy/user/basics.b「oadcasting.html 第 1 章 TensorFIow の基礎 21