Exemple #1
0
# deserialize and run the model in neon
# generate a backend
be = gen_backend(backend='gpu', rng_seed=1, batch_size=256)

with open(conv_weights_fn, 'r') as fid:
    pdict_l = pickle.load(fid)

# for testing we need to switch dropout to keep=1.0
md = ModelDescription(pdict_l)

# get the dropout values set in the serialized file and reset them to
# have no dropout for comparison between caffe
drop_layers = {ky: -1 for ky in ["drop6", "drop7"]}
for l in drop_layers:
    drop_layer = md.getlayer(l)
    drop_layers[l] = drop_layer['config']['keep']
    drop_layer['config']['keep'] = 1.0
md = dict(md)

# generate a fake input
IM_SIZE = (be.bsz, 3, 224, 224)
np.random.seed(1)
im = np.random.randint(-150, 150, IM_SIZE)
fake_labels = np.zeros((IM_SIZE[0], 10))

# need this iterator to initialize the model
train = ArrayIterator(im.reshape(IM_SIZE[0], -1).copy(),
                      fake_labels,
                      nclass=10,
                      lshape=IM_SIZE[1:])
# deserialize and run the model in neon
# generate a backend
be = gen_backend(backend='gpu', rng_seed=1, batch_size=64)

with open(conv_file_path, 'r') as fid:
    pdict_l = pickle.load(fid)

# for testing we need to switch dropout to keep=1.0
# get the dropout values set in the serialized file and reset them to
# have no dropout for comparison between caffe 
md = ModelDescription(pdict_l)

drop_layers = {ky: -1 for ky in ["loss1/drop_fc", "loss2/drop_fc", "pool5/drop_7x7_s1"]}
for l in drop_layers:
    drop_layer = md.getlayer(l)
    drop_layers[l] = drop_layer['config']['keep']
    drop_layer['config']['keep'] = 1.0
md = dict(md)

# generate a fake input
IM_SIZE = (be.bsz, 3, 224, 224)
np.random.seed(1)
im = np.random.randint(-150, 150, IM_SIZE)
fake_labels = np.zeros((IM_SIZE[0], 10))

# need this iterator to initialize the model
train = ArrayIterator(im.reshape(IM_SIZE[0], -1).copy(), fake_labels, nclass=10, lshape=IM_SIZE[1:])

# deserialize the neon model
model = Model(md, train)
              onehot=False, target_dtype=np.uint8, nclasses=c)
data_dir = args.image_path

test_set = PixelWiseImageLoader(set_name='test', repo_dir=data_dir,media_params=test_params, 
                                index_file=os.path.join(data_dir, 'test_images.csv'), **common)


# initialize model object
segnet_model = Model(layers=gen_model(c, h, w))
segnet_model.initialize(test_set)

# load up the serialized model
model_desc = ModelDescription(load_obj(args.save_model_file))
for layer in segnet_model.layers_to_optimize:
    name = layer.name
    trained_layer = model_desc.getlayer(name)
    layer.load_weights(trained_layer)

fig = plt.figure()
if args.display:
    plt.ion()

im1 = None
im2 = None

cnt = 1
for x, t in test_set:
    z = segnet_model.fprop(x).get()

    z = np.argmax(z.reshape((c, h, w)), axis=0)
    t = np.argmax(t.get().reshape((c, h, w)), axis=0)
test_set = PixelWiseImageLoader(set_name='test',
                                repo_dir=data_dir,
                                media_params=test_params,
                                index_file=os.path.join(
                                    data_dir, 'test_images.csv'),
                                **common)

# initialize model object
segnet_model = Model(layers=gen_model(c, h, w))
segnet_model.initialize(test_set)

# load up the serialized model
model_desc = ModelDescription(load_obj(args.save_model_file))
for layer in segnet_model.layers_to_optimize:
    name = layer.name
    trained_layer = model_desc.getlayer(name)
    layer.load_weights(trained_layer)

fig = plt.figure()
if args.display:
    plt.ion()

im1 = None
im2 = None

cnt = 1
for x, t in test_set:
    z = segnet_model.fprop(x).get()

    z = np.argmax(z.reshape((c, h, w)), axis=0)
    t = np.argmax(t.get().reshape((c, h, w)), axis=0)
layers = args.layers
if layers is None or len(layers) == 0:
    print 'No layers indicated - will try to guess'
    try:
        if model['model']['type'].find('Tree') > -1:
            layers = []
            for clayer in model['model']['config']['layers']:
                layers.extend(find_output_layer(clayer['config']['layers']))
        else:
            layers = find_output_layer(model['model']['config']['layers'])
    except:
        raise ValueError('Could not parse the layers which need to be updated '
                         'provide name(s) of the layer(s) explicitly on command line')


for layer in layers:
    l = model.getlayer(layer)
    if l is None:
        raise ValueError('Could not find layer %s in model file' % layer)
    if l['type'].find('Bias') > -1:
        l['params']['W'] = l['params']['W'][lbl_map].copy()
    elif l['type'].find('Linear') > -1:
        l['params']['W'] = l['params']['W'][lbl_map, :].copy()
    else:
        raise ValueError('Currently only bias and linear layers can be shuffled')
new_file = os.path.splitext(args.model_file)
new_file = new_file[0] + '_neon_shuffle' + new_file[1]
print 'saving to file: %s' % new_file
with open(new_file, 'w') as fid:
    pickle.dump(dict(model), fid)