質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.36%

  • 機械学習

    268questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

tensorflow object detection API 独自データの学習について

解決済

回答 1

投稿 2017/11/27 17:47 ・編集 2017/11/29 22:14

  • 評価
  • クリップ 0
  • VIEW 111

kuzio

score 4

実現したいこと

現在 github 上にある"tensorflow object detection api" を利用して独自のデータセットを用意して学習をさせていと思っています.
tensorflow object detection api
object_detection/train.py を実行するために前処理を行いました.
youtubeでのマカロニチーズを検出する動画を参考にさせていただきました.
TensorFlow Object Detection API Tutorial p.1

問題点

用意したものは model/research/object_detection に移動しました.

object_detection
-images
--images.png
--images.xml
--test
---images.png
---images.xml
--train
---images.png
---images.xml
-data
--test.record
--train.record
-training
--ssd_mobilenet_v1_pets.config
-ssd_mobilenet_v1_coco_11_06_2017
--frozen_inference_graph.pb
--graph.pbtxt
--model.ckpt.data-00000-of-00001
--model.ckpt.index
--model.ckpt.meta

上記のものを移動しました.
imagesの中に入っているimages.png は複数の画像が入っています.

python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/ssd_mobilenet_v1_pets.config


上記のコマンドで学習を始めました.
その後

INFO:tensorflow:depth of additional conv before box predictor: 0
INFO:tensorflow:depth of additional conv before box predictor: 0
INFO:tensorflow:depth of additional conv before box predictor: 0
INFO:tensorflow:depth of additional conv before box predictor: 0
INFO:tensorflow:depth of additional conv before box predictor: 0
INFO:tensorflow:Summary name /clone_loss is illegal;usingclone_loss instead.


と表示され,tensorflow に関する情報が流れ

INFO:tensorflow:Starting Session.
INFO:tensorflow:Saving checkpoint to path training/model.ckpt
INFO:tensorflow:Starting Queues.
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:Saving checkpoint to path training/model.ckpt
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:global_step/sec: 0
INFO:tensorflow:Saving checkpoint to path training/model.ckpt
INFO:tensorflow:Saving checkpoint to path training/model.ckpt
INFO:tensorflow:Saving checkpoint to path training/model.ckpt
………


上記のようなものが表示されて学習が終了しませんでした.
メッセージからも正しく学習が開始されているように見えませんでした.
batch_size:24
num_terms:20000

"INFO:tensorflow:global_step/sec: 0" が表示されるまでにおよそ1分ほどかかっています. 

以下は"ssd_mobilenet_v1_pets.config"の内容です.

# SSD with Mobilenet v1, configured for Oxford-IIIT Pets Dataset.
# Users should configure the fine_tune_checkpoint field in the train config as
# well as the label_map_path and input_path fields in the train_input_reader and
# eval_input_reader. Search for "PATH_TO_BE_CONFIGURED" to find the fields that
# should be configured.

