Styler类的变量

  • rng

rng是numpy数组的随机种子

self.rng = np.random.RandomState(self.seed)
  • graph

???这里的图并没有使用inception网络

self.graph = tf.Graph()
# 这里使用graph_def作为inception网络
with tf.gfile.GFile(self.model_path, 'rb') as f:
     graph_def = tf.GraphDef()
     graph_def.ParseFromString(f.read())
  • sess

没有用inception的网络来创造会话

self.sess = tf.InteractiveSession(graph=self.graph)
  • d

网络中的密度场输入,shape:[D, H, W] (200, 300, 200)

# density input
self.d = tf.placeholder(dtype=tf.float32, shape=d_shp, name='density')
# 扩展维度以后的密度场,shape:[1, D, H, W, 1] (注意这里的channel是1,也就是灰阶图像,而不是3,rgb)
d = tf.expand_dims(tf.expand_dims(self.d, axis=0), axis=-1)
  • d_opt

???风格化的序列,暂时猜测这里是风格化后的速度场和密度场混合

self.d_opt = tf.placeholder(dtype=tf.float32, name='opt')
  • c

???维度。根据场的类型不同,维度也不一样。暂时猜测这里是将速度场和密度场进行混合,但是问题是密度场已经作为网络中的输入了,不需要再跟速度场混合。已知,该维度与self.v_有很大的关系。

# 
# self.c is dimension
if 'field' in self.field_type:
    if self.w_field == 1:
        self.c = 1
    elif self.w_field == 0:
        self.c = 3
    else:
        self.c = 4 # scalar (1) + vector field (3)
elif 'density' in self.field_type:
    self.c = 1 # scalar field
else:
    self.c = 3 # vector field
  • v_ (v_p, v_s)

v_由梯度和旋度加权组成。shape:[B = 1, D, H, W, C]

if 'field' in self.field_type:
    d_opt = self.d_opt[:,:,::-1] * tf.to_float(tf.shape(self.d_opt)[2])
    
    if self.w_field == 1:
        self.v_ = grad(d_opt)
    elif self.w_field == 0:
        self.v_ = curl(d_opt)
    else:
        pot = d_opt[...,0,None]
        strf = d_opt[...,1:]
        self.v_p = grad(pot)
        self.v_s = curl(strf)
        self.v_ = self.v_p*self.w_field + self.v_s*(1-self.w_field)
        
        v = self.v_[:,:,::-1]
        vx = v[...,0] / tf.to_float(tf.shape(v)[3]) 
        vy = -v[...,1] / tf.to_float(tf.shape(v)[2])
        vz = v[...,2] / tf.to_float(tf.shape(v)[1])
        v = tf.stack([vz,vy,vx], axis=-1)
        d = advect(d, v, order=self.adv_order, is_3d=True)
    elif 'velocity' in self.field_type:
        v = self.d_opt # [1,D,H,W,3]
        d = advect(d, v, order=self.adv_order, is_3d=True)
    else:
        # stylize by addition
        d += self.d_opt # [1,D,H,W,1]
  • b_num

batch_size

# of rotation matrix for batch process
self.b_num = self.v_batch
  • v, g, adv

这三个参数只在窗口包含多帧的情况下才会有。速度,梯度和平流梯度。
???这里不选择使用密度场平流而使用梯度场平流

# velocity fields to advect gradients [B,D,H,W,3]
if self.window_size > 1:
    self.v = tf.placeholder(dtype=tf.float32, name='velocity')
    self.g = tf.placeholder(dtype=tf.float32, name='gradient')
    self.adv = advect(self.g, self.v, order=self.adv_order, is_3d=True)
######
  • d_out

平流后的密度渲染结果

self.d_out = d
  • rot_mat, rot_mat_, views

rot_mat_是旋转矩阵,它用到了采样类型、self.rng即随机种子和视角数量,rot_mat和views暂时不清楚是什么意思

if self.rotate:
    d, self.rot_mat = rotate(d) # [b,D,H,W,1]
    
	# compute rotation matrices
    self.rot_mat_, self.views = rot_mat(self.phi0, self.phi1, self.phi_unit, 
        self.theta0, self.theta1, self.theta_unit, 
        sample_type=self.sample_type, rng=self.rng,
        nv=self.n_views)
  • d_img

从不同角度渲染的图像结果。shape: [B, H, W, 3]。
该参数是inception网络中的输入。
???这里不知道是一个密度场对应9个图像还是1个

  • layers

inception中带有Import和conv的所有层:

 'import/conv2d2_b',
 'import/conv2d2_w',
 'import/conv2d1_b',
 'import/conv2d1_w',
 'import/conv2d0_b',
 'import/conv2d0_w',
 'import/conv2d0_pre_relu/conv',
 'import/conv2d0_pre_relu',
 'import/conv2d0',
 'import/maxpool0',
 'import/localresponsenorm0',
 'import/conv2d1_pre_relu/conv',
 'import/conv2d1_pre_relu',
 'import/conv2d1',
 'import/conv2d2_pre_relu/conv',
 'import/conv2d2_pre_relu',
 'import/conv2d2'
self.layers = [op.name for op in self.graph.get_operations() if op.type=='Conv2D' and 'import/' in op.name]
  • content_loss, content_feature, style_loss, style_features, style_denoms, total_loss

损失函数

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值