2

VGG モデルの Tensorflow 実装を読んでいるときに、著者が入力 RGB 画像に対して次のようなスケーリング操作を実行していることに気付きました。質問が 2 つVGG_MEAN あります。意味と、その設定を取得する方法を教えてください。第二に、これらの平均値を減算して取得する必要がある理由bgr

VGG_MEAN = [103.939, 116.779, 123.68]

ef build(self, rgb):
    """
    load variable from npy to build the VGG
    :param rgb: rgb image [batch, height, width, 3] values scaled [0, 1]
    """

    start_time = time.time()
    print("build model started")
    rgb_scaled = rgb * 255.0

    # Convert RGB to BGR
    red, green, blue = tf.split(3, 3, rgb_scaled)
    assert red.get_shape().as_list()[1:] == [224, 224, 1]
    assert green.get_shape().as_list()[1:] == [224, 224, 1]
    assert blue.get_shape().as_list()[1:] == [224, 224, 1]
    bgr = tf.concat(3, [
        blue - VGG_MEAN[0],
        green - VGG_MEAN[1],
        red - VGG_MEAN[2],
    ])
    assert bgr.get_shape().as_list()[1:] == [224, 224, 3]
4

3 に答える 3

2

まず、RGB を BGR に変換するために使用する opencv コードは次のとおりです。

from cv2 import cvtColor, COLOR_RGB2BGR
img = cvtColor(img, COLOR_RGB2BGR)

あなたのコードでは、これを行うコードは次のとおりです。

bgr = tf.concat(3, [
    blue - VGG_MEAN[0],
    green - VGG_MEAN[1],
    red - VGG_MEAN[2],
])

画像は[Height x Width]マトリックスではなく、[H x W x C]キューブですC。カラー チャネルはどこにありますか。RGB から BGR への変換では、1 番目と 3 番目のチャネルを交換します。

2番目:BGRを取得するために平均を減算するのではなく、カラーチャネル値を平均を中心に正規化するためにこれを行います-したがって、値は範囲ではなく、たとえば[-125、130]の範囲になります[0, 255] の

参照:画像から平均を減算

ディレクトリ内のすべての画像の BGR チャネル手段を取得するための Python スクリプトを作成しました

于 2016-08-20T16:05:06.177 に答える
0

このモデルは Caffe から移植されたもので、OpenCV 機能に依存し、BGR チャネルの OpenCV 規則を使用していると思います。

于 2016-08-17T18:03:11.260 に答える
0
  1. 平均値は、トレーニング データの各レイヤーの平均を計算したものです。
  2. rgb -> bgr は opencv の問題用です。
于 2016-08-02T16:25:10.743 に答える