model {
  ssd {
    num_classes: 1
    box_coder {
      faster_rcnn_box_coder {
        y_scale: 10.0
        x_scale: 10.0
        height_scale: 5.0
        width_scale: 5.0
      }
    }
    matcher {
      argmax_matcher {
        matched_threshold: 0.5
        unmatched_threshold: 0.5
        ignore_thresholds: false
        negatives_lower_than_unmatched: true
        force_match_for_each_row: true
      }
    }
    similarity_calculator {
      iou_similarity {
      }
    }
    anchor_generator {
      ssd_anchor_generator {
        num_layers: 6
        min_scale: 0.2
        max_scale: 0.95
        aspect_ratios: 1.0
        aspect_ratios: 2.0
        aspect_ratios: 0.5
        aspect_ratios: 3.0
        aspect_ratios: 0.3333
      }
    }
    image_resizer {
      fixed_shape_resizer {
        height: 300
        width: 300
      }
    }
    box_predictor {
      convolutional_box_predictor {
        min_depth: 0
        max_depth: 0
        num_layers_before_predictor: 0
        use_dropout: false
        dropout_keep_probability: 0.8
        kernel_size: 1
        box_code_size: 4
        apply_sigmoid_to_scores: false
        conv_hyperparams {
          activation: RELU_6,
          regularizer {
            l2_regularizer {
              weight: 0.00004
            }
          }
          initializer {
            truncated_normal_initializer {
              stddev: 0.03
              mean: 0.0
            }
          }
          batch_norm {
            train: true,
            scale: true,
            center: true,
            decay: 0.9997,
            epsilon: 0.001,
          }
        }
      }
    }
    feature_extractor {
      type: 'ssd_mobilenet_v1'
      min_depth: 16
      depth_multiplier: 1.0
      conv_hyperparams {
        activation: RELU_6,
        regularizer {
          l2_regularizer {
            weight: 0.00004
          }
        }
        initializer {
          truncated_normal_initializer {
            stddev: 0.03
            mean: 0.0
          }
        }
        batch_norm {
          train: true,
          scale: true,
          center: true,
          decay: 0.9997,
          epsilon: 0.001,
        }
      }
    }
    loss {
      classification_loss {
        weighted_sigmoid {
          anchorwise_output: true
        }
      }
      localization_loss {
        weighted_smooth_l1 {
          anchorwise_output: true
        }
      }
      hard_example_miner {
        num_hard_examples: 3000
        iou_threshold: 0.99
        loss_type: CLASSIFICATION
        max_negatives_per_positive: 3
        min_negatives_per_image: 0
      }
      classification_weight: 1.0
      localization_weight: 1.0
    }
    normalize_loss_by_num_matches: true
    post_processing {
      batch_non_max_suppression {
        score_threshold: 1e-8
        iou_threshold: 0.6
        max_detections_per_class: 100
        max_total_detections: 100
      }
      score_converter: SIGMOID
    }
  }
}

train_config: {
  batch_size: 24
  optimizer {
    rms_prop_optimizer: {
      learning_rate: {
        exponential_decay_learning_rate {
          initial_learning_rate: 0.004
          decay_steps: 800720
          decay_factor: 0.95
        }
      }
      momentum_optimizer_value: 0.9
      decay: 0.9
      epsilon: 1.0
    }
  }
  fine_tune_checkpoint: "ssd_mobilenet_v1_coco_11_06_2017/model.ckpt"
  from_detection_checkpoint: true
  # Note: The below line limits the training process to 200K steps, which we
  # empirically found to be sufficient enough to train the pets dataset. This
  # effectively bypasses the learning rate schedule (the learning rate will
  # never decay). Remove the below line to train indefinitely.
  num_steps: 200000
  data_augmentation_options {
    random_horizontal_flip {
    }
  }
  data_augmentation_options {
    ssd_random_crop {
    }
  }
}

train_input_reader: {
  tf_record_input_reader {
    input_path: "data/train.record"
  }
  label_map_path: "data/object-detection.pbtxt"
}

eval_config: {
  num_examples: 2000
  # Note: The below line limits the evaluation process to 10 evaluations.
  # Remove the below line to evaluate indefinitely.
  max_evals: 10
}

eval_input_reader: {
  tf_record_input_reader {
    input_path: "data/test.record"
  }
  label_map_path: "data/object-detection.pbtxt"
  shuffle: false
  num_readers: 1
}

環境

OS : windows8
プロセッサ : Intel(R)Core(TM)i5-4590 CPU @ 3.30GHz
RAM : 8.00GB
64bit オペレーティングシステム


参考にさせていただいたyoutubeの動画ではUbuntuを利用していたため,ここまでにも動画と違いうところはありました.
現在解決の糸口が見つからず困っています.
少しでも何かわかる方は教えていただきたいです.
よろしくお願いいたします.

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

まず、Saving checkpoint to path training/model.ckptがあるので、何かしらの重みが吐き出されています。
重みが出力されるということは、少なくとも指示されたことはやったと、プログラムは認識しているようです。
どうして正しく学習が開始されなかったと思われるのでしょうか。

global_step/sec: 0なので、一秒あたりに0ステップ学習できたという意味ですね。
修正前:global_step/sec: 0とステップあたりの時間が無に等しいのはデータが1枚しかないせいでしょうか。 例えば画像データを大量に追加しても時間は0のまま変わりませんか。

他に考慮することは学習ステップ数の指定ですが、ssd_mobilenet_v1_pets.configにて正しく指定されていますか?

