2015-12-09 11 views
22

ディープラーニングは、少数のクラス(猫、犬、車、飛行機など)の分類のためのいくつかの大きなデータセットにうまく適用され、 SIFT、カラーヒストグラムなどの特徴を持つバッグ事前学習(Tensorflow)を使用した特徴の抽出CNN

しかし、このようなネットワークを訓練するには、クラスごとに多くのデータと多くの訓練時間が必要です。しかしながら、非常にしばしば、十分なデータがないか、畳み込みニューラルネットワークが、そのようなデバイスを設計し訓練し、訓練データを収集する時間を費やす前に、畳み込みニューラルネットワークがいかにうまくいくかを知りたい。

この特定のケースでは、最先端の出版物で使用されているベンチマークデータセットを使用してネットワークを構成し、訓練し、機能として持つ可能性のあるデータセットにネットワークを適用するのが理想的かもしれません抽出器。 1を訓練するための十分なデータがない場合

これは、1つは、SVMのような古典的な分類方法、などが特に

ロジスティック回帰、ニューラルネットワークに送り込むことができ、各画像のための機能のセットになりCNNは、CNNがいくつかのサンプルで訓練されたパイプラインを上回ることを期待しています。

私はテンソルフローチュートリアルを見ていましたが、彼らは常に明確なトレーニング/テストフェーズを持っているようです。私はあらかじめ設定されたCNNの特徴抽出子でピクルファイル(または同様のもの)を見つけることができませんでした。

私の質問は次のとおりです。事前に訓練されたネットワークが存在し、どこでそれらを見つけることができるか。あるいは、このアプローチは意味がありますか? CNN +ウエイトはどこで見つけることができますか?

編集 w.r.t. (:S)私は'DecodeJpeg:0''DecodeJpeg/contents:0'を使用してみましたし、異なる出力をチェック@ジョンさんのコメント

import cv2, requests, numpy 
import tensorflow.python.platform 
import tensorflow as tf 


response = requests.get('https://i.stack.imgur.com/LIW6C.jpg?s=328&g=1') 
data = numpy.asarray(bytearray(response.content), dtype=np.uint8) 
image = cv2.imdecode(data,-1) 

compression_worked, jpeg_data = cv2.imencode('.jpeg', image) 
if not compression_worked: 
    raise Exception("Failure when compressing image to jpeg format in opencv library") 
jpeg_data = jpeg_data.tostring() 

with open('./deep_learning_models/inception-v3/classify_image_graph_def.pb', 'rb') as graph_file: 
    graph_def = tf.GraphDef() 
    graph_def.ParseFromString(graph_file.read()) 
    tf.import_graph_def(graph_def, name='') 

with tf.Session() as sess: 
    softmax_tensor = sess.graph.get_tensor_by_name('pool_3:0') 

    arr0 = numpy.squeeze(sess.run(
     softmax_tensor, 
     {'DecodeJpeg:0': image} 
    )) 

    arr1 = numpy.squeeze(sess.run(
     softmax_tensor, 
     {'DecodeJpeg/contents:0': jpeg_data} 
    )) 

    print(numpy.abs(arr0 - arr1).max()) 

だから、最大絶対差が1.27649あり、そして一般的にはすべての要素が、特に平均ので、(異なりますarr0およびarr1の値は0〜0.5の間にある)。

また、'DecodeJpeg:0'にはnumpyの配列ではなくjpeg-stringが必要であると予想されますが、なぜ名前に 'Jpeg'が含まれているのでしょうか。 @john:あなたのコメントについてどうすればいいですか?

私は訓練されたニューラルネットワークが決定論的である(しかし、ほとんどが混乱している)と期待しているので、何が何であるかはわかりません。

+0

ラバーダック:「CNNトレーニングを受けたImageNet」でgoogleingしたとき、私はこれを発見しました:http://www.vlfeat.org/matconvnet/pretrained/ – Herbert

+1

私のラップトップでこのネットワークをコンパイルして実行することができました。画像を識別/分類するためのウェブカメラgithub。com/sermanet/OverFeat –

答えて

18

TensorFlowチームは最近、ImageNetデータセットで訓練された深いCNNをリリースしました。 hereからデータ(モデルグラフと訓練された重みを含む)をフェッチするスクリプトをダウンロードできます。関連するImage Recognition tutorialにはモデルの詳細があります。

次のトレーニングステップでは現在のモデルを特別にパッケージ化していませんが、モデルの一部と独自のネットワークでトレーニングされた重みを再利用するためにスクリプトを修正することができます。

+0

これはうまくいくように思えますが、私はそれを受け入れてくれます:) classify_imageは、結果がラベルになることを示唆しています。私のラベルはImageNetのラベルではないので、フィーチャーベクターが必要です。 – Herbert

+4

これらのコメントをログとして使用する: 'softmax_tensor = sess.graph.get_tensor_by_name( 'softmax:0')'の代わりに 'softmax_tensor = sess.graph.get_tensor_by_name( 'pool_3:0')'を使用して機能を取得すると仮定します。 – Herbert

+0

私は、この特定のネットワークの 'feed_dict'が' 'DecodeJpeg/contents:0 ''(これは 'classify_image_graph_def.pb'ファイルで定義されています)を持っていることに気付きました。可能なfeed_dict設定可能ですか?そこに画像を入れてnumpy配列を投げることもできますか? – Herbert

関連する問題