wangwei-cmd / CT-image-reconstruction

15 stars 5 forks source link

您好,请教一下是如何解决fbp层误差反向传播问题的? #1

Open leekunpeng opened 3 years ago

leekunpeng commented 3 years ago

您好,很高兴能阅读到您公开您论文的代码;对于论文中描述得FBP的部分对应的代码是下面decode对吗?

def decode(self, sin_fan):
        AT, alpha, h, w_c=self.AT,self.alpha,self.h,self.w_c
        cos_alpha = tf.math.cos(alpha)
        s_fan_shape = self.s_shape
        batch=tf.shape(sin_fan)[0]
        sin_fan1 = h * tf.expand_dims(sin_fan[:, :, :, 0] * cos_alpha, -1)
        sin_fan1 = tf.reshape(sin_fan1, [-1, s_fan_shape[1], 1])
        filter_s_fan = tf.nn.conv1d(sin_fan1, tf.expand_dims(w_c, -1), stride=1, padding='SAME')
        # filter_s_fan1=tf.reshape(filter_s_fan,s_fan_shape)
        filter_s_fan2 = tf.reshape(filter_s_fan, [batch, -1])
        filter_s_fan2 = tf.transpose(filter_s_fan2)
        rf = tf.sparse.sparse_dense_matmul(AT, filter_s_fan2)
        rf = tf.transpose(rf)
        rf = tf.reshape(rf, [batch, 512, 512, 1])
        return rf

正向传播是系统矩阵乘上投影数据,我比较感兴趣的是网络训练时,在反向传播过程中,误差是如何经过这一个fbp层传递误差到投影域的?

wangwei-cmd commented 3 years ago

你好,反向传播是由tensorflow的自动微分技术自动求导实现的。 对应代码是train_step函数里的

with tf.GradientTape() as tape: predictions = model(inputs, training=1) loss = Loss(labels, predictions) grads = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(grads, model.trainable_variables))

发自我的iPhone

------------------ 原始邮件 ------------------ 发件人: 小李努力再努力 @.> 发送时间: 2021年4月12日 15:41 收件人: wangwei-cmd/CT-image-reconstruction @.> 抄送: Subscribed @.***> 主题: 回复:[wangwei-cmd/CT-image-reconstruction] 您好,请教一下是如何解决fbp层误差反向传播问题的? (#1)

leekunpeng commented 3 years ago

你好,反向传播是由tensorflow的自动微分技术自动求导实现的。 对应代码是train_step函数里的 with tf.GradientTape() as tape: predictions = model(inputs, training=1) loss = Loss(labels, predictions) grads = tape.gradient(loss, model.trainable_variables) optimizer.apply_gradients(zip(grads, model.trainable_variables)) 发自我的iPhone ------------------ 原始邮件 ------------------ 发件人: 小李努力再努力 @.> 发送时间: 2021年4月12日 15:41 收件人: wangwei-cmd/CT-image-reconstruction @.> 抄送: Subscribed @.***> 主题: 回复:[wangwei-cmd/CT-image-reconstruction] 您好,请教一下是如何解决fbp层误差反向传播问题的? (#1)

老师您好

感谢回复!<(^-^)>

我还有以下几个小问题,期望能与您进一步讨论。

  1. 请问您是将系统矩阵和滤波器乘在一起作为一个新的矩阵,将其用作投影域到图像域转换的吗?
  2. 您说误差反向传播是自动微分执行的。我目前的一些理解和看法是这样:在CT重建中,投影域->图像域 和 图像域->投影域 这两个域转换是不一样的,正向传播将投影域数据乘反投影操作系统矩阵后变为图像域数据,那么在反向传播时图像域的误差又该如何传递到投影域?这是我不太明白的地方,很希望能听听您对这方面的看法。
  3. 同样的方法在Adaptive-Net中也有使用,该文章关于投影层(FBP层)误差反向传播讨论如下,该文章认为正向传播为(ATF,AT时反投影系统矩阵,F为滤波器),而反向传播为((ATF)T=FT*A,即滤波器F转置乘上正投影系统矩阵A)ps:对应原文公式10;请问这种表示方式和您论文中采用的是一种方式吗?

Best.

wangwei-cmd commented 3 years ago

您好,我是先对正弦图滤波再乘以AT的,并没有直接把滤波和AT合并为一个矩阵。把滤波和AT合并为一个矩阵也是可行的,一维卷积滤波变为乘法矩阵时是一个较大的循环矩阵,我觉得麻烦,所以就直接先滤波再乘以AT。反向传播(ATF)T=FTA是对的,但这时的F已经不是一维的滤波器了,而是一个很大的卷积循环矩阵。