特にエラーが見受けられないので、学習できていないとすれば学習パラメータ(学習ステップ数、バッチサイズなど)の設定が悪いような気がします。

投稿 2017/11/27 19:32

編集 2017/11/28 17:21

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/28 17:08

    ご回答及びアドバイス有難うございます.
    config file についてもう少し詳しく見てみようと思います.

    キャンセル

  • 2017/11/28 17:49

    動画を拝見しました。
    >tensorflow に関する情報が流れ
    の部分では確かに学習についてまだ表示していないですね。
    その続きはどうなっていますか。

    何度も
    >INFO:tensorflow:global_step/sec: 0
    が表示されているようですが、リトライをして1分経つごとに新しい行が出力されていますか。それとも、重複して出力されているだけですか。

    CPUしかない場合、計算に非常に時間がかかることがあります。
    また、バッチサイズ次第では8GBのメモリに乗らない可能性もあります。

    キャンセル

  • 2017/11/29 17:57

    INFO:tensorflow:global_step/sec: 0 が表示されるたびに1分ほどかかっています.
    bach_sizeを変更してやってみましたが,結果は変わりませんでした.
    また,bach_sizeを変更するとINFO:tensorflow:global_step/sec: 0 の表示されるスピードが違っているような気がしました.

    キャンセル

  • 2017/11/29 18:50

    一般にbatch_sizeを大きくすると1epochあたりの時間が短縮されます。

    何かをトライして、その結果に満足できなかったせいで、再試行しているように思えます。
    本当はそのまま学習が続くはずなのに、初期化を何度も行っているような振る舞いですね。

    INFO:tensorflow:Saving checkpoint to path training/model.ckpt
    INFO:tensorflow:Saving checkpoint to path training/model.ckpt
    INFO:tensorflow:Saving checkpoint to path training/model.ckpt
    ………
    以降も同じ出力の繰り返しですか?

    キャンセル

  • 2017/11/29 19:03

    INFO:tensorflow:global_step/sec: 0 が十回繰り返された後は
    ずっと INFO:tensorflow:Saving checkpoint to path training/model.ckpt が続いています.
    num_stepを変更しても変わりません.
    また training/model.ckpt は出力されていませんでした.

    キャンセル

  • 2017/11/29 21:29

    今手元で試してみましたが、チュートリアル通りにやると正常に学習が開始されました。
    差し支えがなければ、ssd_mobilenet_v1_pets.configの内容を追記していただけませんか。

    キャンセル

  • 2017/11/29 22:26

    本文に ssd_mobilenet_v1_pets.config の内容を記載しました.
    わざわざチュートリアルまで試していただき有難うございます.
    他に一つ気になる点があるのですが,158行目に fine_tune_checkpoint があり,ssd_mobilenet_v1_coco_11_06_2017/model.ckpt を参照しているのですが,ssd_mobilenet_v1_coco_11_06_2017 には model.ckpt は存在していません.
    動画でも ssd_mobilenet_v1_coco_11_06_2017 にはmodel.ckpt はなかったのですが,この path を参照していました.
    これは大丈夫でしょうか?
    何かわかることがあればよろしくお願いいたします.

    キャンセル

  • 2017/11/29 22:33

    まず、設定ファイルの中にあるパスをすべて絶対パスで指定してみてください。全部で5ヶ所です。
    さらにmodel.ckpt.data-00000-of-00001をコピーしてmodel.ckptというファイルにしてみてください。
    それで実行できるようになるでしょうか。

    キャンセル

  • 2017/12/01 01:35

    有難うございます.
    指定された5箇所のpathを絶対パスにすることで,無事学習を始めることができました.
    実際にそのあとに学習したモデルを使い,物体を検知することはできませんでした(恐らくtraining data が少なく学習回数も少なかった…?)が学習時のloss を見る限り学習はできていそうです.
    ここまでアドバイスをいただいた事,誠に感謝しております.
    どうも有難うございました!

    キャンセル

  • 2017/12/01 01:43

    こちらこそ。
    うまくいってよかったです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.36%

関連した質問

同じタグがついた質問を見る

  • 機械学習

    268questions

    機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。