Filtros bilaterales conjuntos entrenables para mejorar la estabilidad de predicción en TC de dosis baja

Las redes neuronales artificiales generalmente se entrenan a través de la optimización del descenso de gradiente al minimizar una métrica de pérdida L calculado a partir de predicciones de red para cumplir una tarea deseada33. Esto requiere calcular la derivada de la pérdida L con respecto a cada parámetro del modelo entrenable para actualizar iterativamente la red durante el entrenamiento.

En esta sección, el gradiente analítico de la capa JBF entrenable propuesta con respecto a la entrada del filtro, la imagen de guía y los parámetros del filtro se deriva como la contribución algorítmica de nuestro trabajo. La figura 1 ilustra el principio de funcionamiento general de la capa de eliminación de ruido. En la operación de filtro directo, una imagen de entrada se convoluciona con dos núcleos gaussianos, a saber, uno espacial y uno de rango. El núcleo espacial promedia los píxeles dentro de la distancia del núcleo del filtro como un filtro gaussiano convencional que suaviza la imagen. Un kernel de rango adicional, llamado kernel de rango, pesa la influencia de los píxeles del vecindario dependiendo de su diferencia de intensidad con el píxel filtrado para evitar el desenfoque de los bordes. El JBF deriva su kernel de rango en una imagen de guía externa que permite emplear información adicional durante la operación de filtrado.

Figura 1
Figura 1

Ilustración de la capa de filtro bilateral conjunta entrenable propuesta. En el pase hacia adelante (flechas negras), la entrada (X_i) se filtra usando parámetros (sigma _gamma ) ((gamma en )) y la imagen de guía (Z_i) para predecir la imagen sin ruido (). La pérdida del modelo se indica como L. Las derivadas analíticas se calculan en el paso hacia atrás (flechas rojas) hacia la entrada del filtro, la guía y los parámetros.

A continuación, se utilizan letras en negrita para indicar vectores. Según Petschnigg et al.30 la operación JBF se define como

$$begin _k = frac underbrace_ end$$

(1)

y el factor de normalización (w_k) como

$$begin w_k := sum _ G_(_k – _n) G_(Z_k – Z_n), end$$

(2)

con la predicción sin ruido (varvec) indexado por (k en )la imagen de entrada ruidosa () en el barrio voxel (n in ) alrededor ky una imagen de guía (). Las imágenes de orientación deben proporcionar información adicional para la operación del filtro y pueden ser, por ejemplo, imágenes adicionales emparejadas con la entrada del filtro o predicciones aprendidas de una red neuronal, como se presenta más adelante en este trabajo. El núcleo del rango de intensidad gaussiana

$$begin G_(c) := exp left( -fracright) end$$

(3)

se deriva de las diferencias de intensidad en la imagen de guía () y refuerza la sensibilidad de borde de la operación de filtrado. Un segundo kernel de filtro espacial (G_) pondera los vóxeles según su distancia espacial derivada de las posiciones (_k in ^d) y (_n in ^d) con (d=3) para filtrado tridimensional

$$begin G_() = prod _ exp left( -fracderecha) . end$$

(4)

Las tuberías DL requieren el cálculo del gradiente de la función de pérdida L con respecto a cada parámetro entrenable para permitir la optimización basada en datos. Podemos calcular el gradiente para nuestra capa de filtro bilateral conjunta usando la regla de la cadena

$$begin frac = frac frac = sum _k frac frac end$$

(5)

con los cuatro anchos de kernel (sigma _gamma ) representando los únicos pesos entrenables de la capa propuesta al filtrar en tres dimensiones ((gamma en )). La derivada de la función de pérdida con respecto a la predicción del filtro. (frac) es proporcionado por la retropropagación de la pérdida a través de operaciones diferenciables aplicadas en la salida de la capa JBF, por ejemplo, capas convolucionales subsiguientes o la propia función de pérdida. El término (frac) se puede escribir usando la definición del algoritmo de filtro bilateral conjunto de la ecuación (1) junto con la regla de diferenciación del producto y la cadena

