Caffe画像分類では訓練モデルの精度が高く,1枚の画像テストでは精度が低い

2044 ワード

長い時間の画像分類をして、caffeで訓練したモデルは正解率が高いが、1枚の画像でテスト識別を行うと、効果が特に悪く、検出されたのはほとんど同じ種類で、いくつかの資料を調べて、やっと解決策を見つけた.
理由1:トレーニングにGPUを使用した場合、テスト時にもGPUを使用することに注意する
理由2:テスト画像の読み込み形式に注意する.
私はここで間違って、参考のブログhttps://blog.csdn.net/u013841196/article/details/72799680
画像をチャネル変換するときによく使われるコードは以下の通りです.
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))  #  , (530,800,3)   (3,530,800)
transformer.set_mean('data', mu) #mu 
transformer.set_raw_scale('data', 255)  # rescale from [0, 1] to [0, 255]
transformer.set_channel_swap('data', (2, 1, 0))  # swap channels from RGB to BGR

(1)caffeを用いる.io.load_イメージ方式で画像を読み取る場合:
image = caffe.io.load_image(image_file) # 

caffeを使用する.io.load_イメージ()はRGB形式と0~1(float)
認識を行う前にtransformerにtransformerを設定.set_raw_scale('data',255)(0~255にスケール)
そしてtransformer.set_channel_swap('data',(2,1,0)(RGBをBGRに変換)には、次の5行のコードが必要です.
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))  #  , (530,800,3)   (3,530,800)
transformer.set_mean('data', mu) #mu 
transformer.set_raw_scale('data', 255)  # rescale from [0, 1] to [0, 255]
transformer.set_channel_swap('data', (2, 1, 0))  # swap channels from RGB to BGR 

2.cv 2を使用する.imread()で画像を読み出します
cv2.imread()インタフェースは画像を読み、そのままBGR形式and 0~255
したがって、[0255]へのスケーリングやチャネル変換[2,1,0]へのスケーリングは不要であり、transformerは不要である.set_raw_scale('data',255)とtransformer.set_channel_swap('data',(2,1,0))は次の3行のコードでよい
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))  #  , (530,800,3)   (3,530,800)
transformer.set_mean('data', mu) #mu 

私が最初に使ったのはcv 2です.imread()は画像を読み取るためにcaffeを用いる.io.load_イメージ()のコードセグメントのため、このエラーが発生しました.