В чем отличие подходов U-Net и FPN в сегментации?
Что проверяют
Понимаете ли вы, как в каждой архитектуре сливаются признаки, а не только «U-Net для медицины, FPN для детекции». Следом обычно спрашивают, что вы выберете для своей задачи и чем оба варианта отличаются от DeepLab с ASPP.
Как отвечать
Обе архитектуры решают одну проблему: энкодер сжимает изображение и теряет пространственные детали, а маска нужна в полном разрешении. Разница в том, как собран декодер.
- U-Net (Ronneberger и соавторы, 2015): симметричный декодер, на каждом уровне апсемплинг и конкатенация с картой признаков энкодера того же разрешения, затем свёртки. Каналов в декодере много, предсказание делается на последнем уровне в полном разрешении;
- FPN (Lin и соавторы, 2017): придумана для детекции. Путь сверху вниз идёт с латеральными связями: признаки энкодера приводятся свёрткой 1×1 к одному числу каналов (обычно 256) и складываются с апсемплированным верхним уровнем. Получается пирамида карт, каждая пригодна для предсказания. Для сегментации (как в Panoptic FPN) уровни поднимают до 1/4 входа, суммируют, предсказывают маску там и интерполируют до полного размера.
Что из этого следует на практике:
- вес: декодер FPN легче по параметрам и памяти, U-Net тяжелее, особенно на больших изображениях;
- детали: U-Net выдаёт маску в полном разрешении, FPN в 1/4, поэтому на тонких объектах U-Net обычно точнее;
- совместимость: FPN естественно встраивается в детекторы вроде Mask R-CNN.
Сейчас обе почти всегда берут с предобученным энкодером (ResNet, EfficientNet, ConvNeXt), например через segmentation_models_pytorch, где есть smp.Unet и smp.FPN. Выбор между ними решает эксперимент на вашей валидации по IoU или Dice.
Где спотыкаются
Называют FPN самостоятельной моделью. Это шея или декодер поверх бэкбона, без энкодера она ничего не делает.
Говорят, что U-Net не работает с разными масштабами. Её skip connections как раз соединяют несколько масштабов, просто иначе, чем пирамида.
Приписывают U-Net особую пригодность для маленьких датасетов. В оригинальной статье этому помогали сильные аугментации, а сейчас на малых данных выручает предобученный энкодер, а не тип декодера.