Caffe(八)日常問題解析


  • ログ出力を閉じるコマンドラインがコマンドを実行する前に次のコマンドを呼び出す.
    GLOG_minloglevel=X  ./your_app
    Xはterminalに印刷する必要があるログのレベルを表し、以下は各レベルのコード詳細、
    0 - debug
    1 - info (still a LOT of outputs)
    2 - warnings
    3 - errors
  • である.
  • memory_data_layerの呼び出しと改善今回はC++のcaffeプログラムを書き始めたばかりで、少し迷って、ネットで探してみましたが、意外にも私と同じ仕事をした人がいて、他の人のモデルを手に入れてからC++を書いてテストをしていました.このように私は感動しました.次はこの友达のリンクで、classificationを研究しました.cppはcaffeモデルの使い方を知っていて、もともとこれはすぐにできると思っていました.ひょうたんでひょうたんを描くだけでOKだったので、後で発見したのはそんなに簡単ではありません.最初はすべてのdatalayerが同じだと思っていましたが、imagedatalayer、memorydatalayerなど、そしてそれぞれのdatalayerの操作方法が違うことに気づきました.今回のプロジェクトはmemorydatalayerで、久しぶりに次のリンクを見つけました.Caffe:C++を使用して任意の画像の特徴を抽出する(メモリからデータを読み取る)リンクでmemorydatalayerの操作の一歩一歩がはっきりしていて、楽しかったです.その後、最も重要な関数は画像データをmemorydatalayerのbottom blobに置くことです.しかし、最も気持ち悪いのは、この関数が8ビットの単一チャネルの符号なしデータだけを受け入れ、64ビットの符号付きデータを受け入れないことです.これは標準化されたデータがありません.方法はcaffeに入れて実行します.この関数の例は以下の通りです.
    m_layer->AddMatVector(dv, label); //       ,    MemoryData 
    後、私はこの関数が8ビットのシンボルレス単一チャネルデータしか受け入れられないことを発見しました.それはその前にcheckがあったからです.入力したデータが8ビットのシンボルレス単一チャネルデータでなければならないことを保証します.このcheckプログラムをスキップすれば走ることができます.これは実はpythonがmemorydatalayerを操作しているときの操作で、pythonの操作のソースコードと解析については、下のリンクを見ることができます.python caffe memorydatalayerの操作は上のリンクの啓発を経て、私は直接上記のcheckの判断を迂回して、データをメモリに入れて、しばらくデバッグした後に通過して、興奮して、
  • data_transformer.cppこれは、mirror、scaleなどのデータの前処理操作を行います.のdata_transformer.cpp
  • solverパラメータ説明
    test_iter: 1000 //1000        ,       ,         ,    ,           ,  
                    //          batch_size,      :test_iter =       /batch_size  
    test_interval: 1000 //    ,    1000 ,      
    max_iter: 12000 //      
    layer {
      name: "accuracy"
      type: "Accuracy"
      bottom: "fc8"
      bottom: "label"
      top: "accuracy"
      include {
        phase: TEST
      }
    }
    accuracy層は、最後の全接続層(ニューロン個数=カテゴリ数であるがactivation functionには加入していない)の出力とデータセットのlabelsとを比較することによって得られ、AccuracyLayer内部で「fc 8の出力によってデータセットの予測labelsが得られる」(最大値のidnexがサンプルのカテゴリ)では、入力したデータセットの真のlebelsと比較してaccurayの計算を実現!最後の全接続層(fc 8)の出力値は区間[−∞,∞]にあり、確率値fc 8の後に続くSoftmaxWithLoss層が行う作業は2段階ではありません
  • 対fc 8の出力計算ソフトmax function(結果は確率値)
  • 求めた確率値を利用してLoss値
  • を計算する.