$$begin frac = – w_k^ alpha _k frac + w_k^ frac, end$$

(6)

las derivadas parciales

$$begin frac&= sum _ frac G_(_k – _n) G_(Z_k – Z_n), end$$

(7)

$$begin frac&= sum _ X_n frac G_(_k – _n) G_(Z_k – Z_n), end $$

(8)

y los términos gaussianos

$$begin frac G_(c) = G_(c) frac. end$$

(9)

Además, la derivada de la pérdida con respecto a cada vóxel de entrada (X_i) de los rendimientos del filtro bilateral conjunto

$$begin begin frac &=frac frac = sum _k frac frac\ &=sum _k frac w_k^ G_ (_k – _i) G_(Z_k – Z_i) end end$$

(10)

usando la definición del JBF de la ecuación. (1). Este cálculo de gradiente para la entrada del filtro es necesario para permitir la inclusión del filtro como una capa entrenable en una canalización diferenciable. el derivado de L con respecto a cada vóxel de la imagen guía (Z_i) se puede calcular como

$$begin begin frac =&sum _k frac frac = sum _k frac left( – w_k^ alpha _k frac + w_k^ frac right) end end$ ps

(11)

donde se deben distinguir los dos casos siguientes: El caso 1 deriva gradientes a vóxeles arbitrarios ubicados en la vecindad del filtro ((k ne i)) de la imagen de guía. Por el contrario, el Caso 2 define el gradiente hacia el vóxel central ((k = yo)) de la ventana de filtro correspondiente.

Caso 1: ((varvec))

$$begin izquierda. fracright| _&= ,G_(_k – _i) G_(Z_k – Z_i) frac\ izquierda. fracright| _&= ,G_(_k – _i) G_(Z_k – Z_i) frac X_i end$$

(12)

Caso 2: ((varvec))

$$begin izquierda. fracright| _ &= ,sum _ G_(_i – _n) G_(Z_i – Z_n) frac\ left. fracright| _&= ,sum_ G_(_i – _n) G_(Z_i – Z_n) frac X_n. end$$

(13)

Calculamos los gradientes analíticos en el paso hacia atrás de un JBF completamente entrenable usando el enlace CUDA del PyTorch marco de aprendizaje profundo34 para aprovechar el rendimiento computacional. El tiempo de procesamiento de una (512 veces 512) imagen usando (5 veces 5)/(11 veces 11) las ventanas del núcleo de píxeles están alrededor (1,8,texto)/(8.0,texto) en la GPU y (69,texto)/(350,texto) en la CPU. En comparación, antorcha.nn.Conv2d capas (PyTorch) requieren aproximadamente (0.1,texto)/(0.2,texto) (GPU) y (8,texto)/(20,texto) (CPU) para procesar la imagen de un solo canal. Para ambas capas, los cálculos de gradiente tienen tiempos de ejecución comparables a medida que avanzan. Todos los tiempos de ejecución se estimaron promediando 50 pases repetidos hacia adelante/atrás a través de las capas respectivas utilizando un NVIDIA Quadro RTX 4000 GPU. Tenga en cuenta que los tiempos de ejecución pueden variar mucho según el hardware utilizado.

El tamaño de la ventana de filtro del JBF se elige dinámicamente en función de los tamaños del núcleo espacial como (5 cdot sigma _s). Esto asegura que (>98,%) de la masa del núcleo del filtro gaussiano está contenida en la ventana del filtro, lo que resultó ser una compensación razonable entre la precisión y la complejidad computacional del algoritmo.

Nuestra capa de filtro está disponible públicamente en https://github.com/faebstn96/trainable-joint-bilateral-filter-source y se puede instalar a través del conocido Python Package Index (PyPI) como capa PyTorch plug-and-play. Además, nuestro repositorio de código contiene scripts de ejemplo y un script de prueba que compara la implementación de los gradientes analíticos con aproximaciones numéricas de gradiente utilizando el antorcha.autograd.gradcheck para asegurarse de que la derivada del filtro se implemente correctamente.

Fuente del artículo

Deja un comentario