Commit fc81be3f authored by Yuxin Wu's avatar Yuxin Wu

some small cleanups

parent e6595ef9
#!/usr/bin/env python #!/usr/bin/env python
# -*- coding: UTF-8 -*- # -*- coding: UTF-8 -*-
# File: load-ResNet.py # File: load-resnet.py
# Author: Eric Yujia Huang yujiah1@andrew.cmu.edu # Author: Eric Yujia Huang yujiah1@andrew.cmu.edu
# Yuxin Wu <ppwwyyxx@gmail.com> # Yuxin Wu <ppwwyyxx@gmail.com>
# #
import cv2 import cv2
import tensorflow as tf import tensorflow as tf
import argparse import argparse
import os, re
import numpy as np import numpy as np
from six.moves import zip from six.moves import zip
from tensorflow.contrib.layers import variance_scaling_initializer from tensorflow.contrib.layers import variance_scaling_initializer
...@@ -19,19 +20,17 @@ from tensorpack.dataflow.dataset import ILSVRCMeta ...@@ -19,19 +20,17 @@ from tensorpack.dataflow.dataset import ILSVRCMeta
""" """
Usage: Usage:
python2 -m tensorpack.utils.loadcaffe PATH/TO/CAFFE/{ResNet-101-deploy.prototxt,ResNet-101-model.caffemodel} ResNet101.npy python -m tensorpack.utils.loadcaffe PATH/TO/CAFFE/{ResNet-101-deploy.prototxt,ResNet-101-model.caffemodel} ResNet101.npy
./load-alexnet.py --load ResNet-101.npy --input cat.png --depth 101 ./load-resnet.py --load ResNet-101.npy --input cat.png --depth 101
""" """
MODEL_DEPTH = None MODEL_DEPTH = None
class Model(ModelDesc): class Model(ModelDesc):
def _get_input_vars(self): def _get_input_vars(self):
return [InputVar(tf.float32, [None, 224, 224, 3], 'input'), return [InputVar(tf.float32, [None, 224, 224, 3], 'input')]
InputVar(tf.int32, [None],'label')]
def _build_graph(self, input_vars): def _build_graph(self, input_vars):
image, label = input_vars image = input_vars[0]
def caffe_shortcut(l, n_in, n_out, stride): def caffe_shortcut(l, n_in, n_out, stride):
if n_in != n_out: if n_in != n_out:
...@@ -77,7 +76,7 @@ class Model(ModelDesc): ...@@ -77,7 +76,7 @@ class Model(ModelDesc):
with argscope(Conv2D, nl=tf.identity, use_bias=False, with argscope(Conv2D, nl=tf.identity, use_bias=False,
W_init=variance_scaling_initializer(mode='FAN_OUT')): W_init=variance_scaling_initializer(mode='FAN_OUT')):
fc1000l = (LinearWrap(image) fc1000l = (LinearWrap(image)
.Conv2D('conv0', 64, 7, stride=2, nl=BNReLU ) .Conv2D('conv0', 64, 7, stride=2, nl=BNReLU )
.MaxPooling('pool0', shape=3, stride=2, padding='SAME') .MaxPooling('pool0', shape=3, stride=2, padding='SAME')
.apply(layer, 'group0', block_func, 64, defs[0], 1, first=True) .apply(layer, 'group0', block_func, 64, defs[0], 1, first=True)
.apply(layer, 'group1', block_func, 128, defs[1], 2) .apply(layer, 'group1', block_func, 128, defs[1], 2)
...@@ -88,8 +87,6 @@ class Model(ModelDesc): ...@@ -88,8 +87,6 @@ class Model(ModelDesc):
.FullyConnected('fc1000', 1000, nl=tf.identity)()) .FullyConnected('fc1000', 1000, nl=tf.identity)())
prob = tf.nn.softmax(fc1000l, name='prob_output') prob = tf.nn.softmax(fc1000l, name='prob_output')
def run_test(path, input): def run_test(path, input):
image_mean = np.array([0.485, 0.456, 0.406], dtype='float32') image_mean = np.array([0.485, 0.456, 0.406], dtype='float32')
...@@ -100,8 +97,7 @@ def run_test(path, input): ...@@ -100,8 +97,7 @@ def run_test(path, input):
model=Model(), model=Model(),
input_var_names=['input'], input_var_names=['input'],
session_init=ParamRestore(resNet_param), session_init=ParamRestore(resNet_param),
session_config=get_default_sess_config(0.9), output_var_names=['prob_output']
output_var_names=['prob_output'] # output:0 is the probability distribution
) )
predict_func = get_predict_func(pred_config) predict_func = get_predict_func(pred_config)
...@@ -120,20 +116,18 @@ def run_test(path, input): ...@@ -120,20 +116,18 @@ def run_test(path, input):
def caffeResNet2tensorpackResNet(caffe_layer_name): def caffeResNet2tensorpackResNet(caffe_layer_name):
import re # begining & ending stage
map = dict() name_map = {'bn_conv1/beta': 'conv0/bn/beta',
#begining & ending stage 'bn_conv1/gamma': 'conv0/bn/gamma',
map['conv1/W'] = 'conv0/W' 'bn_conv1/mean/EMA': 'conv0/bn/mean/EMA',
map['conv1/b'] = 'conv0/b' 'bn_conv1/variance/EMA': 'conv0/bn/variance/EMA',
map['bn_conv1/beta'] = 'conv0/bn/beta' 'conv1/W': 'conv0/W',
map['bn_conv1/gamma'] = 'conv0/bn/gamma' 'conv1/b': 'conv0/b',
map['bn_conv1/mean/EMA'] = 'conv0/bn/mean/EMA' 'fc1000/W': 'fc1000/W',
map['bn_conv1/variance/EMA'] = 'conv0/bn/variance/EMA' 'fc1000/b': 'fc1000/b'}
map['fc1000/W'] = 'fc1000/W' if caffe_layer_ in name_map:
map['fc1000/b'] = 'fc1000/b' print(caffe_layer_name + ' --> ' + name_map[caffe_layer_name])
if map.get(caffe_layer_name) != None: return name_map[caffe_layer_name]
print(caffe_layer_name + ' --> ' + map[caffe_layer_name])
return map[caffe_layer_name]
print(caffe_layer_name) print(caffe_layer_name)
...@@ -151,7 +145,7 @@ def caffeResNet2tensorpackResNet(caffe_layer_name): ...@@ -151,7 +145,7 @@ def caffeResNet2tensorpackResNet(caffe_layer_name):
if s.group(0) == caffe_layer_name[0:caffe_layer_name.index('/')]: if s.group(0) == caffe_layer_name[0:caffe_layer_name.index('/')]:
layer_type = s.group(1) layer_type = s.group(1)
layer_group = s.group(2) layer_group = s.group(2)
layer_block = ord(s.group(3)) - ord('a') layer_block = ord(s.group(3)) - ord('a')
layer_branch = s.group(4) layer_branch = s.group(4)
else: else:
# print('s group ' + s.group(0)) # print('s group ' + s.group(0))
...@@ -172,13 +166,13 @@ def caffeResNet2tensorpackResNet(caffe_layer_name): ...@@ -172,13 +166,13 @@ def caffeResNet2tensorpackResNet(caffe_layer_name):
else: else:
print('model block error!') print('model block error!')
layer_branch = s.group(5) layer_branch = s.group(5)
if s.group(0) != caffe_layer_name[0:caffe_layer_name.index('/')]: if s.group(0) != caffe_layer_name[0:caffe_layer_name.index('/')]:
print('model depth error!') print('model depth error!')
# error handling # TODO error handling
type_dict = {'res': '/conv', 'bn':'/bn', 'scale':'/bn'} type_dict = {'res': '/conv', 'bn':'/bn', 'scale':'/bn'}
shortcut_dict = {'res': '/convshortcut', 'bn':'/bnshortcut', 'scale':'/bnshortcut'} shortcut_dict = {'res': '/convshortcut', 'bn':'/bnshortcut', 'scale':'/bnshortcut'}
...@@ -194,7 +188,7 @@ def caffeResNet2tensorpackResNet(caffe_layer_name): ...@@ -194,7 +188,7 @@ def caffeResNet2tensorpackResNet(caffe_layer_name):
shortcut_dict[layer_type] + tf_name shortcut_dict[layer_type] + tf_name
else: else:
print('renaming error!') print('renaming error!')
# error handling # TODO error handling
print(caffe_layer_name + ' --> ' + tf_name) print(caffe_layer_name + ' --> ' + tf_name)
return tf_name return tf_name
...@@ -212,4 +206,4 @@ if __name__ == '__main__': ...@@ -212,4 +206,4 @@ if __name__ == '__main__':
os.environ['CUDA_VISIBLE_DEVICES'] = args.gpu os.environ['CUDA_VISIBLE_DEVICES'] = args.gpu
# run resNet with given model (in npy format) # run resNet with given model (in npy format)
MODEL_DEPTH = args.depth MODEL_DEPTH = args.depth
run_test(args.load, args.input) run_test(args.load, args.input)
\ No newline at end of file
...@@ -21,13 +21,11 @@ Usage: ...@@ -21,13 +21,11 @@ Usage:
class Model(ModelDesc): class Model(ModelDesc):
def _get_input_vars(self): def _get_input_vars(self):
return [InputVar(tf.float32, (None, 227, 227, 3), 'input'), return [InputVar(tf.float32, (None, 227, 227, 3), 'input') ]
InputVar(tf.int32, (None,), 'label') ]
def _build_graph(self, inputs): def _build_graph(self, inputs):
# img: 227x227x3 # img: 227x227x3
image = inputs[0]
image, label = inputs
with argscope([Conv2D, FullyConnected], nl=tf.nn.relu): with argscope([Conv2D, FullyConnected], nl=tf.nn.relu):
l = Conv2D('conv1', image, out_channel=96, kernel_shape=11, stride=4, padding='VALID') l = Conv2D('conv1', image, out_channel=96, kernel_shape=11, stride=4, padding='VALID')
......
...@@ -29,12 +29,11 @@ Usage: ...@@ -29,12 +29,11 @@ Usage:
class Model(ModelDesc): class Model(ModelDesc):
def _get_input_vars(self): def _get_input_vars(self):
return [InputVar(tf.float32, (None, 224, 224, 3), 'input'), return [InputVar(tf.float32, (None, 224, 224, 3), 'input') ]
InputVar(tf.int32, (None,), 'label') ]
def _build_graph(self, inputs, is_training): def _build_graph(self, inputs):
image, label = inputs image = inputs[0]
with argscope(Conv2D, kernel_shape=3, nl=tf.nn.relu): with argscope(Conv2D, kernel_shape=3, nl=tf.nn.relu):
# 224 # 224
......
...@@ -287,7 +287,7 @@ Line: {}""".format(repr(args.delimeter), line) ...@@ -287,7 +287,7 @@ Line: {}""".format(repr(args.delimeter), line)
data_ys = [data[k] for k in args.y_column_idx] data_ys = [data[k] for k in args.y_column_idx]
max_ysize = max([len(t) for t in data_ys]) max_ysize = max([len(t) for t in data_ys])
print "Size of the longest y column: ", max_ysize print("Size of the longest y column: ", max_ysize)
if nr_x_column: if nr_x_column:
data_xs = [data[k] for k in args.x_column_idx] data_xs = [data[k] for k in args.x_column_idx]
......
...@@ -8,6 +8,9 @@ import time ...@@ -8,6 +8,9 @@ import time
from ..utils import logger from ..utils import logger
try: try:
import gym import gym
gym.undo_logger_setup()
# https://github.com/openai/gym/pull/199
# not sure does it cause other problems
except ImportError: except ImportError:
logger.warn("Cannot import gym. GymEnv won't be available.") logger.warn("Cannot import gym. GymEnv won't be available.")
...@@ -23,7 +26,7 @@ _ALE_LOCK = threading.Lock() ...@@ -23,7 +26,7 @@ _ALE_LOCK = threading.Lock()
class GymEnv(RLEnvironment): class GymEnv(RLEnvironment):
""" """
An OpenAI/gym wrapper. Will auto restart. An OpenAI/gym wrapper. Can optionally auto restart.
""" """
def __init__(self, name, dumpdir=None, viz=False, auto_restart=True): def __init__(self, name, dumpdir=None, viz=False, auto_restart=True):
with _ALE_LOCK: with _ALE_LOCK:
...@@ -43,6 +46,7 @@ class GymEnv(RLEnvironment): ...@@ -43,6 +46,7 @@ class GymEnv(RLEnvironment):
self._ob = self.gymenv.reset() self._ob = self.gymenv.reset()
def finish_episode(self): def finish_episode(self):
self.gymenv.monitor.flush()
self.stats['score'].append(self.rwd_counter.sum) self.stats['score'].append(self.rwd_counter.sum)
def current_state(self): def current_state(self):
......
...@@ -54,6 +54,7 @@ def ImageSample(inputs, borderMode='repeat'): ...@@ -54,6 +54,7 @@ def ImageSample(inputs, borderMode='repeat'):
:param borderMode: either 'repeat' or 'constant' (0) :param borderMode: either 'repeat' or 'constant' (0)
:returns: a NHWC output tensor. :returns: a NHWC output tensor.
""" """
# TODO borderValue
template, mapping = inputs template, mapping = inputs
assert template.get_shape().ndims == 4 and mapping.get_shape().ndims == 4 assert template.get_shape().ndims == 4 and mapping.get_shape().ndims == 4
input_shape = template.get_shape().as_list()[1:] input_shape = template.get_shape().as_list()[1:]
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment