- 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
损失函数
550

被折叠的 条评论
为什么被折叠?



