U-Net is mainly used for image segmentation. This means it labels each pixel as part of an object or background. The key metrics are Dice coefficient and Intersection over Union (IoU). They measure how well the predicted mask matches the true mask. Accuracy alone can be misleading because most pixels might be background. Dice and IoU focus on overlap, which is what matters for segmentation quality.
U-Net architecture in Computer Vision - Model Metrics & Evaluation
| Predicted Positive | Predicted Negative |
|--------------------|--------------------|
| True Positive (TP) | False Negative (FN) |
| False Positive (FP) | True Negative (TN) |
Total pixels = TP + FP + TN + FN
Dice coefficient = 2 * TP / (2 * TP + FP + FN)
IoU = TP / (TP + FP + FN)
This matrix counts pixels, not images. TP means pixels correctly labeled as object. FP means pixels wrongly labeled as object. FN means object pixels missed.
Precision means how many predicted object pixels are correct. High precision means few false positives (wrongly labeled pixels).
Recall means how many true object pixels were found. High recall means few false negatives (missed pixels).
For medical images, missing a tumor pixel (low recall) is worse than marking some extra pixels (lower precision). So recall is more important.
For autonomous driving, marking too many pixels as obstacles (low precision) can cause unnecessary stops. So precision matters more.
Dice and IoU balance precision and recall by measuring overlap.
- Good: Dice > 0.8 and IoU > 0.7 usually mean the model segments objects well.
- Bad: Dice < 0.5 or IoU < 0.4 means poor overlap, many pixels are wrong.
- High accuracy (>90%) can be misleading if background dominates and object pixels are few.
- Accuracy paradox: High accuracy but poor segmentation if background pixels dominate.
- Data leakage: Using test images similar to training can inflate metrics.
- Overfitting: Very high training Dice but low test Dice means model memorizes training masks.
- Ignoring class imbalance: Small objects may be missed if metrics do not focus on them.
No, it is not good. The high accuracy likely comes from many background pixels correctly labeled. But 12% recall means the model misses 88% of tumor pixels. This is dangerous in medical use because tumors are not detected. You need to improve recall even if accuracy drops.
Practice
Solution
Step 1: Understand U-Net's design goal
U-Net is designed to segment images, meaning it finds exact shapes and boundaries.Step 2: Compare with other tasks
Classification assigns labels, generation creates images, compression reduces size; these are not U-Net's main tasks.Final Answer:
To find exact shapes and boundaries in images -> Option CQuick Check:
U-Net = segmentation [OK]
- Confusing segmentation with classification
- Thinking U-Net generates images
- Assuming U-Net compresses images
Solution
Step 1: Recall U-Net architecture parts
U-Net has an encoder path that shrinks and a decoder path that expands the image size.Step 2: Eliminate incorrect options
Single shrinking path or only expanding path do not match U-Net. Independent paths without connection are incorrect.Final Answer:
Two paths: one shrinks and one expands the image size -> Option AQuick Check:
U-Net = encoder + decoder [OK]
- Thinking U-Net only shrinks images
- Believing U-Net only expands images
- Ignoring the connection between paths
import torch
import torch.nn as nn
class SimpleUNet(nn.Module):
def __init__(self):
super().__init__()
self.down = nn.Conv2d(1, 16, 3, padding=1)
self.up = nn.ConvTranspose2d(16, 1, 2, stride=2)
def forward(self, x):
x1 = self.down(x) # shrink
x2 = self.up(x1) # expand
return x2
model = SimpleUNet()
input_tensor = torch.randn(1, 1, 64, 64)
output = model(input_tensor)
print(output.shape)
What will be the printed output shape?Solution
Step 1: Analyze down convolution output size
Input is 64x64, Conv2d with kernel=3, padding=1 keeps size 64x64, output channels=16.Step 2: Analyze up convolution output size
ConvTranspose2d with kernel=2, stride=2 doubles spatial size to 128x128, output channels=1.Step 3: Check actual output shape
Output shape is (batch=1, channels=1, height=128, width=128).Final Answer:
torch.Size([1, 1, 128, 128]) -> Option BQuick Check:
Upsample doubles size = 128x128 [OK]
- Assuming Conv2d changes size without padding
- Ignoring stride effect in ConvTranspose2d
- Mixing channel numbers in output
Solution
Step 1: Understand skip connections role
Skip connections pass fine details from encoder to decoder to improve segmentation accuracy.Step 2: Effect of missing skip connections
Without them, decoder lacks detail info, causing worse segmentation results.Final Answer:
The model will lose fine details and perform worse on segmentation -> Option DQuick Check:
Skip connections = better detail [OK]
- Thinking fewer connections always improve accuracy
- Assuming model will error without skip connections
- Believing speed improves without accuracy loss
Solution
Step 1: Identify challenge with small objects
Small objects need detailed features and context captured by deeper layers.Step 2: Evaluate options
Increasing encoder depth helps learn more features. Removing skip connections loses detail. Larger kernels may blur small details. More pooling reduces spatial resolution, losing small object info.Final Answer:
Increase the depth of the encoder to capture more features -> Option AQuick Check:
Deeper encoder = better small object features [OK]
- Removing skip connections harms detail
- Larger kernels blur small features
- More pooling loses small object info
Ready to prove it?
Pass the test and this pattern moves unknown
