コード例 #1
0
        imagefile.append(imagedir)
    elif nimages == 0:
        #imagefile = glob.glob(imagedir + '/*.png')[:3]
        #imagefile = glob.glob(imagedir + '/*.png')      # 全画像ではメモリを食い尽くす...
        imagefile = glob.glob(imagedir + '/*.png')[:50]
    else:
        for i in range(nimages):
            imagefile.append('testdata/img_' + ('0000' + str(i))[-4:] + '.jpg')
    print 'found', len(imagefile), 'imagefiles :', imagefile[:3], '...'
    # scale辞書の読み込み
    scale_dict = json.load(
        file(scale_dict_file))  # activation scaleを入れる前のスケール辞書
    scale_dict_a = copy.deepcopy(
        scale_dict)  # activation scaleを入れたスケール辞書(初期値は変更前と同じ)

    ptxt = csslib.load_pb2(model)  # 変換前prototxt
    net = csslib.load_network(model, param)  # 変換前ネットワーク
    net_as = csslib.load_network(model, param)  # 変換後ネットワーク(変換前を初期値とする)
    net.blobs['data'].reshape(1, nchannels, imgheight,
                              imgwidth)  # reshape to image size
    transformer = csslib.gen_transformer(net)  # 入力データのtransformerを作成
    #
    conv_layers = []
    for layer in ptxt.layer:
        if layer.type == 'Convolution':
            #conv_layers.append(layer.name)          # nameではなく
            conv_layers.append(layer.top[0])  # topを登録する
    print "conv_layers:", conv_layers
    #
    layer_names = []
    gen_layer_namelist(net, layer_names)
コード例 #2
0
# int16 -> fp32へ戻すためのスケールを抽出
def extract_i2f_scale():
    layers = ('cls_score_i2f', 'bbox_pred_i2f', 'joints_pred_i2f')
    i = 0
    print 'const float i2f_scale' + layer_name + '[] = {'
    for layer in layers:
        print '   %14.12f' % sdict[layer], ',   //', i, layer
        i = i + 1
    print '};'
    print ''


##### main #####
if __name__ == '__main__':
    print '\n// ----- 05-extract_prm.py -----', sys.argv[1], sys.argv[2]
    ptxt = csslib.load_pb2(sys.argv[1])
    sdict = csslib.load_dict(sys.argv[2])
    out_layer = sys.argv[3]
    if len(sys.argv) > 4:
        layer_name = sys.argv[4]
    else:
        layer_name = ''
    #for layer in ptxt.layer:
    #    print layer.name
    print '// ----- for css_pose.cpp -----'
    extract_conv_scale()
    extract_eltwise_scale()
    extract_i2f_scale()
    #print '// ----- for Makefile -----'
    #print '// SCALE_INTxx =', sdict[out_layer]
コード例 #3
0
                                                  'param_str':'{"scale":1.0, "shift":0}'})
            i2f.bottom.append(layer_top)
            i2f.top.append(i2f_top)
        elif layer.type == 'Eltwise':
            # eltwise layerにeltwise_paramを追加
            weight = []
            for i in range(len(layer.bottom)):
                weight.append(1.0)                 # 各層のweight : とりあえず全部1
            ew_ws = net_dst.layer.add(name=layer.top[0],
                                      type='Eltwise',
                                      eltwise_param={'operation':'SUM',
                                                     'coeff':weight})  # weightはタプルで指定
            for i in range(len(layer.bottom)):
                ew_ws.bottom.append(layer.bottom[i])
            ew_ws.top.append(layer.top[0])
        else:
            net_dst.layer.extend([layer])
    return net_dst


##### main #####
if __name__ == '__main__':
    print '\n----- 01-add_python_layer.py -----', sys.argv[1], '->',sys.argv[2]
    model_in  = sys.argv[1]
    model_out = sys.argv[2]
    #
    net = csslib.load_pb2(model_in)
    net_out = add_python_layer(net)
    print 'saving modified prototxt to', model_out
    csslib.save_pb2(net_out, model_out)