Lung CT

A context encoder network that segments the lungs in CT scans, so abnormalities are faster to find.

When
May 2021 to Jun 2022
Team
With Poorva Bedmutha, guided by Ms. S. M. Hosamani, at PICT, Pune
Tools
Python, TensorFlow / Keras, OpenCV, U-Net, ResNet (pre-trained), DAC and RMP blocks, LUNA dataset
A hospital CT scanner room with the scanner ring and patient table
Medical imaging. A photograph of the setting, not the project itself.

The problem

Lungs in CT scans are still segmented by hand, and many clinics read scans without software, which delays diagnosis. Automatic segmentation gets hard when the tissue is abnormal: nodules and blood vessels have to be segmented with the lung itself, and the bronchi are easily mistaken for lung tissue.

How I built it

  • Encoder swap.

    I replaced the U-Net encoder with a pre-trained ResNet, keeping its first four feature blocks and dropping the pooling and fully connected layers.

  • Context extractor.

    Between encoder and decoder sit a dense atrous convolution block, four atrous branches in cascade, and a residual multi-kernel pooling block that pools at four kernel sizes. Together they see more context without losing spatial detail.

  • Decoder.

    Transposed convolutions with skip connections from the encoder return a mask the same size as the input.

  • Data.

    534 labelled 2D CT slices from the LUNA dataset at 512×512, split 80/20 for training and testing. The network has 281 layers and takes a 448×448 input.

Results

87%

test accuracy segmenting lungs in CT scans.

+2%

over modern medical image segmentation methods.

+20%

segmentation performance on complex lung tissue images.

In hindsight

Everything here works on 2D slices. Moving to 3D scans was the next step, along with pushing past 87%.
Talk about a project like this