논문

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

Real-time compressive sensing spectral domain optical coherence tomography

[cite]http://dx.doi.org/10.1364/OL.39.000076[/cite]

Compressive sensing (CS) 는 의료 영상 분야에서 아주 중요한 역할을 하고 있습니다. 어떤 한 도메인에서 데이터가 sparse하고 그것도 서로 상관성이 없다면, CS는 Nyquist rate보다 적게 샘플링을 하고도 그 데이터를 완벽하게 복원할 수 있게 해 줍니다. 따라서 이를 CS를 이용하면 데이터를 최소한으로 획득하면서도 처리 속도는 빠르게 하고, 데이터 전송 대역폭과 저장 공간을 줄이는 효과가 있습니다.

이는 optical coherence tomography (OCT) 에도 적용되어 k-space에서의 데이터를 본래 필요한 양보다 적게 샘플링 (under-sampling) 하면서도 OCT 이미지를 복원할 수 있게 되었습니다. 그럼에도 불구하고 CS를 이용한 복원에는 계산 시간이 많이 필요로 하기 때문에 일반적인 SD-OCT 속도인 80K/s A-scan 을 따라가기가 힘이 든다는 점이 걸림돌입니다.

따라서 이 서신의 저자는 3개의 GPU를 병렬로 활용하여 이를 극복하려고 시도하였습니다. 이제 하나하나 살펴보도록 하겠습니다.

CS OCT 이미징에서 A-scan 이미지 $ \mathbf{x} $ 는, wavenumber에 선형인 스펙트럼 데이터를 under-sampling한 $ \mathbf{y_u} $를 이용하여 아래 식의 unconstrained nonlinear convex optimization 문제를 풀어냄으로써 얻어집니다.

$$\text{minimize}_{\mathbf{x}} \frac{1}{2} || \mathbf{F_ux - y_u } ||^2_2 + \tau ||\mathbf{Wx}||_1$$

여기서 $ \mathbf{W} $ 는 sparse 데이터로 만들어주는 연산자로 보통 $ \mathbf{I} $를 사용합니다. 또한 $ \mathbf{F_u} $ 는 under-sampling 된 데이터를 위한 Fourier transform matrix 입니다. $ \tau $는 복원된 A scan 의 sparse 정도를 조절하는 정규화 변수입니다.

위의 식은 CUDA용 라이브러리인 SpaRSA를 이용하여 그 해를 찾을 수 있습니다. 사실 SpaRSA에서는,

$$\mathbf{x}^{k+1} = \min_z \frac{1}{2} ||\mathbf{z - u^k}||^2-2 + \frac{\tau}{a_k} || z ||_1$$

$$\mathbf{u}^k = \mathbf{x}^k - (1/ a_k ) \mathbf{F}^T_u (\mathbf{F}_u\mathbf{x}^k - \mathbf{y}_u)$$

와 같은 꼴의 식을 k번 반복한 결과를 계산할 수 있습니다. 이때 $ a_k $는 양수입니다. 위의 식은 처음 세웠던 식의 quadratic separable approximation 이라고 볼 수 있습니다. 그리고 이 식을 이용하면 최적해 벡터의 각 성분을 개별적으로 soft threshold 연산을 통해서 최적화 할 수 있게 됩니다. 자세한 내용은 참조 논문 12번을 살펴보시면 됩니다.

다른 연구와는 달리 여기서는 계산의 반복횟수를 $ \beta $로 고정하고 있습니다. 보통 최적화 기법에서는 계산을 반복하다가 원하는 수준이 나오면 중단하는 반면 여기서는 무조건 반복횟수를 채워야합니다. 이는 분기가 발생하면 성능이 저하되는 GPU의 특성을 반영한 것입니다. 사실 $ \beta $ 내로 원하는 수준을 달성하였다면 문제될 것이 없습니다. 하지만 그렇지 않은 경우에는 이미지의 질이 떨어지긴 하겠으나 이런 경우 다음 이미지부터 $ \beta $를 늘리거나 $ \tau $를 줄여 적용하여 문제를 해결할 수 있습니다.

계산은 A scan 별로 이루어지는 것이 아니라 B scan (1000 A scan) 단위로 이루어지며, under-sampling 된 데이터는 공통된 sampling mask를 이용하여 계산되었습니다.

아무리 GPU를 이용하였다고 하지만 1개를 모자랐는지 GPU를 3개 사용하였습니다. 사용된 GPU는 GTX 670과 2대의 Tesla C2075 이며, 특별히 역할을 나누지는 않고 같은 작업을 분산하여 처리하도록 구성하였습니다.

실험결과 $ \beta = 10 , \tau = 2.5 $ 샘플링은 40%, 45%, 500 A scan / frame 의 환경에서 카메라의 동작 속도인 72fps를 모두 실시간으로 처리가 가능하였습니다.


Tags:
Add a Comment Trackback