2017-12-28 4 views
0

Ich bin verwirrt über den followinng Block in einem caffe implementiert prj von obj Erkennung mit Faster-RCNN in dem Anfang test.prototxt:Wie funktioniert caffe input_shape eigentlich?

input: "data" 
input_shape { 
    dim: 1 
    dim: 3 
    dim: 224 
    dim: 224 
} 

input: "im_info" 
input_shape { 
    dim: 1 
    dim: 3 
} 

aber tatsächlich die Eingabe nicht die angegebene Größe von 224 * 224 , und muss nicht 224 * 224 sein, sehe ich in der Test-Code, Bilder werden nur mit out Größe gelesen und dann durch das Netzwerk, sehr verwirrt, und fand keine Referenz wie Caffe definieren diese Blöcke, kann jemand helfen ?

Antwort

1

Schaltet die Eingangsform aus nicht unter die hier bestimmt:

input: "data" 
input_shape { 
    dim: 1 
    dim: 3 
    dim: 224 
    dim: 224 
} 

input: "im_info" 
input_shape { 
    dim: 1 
    dim: 3 
} 

nachdem ich Eingang dim auf eine beliebige Größe ändern, wie 424:

input: "data" 
input_shape { 
    dim: 1 
    dim: 3 
    dim: 424 
    dim: 424 
} 

input: "im_info" 
input_shape { 
    dim: 1 
    dim: 3 
} 

der Test AP keine Änderung Bit, gibt an, dass einige Änderungen vorgenommen wurden, so dass die Bildgröße hier nicht durch die input_shape in test.prototxt bestimmt wird, dann tauche ich in den Code, gefunden Linien hier:

net.blobs['data'].reshape(*(blobs['data'].shape)) 

vor.

forward_kwargs = {'data': blobs['data'].astype(np.float32, copy=False)} 
if cfg.TEST.HAS_RPN: 
    forward_kwargs['im_info'] = blobs['im_info'].astype(np.float32, copy=False) 
else: 
    forward_kwargs['rois'] = blobs['rois'].astype(np.float32, copy=False) 
blobs_out = net.forward(**forward_kwargs) 

und die Kleckse [ ‚Daten‘] Form ist die Größe des Eingangsbildes mit Resize-Prozess, so dass die Breite 600: (ich weiß nicht alle Zeilen hier posten)

im_scale = float(cfg.TEST.MAX_SIZE)/float(im_size_max) 
im = cv2.resize(im_orig, None, None, fx=im_scale, fy=im_scale, 
         interpolation=cv2.INTER_LINEAR)