<s> import skimage . io <EOL> import numpy as np <EOL> def shownet ( net ) : <EOL> '''<STR_LIT>''' <EOL> print '<STR_LIT>' % ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) <EOL> print '<STR_LIT>' % ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) <EOL> for k , v in net . blobs . items ( ) : <EOL> if k in net . params : <EOL> params = net . params [ k ] <EOL> for pp , blob in enumerate ( params ) : <EOL> if pp == <NUM_LIT:0> : <EOL> print '<STR_LIT:U+0020>' , '<STR_LIT>' % k , <EOL> else : <EOL> print '<STR_LIT:U+0020>' * <NUM_LIT:11> , <EOL> print '<STR_LIT>' % repr ( blob . data . shape ) , <EOL> print '<STR_LIT>' % ( '<STR_LIT>' % ( blob . data . min ( ) , blob . data . max ( ) ) ) , <EOL> print '<STR_LIT>' % ( blob . diff . min ( ) , blob . diff . max ( ) ) <EOL> print '<STR_LIT>' % k , '<STR_LIT>' % repr ( v . data . shape ) , <EOL> print '<STR_LIT>' % ( '<STR_LIT>' % ( v . data . min ( ) , v . data . max ( ) ) ) , <EOL> print '<STR_LIT>' % ( v . diff . min ( ) , v . diff . max ( ) ) <EOL> def region_converter ( top_slice , bot_size , top_size , filter_width = ( <NUM_LIT:1> , <NUM_LIT:1> ) , stride = ( <NUM_LIT:1> , <NUM_LIT:1> ) , pad = ( <NUM_LIT:0> , <NUM_LIT:0> ) ) : <EOL> '''<STR_LIT>''' <EOL> assert len ( top_slice ) == <NUM_LIT:4> <EOL> assert len ( bot_size ) == <NUM_LIT:2> <EOL> assert len ( top_size ) == <NUM_LIT:2> <EOL> assert len ( filter_width ) == <NUM_LIT:2> <EOL> assert len ( stride ) == <NUM_LIT:2> <EOL> assert len ( pad ) == <NUM_LIT:2> <EOL> top_slice = [ ss for ss in top_slice ] <EOL> top_slice [ <NUM_LIT:0> ] = max ( <NUM_LIT:0> , min ( top_size [ <NUM_LIT:0> ] , top_slice [ <NUM_LIT:0> ] ) ) <EOL> top_slice [ <NUM_LIT:1> ] = max ( <NUM_LIT:0> , min ( top_size [ <NUM_LIT:0> ] , top_slice [ <NUM_LIT:1> ] ) ) <EOL> top_slice [ <NUM_LIT:2> ] = max ( <NUM_LIT:0> , min ( top_size [ <NUM_LIT:1> ] , top_slice [ <NUM_LIT:2> ] ) ) <EOL> top_slice [ <NUM_LIT:3> ] = max ( <NUM_LIT:0> , min ( top_size [ <NUM_LIT:1> ] , top_slice [ <NUM_LIT:3> ] ) ) <EOL> bot_slice = [ - <NUM_LIT> ] * <NUM_LIT:4> <EOL> bot_slice [ <NUM_LIT:0> ] = top_slice [ <NUM_LIT:0> ] * stride [ <NUM_LIT:0> ] - pad [ <NUM_LIT:0> ] ; <EOL> bot_slice [ <NUM_LIT:1> ] = ( top_slice [ <NUM_LIT:1> ] - <NUM_LIT:1> ) * stride [ <NUM_LIT:0> ] + filter_width [ <NUM_LIT:0> ] - pad [ <NUM_LIT:0> ] ; <EOL> bot_slice [ <NUM_LIT:2> ] = top_slice [ <NUM_LIT:2> ] * stride [ <NUM_LIT:1> ] - pad [ <NUM_LIT:1> ] ; <EOL> bot_slice [ <NUM_LIT:3> ] = ( top_slice [ <NUM_LIT:3> ] - <NUM_LIT:1> ) * stride [ <NUM_LIT:1> ] + filter_width [ <NUM_LIT:1> ] - pad [ <NUM_LIT:1> ] ; <EOL> return bot_slice <EOL> def get_conv_converter ( bot_size , top_size , filter_width = ( <NUM_LIT:1> , <NUM_LIT:1> ) , stride = ( <NUM_LIT:1> , <NUM_LIT:1> ) , pad = ( <NUM_LIT:0> , <NUM_LIT:0> ) ) : <EOL> return lambda top_slice : region_converter ( top_slice , bot_size , top_size , filter_width , stride , pad ) <EOL> def get_pool_converter ( bot_size , top_size , filter_width = ( <NUM_LIT:1> , <NUM_LIT:1> ) , stride = ( <NUM_LIT:1> , <NUM_LIT:1> ) , pad = ( <NUM_LIT:0> , <NUM_LIT:0> ) ) : <EOL> return lambda top_slice : region_converter ( top_slice , bot_size , top_size , filter_width , stride , pad ) <EOL> class RegionComputer ( object ) : <EOL> '''<STR_LIT>''' <EOL> def __init__ ( self ) : <EOL> _tmp = [ ] <EOL> _tmp . append ( ( '<STR_LIT:data>' , None ) ) <EOL> _tmp . append ( ( '<STR_LIT>' , get_conv_converter ( ( <NUM_LIT> , <NUM_LIT> ) , ( <NUM_LIT> , <NUM_LIT> ) , ( <NUM_LIT:11> , <NUM_LIT:11> ) , ( <NUM_LIT:4> , <NUM_LIT:4> ) ) ) ) <EOL> _tmp . append ( ( '<STR_LIT>' , get_pool_converter ( ( <NUM_LIT> , <NUM_LIT> ) , ( <NUM_LIT> , <NUM_LIT> ) , ( <NUM_LIT:3> , <NUM_LIT:3> ) , ( <NUM_LIT:2> , <NUM_LIT:2> ) ) ) ) <EOL> _tmp . append ( ( '<STR_LIT>' , get_conv_converter ( ( <NUM_LIT> , <NUM_LIT> ) , ( <NUM_LIT> , <NUM_LIT> ) , ( <NUM_LIT:5> , <NUM_LIT:5> ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) , ( <NUM_LIT:2> , <NUM_LIT:2> ) ) ) ) <EOL> _tmp . append ( ( '<STR_LIT>' , get_pool_converter ( ( <NUM_LIT> , <NUM_LIT> ) , ( <NUM_LIT> , <NUM_LIT> ) , ( <NUM_LIT:3> , <NUM_LIT:3> ) , ( <NUM_LIT:2> , <NUM_LIT:2> ) ) ) ) <EOL> _tmp . append ( ( '<STR_LIT>' , get_conv_converter ( ( <NUM_LIT> , <NUM_LIT> ) , ( <NUM_LIT> , <NUM_LIT> ) , ( <NUM_LIT:3> , <NUM_LIT:3> ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) ) ) ) <EOL> _tmp . append ( ( '<STR_LIT>' , get_conv_converter ( ( <NUM_LIT> , <NUM_LIT> ) , ( <NUM_LIT> , <NUM_LIT> ) , ( <NUM_LIT:3> , <NUM_LIT:3> ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) ) ) ) <EOL> _tmp . append ( ( '<STR_LIT>' , get_conv_converter ( ( <NUM_LIT> , <NUM_LIT> ) , ( <NUM_LIT> , <NUM_LIT> ) , ( <NUM_LIT:3> , <NUM_LIT:3> ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) , ( <NUM_LIT:1> , <NUM_LIT:1> ) ) ) ) <EOL> self . names = [ tt [ <NUM_LIT:0> ] for tt in _tmp ] <EOL> self . converters = [ tt [ <NUM_LIT:1> ] for tt in _tmp ] <EOL> def convert_region ( self , from_layer , to_layer , region , verbose = False ) : <EOL> '''<STR_LIT>''' <EOL> from_idx = self . names . index ( from_layer ) <EOL> to_idx = self . names . index ( to_layer ) <EOL> assert from_idx >= to_idx , '<STR_LIT>' <EOL> ret = region <EOL> for ii in range ( from_idx , to_idx , - <NUM_LIT:1> ) : <EOL> converter = self . converters [ ii ] <EOL> if verbose : <EOL> print '<STR_LIT>' , self . names [ ii ] , '<STR_LIT>' , ret , '<STR_LIT>' <EOL> ret = converter ( ret ) <EOL> if verbose : <EOL> print '<STR_LIT>' , self . names [ to_idx ] , '<STR_LIT>' , ret <EOL> return ret <EOL> def norm01c ( arr , center ) : <EOL> '''<STR_LIT>''' <EOL> arr = arr . copy ( ) <EOL> arr -= center <EOL> arr /= max ( <NUM_LIT:2> * arr . max ( ) , - <NUM_LIT:2> * arr . min ( ) ) + <NUM_LIT> <EOL> arr += <NUM_LIT> <EOL> assert arr . min ( ) >= <NUM_LIT:0> <EOL> assert arr . max ( ) <= <NUM_LIT:1> <EOL> return arr <EOL> def save_caffe_image ( img , filename , autoscale = True , autoscale_center = None ) : <EOL> '''<STR_LIT>''' <EOL> if len ( img . shape ) == <NUM_LIT:2> : <EOL> img = np . tile ( img [ : , : , np . newaxis ] , ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:3> ) ) <EOL> else : <EOL> img = img [ : : - <NUM_LIT:1> ] . transpose ( ( <NUM_LIT:1> , <NUM_LIT:2> , <NUM_LIT:0> ) ) <EOL> if autoscale_center is not None : <EOL> img = norm01c ( img , autoscale_center ) <EOL> elif autoscale : <EOL> img = img . copy ( ) <EOL> img -= img . min ( ) <EOL> img *= <NUM_LIT:1.0> / ( img . max ( ) + <NUM_LIT> ) <EOL> skimage . io . imsave ( filename , img ) </s>
