私がしたいのは、単純なピクセル単位の分類または回帰タスクを実行することです。したがって、私は入力画像とground_truthを持っています。私がしたいことは、私が円と矩形を持つ簡単なセグメンテーションタスクを行うことです。そして私は訓練したいと思います。どこに円があるのか、どこに長方形があるのですか?つまり、円があるすべての位置に値「1」を持ち、長方形があるすべての位置で値「2」を持つground_truth画像があります。それから私は画像とground_truth画像を.png画像の形で入力しています。caffeピクセル単位の分類/回帰
layer {
name: "upscore"
type: "Deconvolution"
bottom: "score_fr"
top: "upscore"
param {
lr_mult: 0
}
convolution_param {
num_output: 3 ## <<---- 0 = backgrund 1 = circle 2 = rectangle
bias_term: false
kernel_size: 63
stride: 32
}
}
layer {
name: "score"
type: "Crop"
bottom: "upscore"
bottom: "data"
top: "score"
crop_param {
axis: 2
offset: 18
}
}
layer {
name: "loss"
type: "SoftmaxWithLoss" ## <<----
bottom: "score"
bottom: "ground_truth"
top: "loss"
loss_param {
ignore_label: 0
}
}
:私は
fcn alexnet
は、それから私は、私はどちらか私の損失層に応じて、回帰または分類タスクにすることができると思います
回帰:
layer {
name: "upscore"
type: "Deconvolution"
bottom: "score_fr"
top: "upscore"
param {
lr_mult: 0
}
convolution_param {
num_output: 1 ## <<---- 1 x height x width
bias_term: false
kernel_size: 63
stride: 32
}
}
layer {
name: "score"
type: "Crop"
bottom: "upscore"
bottom: "data"
top: "score"
crop_param {
axis: 2
offset: 18
}
}
layer {
name: "loss"
type: "EuclideanLoss" ## <<----
bottom: "score"
bottom: "ground_truth"
top: "loss"
}
しかし、これは私が望む結果さえももたらさない。私は、ピクセル単位の分類/回帰の私の理解には何か問題があると思う。私の間違いがどこにあるのか教えてください。出力の検索は次のようになり、回帰について
EDIT 1
:
output_blob = pred['result'].data
predicated_image_array = np.array(output_blob)
predicated_image_array = predicated_image_array.squeeze()
print predicated_image_array.shape
#print predicated_image_array.shape
#print mean_array
range_value = np.ptp(predicated_image_array)
min_value = predicated_image_array.min()
max_value = predicated_image_array.max()
# make positive
predicated_image_array[:] -= min_value
if not range_value == 0:
predicated_image_array /= range_value
predicated_image_array *= 255
predicated_image_array = predicated_image_array.astype(np.int64)
print predicated_image_array.shape
cv2.imwrite('predicted_output.jpg', predicated_image_array)
出力が1×高さ×幅であり、値が実際に出力されるので、これは容易です値。しかし、出力が3(ラベル数)×高さ×幅であるため、分類/ SotMaxLayerの出力をどのように取得するのでしょうか。しかし、私はこの形の内容の意味を知らない。
いいえいいえ!私は、ピクセル単位の分類または回帰タスクを実行したい。ただ簡単なもの。私はあなたが通常の分類作業でそれを行うことができることを知っていますが、私はピクセル単位の分類を行いたいと思います。私の考えは、セグメンテーション/分類を行うことでした。分かりますか? – thigi
あなたも考えることができます:私は1つの画像で円と長方形を持っており、私は分割をしたい!標準分類を行う方法はわかっているので、実際に簡単にピクセル単位の予測タスクを実行できるようにしたいだけですが、後でピクセル単位の予測を行い、さらに難しいタスクを実行する必要があります。 – thigi
だから、あなたは 'segmentation'でそれを行うことができます。各画像(円/矩形)に対して、GT画像(0-255)を作成する必要があります。各画像のクラス数は2(背景と幾何学的形状)であるので、 'num_output:2'です。背景を0に設定し、形状1.幸運を設定します。 –