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)
# 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]
'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)