0

ich ein voll convotuional Netzwerk für die Tiefenschätzung wie folgt aussehen: (nur obere und untere Schichten aus Gründen der Einfachheit):Caffe Verlust Schicht, bedeuten und Genauigkeit

# input: image and depth_image 
layer { 
    name: "train-data" 
    type: "Data" 
    top: "data" 
    top: "silence_1" 
    include { 
    phase: TRAIN 
    } 
    transform_param { 
    #mean_file: "mean_train.binaryproto" 
    scale: 0.00390625 
    } 
    data_param { 
     source: "/train_lmdb" 
    batch_size: 4 
    backend: LMDB 
    } 
} 
layer { 
    name: "train-depth" 
    type: "Data" 
    top: "depth" 
    top: "silence_2" 
    include { 
    phase: TRAIN 
    } 
    transform_param { 
    scale: 0.00390625 
    } 
    data_param { 
    source: "train_depth_lmdb" 
    batch_size: 4 
    backend: LMDB 
    } 
} 
layer { 
    name: "val-data" 
    type: "Data" 
    top: "data" 
    top: "silence_1" 
    include { 
    phase: TEST 
    } 
    transform_param { 
    #mean_file: "mean_val.binaryproto" 
    scale: 0.00390625 
    } 
    data_param { 
    source: "val_lmdb" 
    batch_size: 4 
    backend: LMDB 
    } 
} 
layer { 
    name: "val-depth" 
    type: "Data" 
    top: "depth" 
    top: "silence_2" 
    include { 
    phase: TEST 
    } 
    transform_param { 
    scale: 0.00390625 
    } 
    data_param { 
    source: "val_depth_lmdb" 
    batch_size: 4 
    backend: LMDB 
    } 
} 
################## Silence unused labels ################## 
layer { 
    name: "silence_layer_1" 
    type: "Silence" 
    bottom: "silence_1" 
} 

layer { 
    name: "silence_layer_2" 
    type: "Silence" 
    bottom: "silence_2" 
} 
.... 
layer { 
    name: "conv" 
    type: "Convolution" 
    bottom: "concat" 
    top: "conv" 
    convolution_param { 
     num_output: 1 
     kernel_size: 5 
     pad: 2 
     stride: 1 
     engine: CUDNN 
     weight_filler { 
      type: "gaussian" 
      std: 0.01 
     } 
     bias_filler { 
      type: "constant" 
      value: 0 
     } 
    } 
} 

layer { 
    name: "relu" 
    type: "ReLU" 
    bottom: "conv" 
    top: "result" 
    relu_param{ 
    negative_slope: 0.01 
     engine: CUDNN 
    } 
} 

# Error 
layer { 
    name: "accuracy" 
    type: "Accuracy" 
    bottom: "result" 
    bottom: "depth" 
    top: "accuracy" 
    include { 
    phase: TEST 
    } 
} 
layer { 
    name: "loss" 
    type: "EuclideanLoss" 
    bottom: "result" 
    bottom: "depth" 
    top: "loss" 
} 

Jetzt habe ich drei Fragen:

Wenn ich das Netzwerk trainiere, ist die Genauigkeitsebene immer 1. Ich verstehe nicht warum?

Ist EuclideanLayer die richtige Schicht für diesen Zweck?

Wird in einem solchen Fall das Mittel benötigt oder kann ich das Mittel vernachlässigen?

#Define image transformers 
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) 
transformer.set_mean('data', mean_array) 
transformer.set_transpose('data', (2,0,1)) 

image = "test.png" 

img = caffe.io.load_image(image, False) 

img = caffe.io.resize_image(img, (IMAGE_WIDTH, IMAGE_HEIGHT)) 

net.blobs['data'].data[...] = transformer.preprocess('data', img) 

pred = net.forward() 

output_blob = pred['result'] 
+0

Meinten Sie dies als "Deep Learning" zu kennzeichnen? – MSalters

+0

yeah sorry Ich habe es bearbeitet – thigi

Antwort

1
  1. Genauigkeit ist immer 1-this answer sehen.
  2. "EuclideanLoss" Schicht eignet sich gut für die Regression.
  3. Subtrahieren der Mittelwert sollte das Netz besser konvergieren. Benutze es weiterhin. Sie können mehr über die Bedeutung der Datennormalisierung lesen und was in dieser Hinsicht getan werden kann here.
+0

Mein Problem ist, wenn ich das Mittel verwende, bekomme ich schwarze Bilder als Ausgabe. – thigi

+0

alle Nullbilder? @thigi – Shai

+0

Ja, es ist wirklich komisch. Ich werde meine prediction.py für Sie hinzufügen. Alle Ausgabewerte für meine Vorhersage werden negativ, wenn ich den Mittelwert verwende. – thigi

Verwandte Themen