
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%.
