Чем Fast R-CNN отличается от R-CNN?
Answer from AI
sobes.tech AI
Что хотят услышать интервьюеры:
Fast R-CNN устраняет главные узкие места R-CNN: убирает многократный прогон CNN для каждого region proposal и считает признаки для изображения один раз. После этого для каждого региона берутся ROI-признаки из общей feature map, что делает обучение и inference значительно быстрее. Также Fast R-CNN обучается более цельно и обычно точнее за счет end-to-end оптимизации.
Определение:
R-CNN и Fast R-CNN — это два этапа эволюции детекторов объектов на базе CNN.
R-CNN сначала генерирует предложения областей, затем для каждой области отдельно прогоняет CNN, после чего классифицирует результат и уточняет bounding box. Это очень дорого по времени и по памяти.
Fast R-CNN делает один forward pass по всему изображению, получает общую карту признаков, а для каждого region proposal извлекает нужный фрагмент через ROI-пулинг. Дальше на этих признаках одновременно выполняются классификация и регрессия координат. За счет этого подход быстрее и проще в обучении.
Пример использования:
Допустим, нужно найти на фотографии людей, машины и дорожные знаки.
В R-CNN каждая предложенная область изображения отдельно проходит через CNN, поэтому при сотнях proposals вычисления сильно дублируются.
В Fast R-CNN изображение обрабатывается один раз, затем для каждого proposal берутся признаки из общей feature map.
# Упрощённая схема пайплайна Fast R-CNN
image = load_image("street.jpg")
feature_map = cnn_backbone(image) # один раз для всего изображения
proposals = selective_search(image) # области-кандидаты
for roi in proposals:
roi_features = roi_pool(feature_map, roi)
cls_scores = classifier_head(roi_features)
bbox_deltas = regressor_head(roi_features)
Пояснение кода:
Код показывает идею Fast R-CNN по шагам.
Сначала изображение подаётся в backbone CNN, и на выходе получается общая feature map. Затем алгоритм генерации областей, например selective search, выдаёт список candidate boxes. Для каждого ROI из общей карты признаков извлекается фиксированный по размеру вектор через ROI pooling. После этого один head предсказывает класс объекта, а второй — поправки к координатам bounding box.
Именно общий прогон CNN для всего изображения отличает Fast R-CNN от R-CNN, где этот шаг выполнялся отдельно для каждого региона.
Ключевые моменты:
- В R-CNN CNN запускается отдельно для каждого region proposal, в Fast R-CNN — один раз на всё изображение.
- Fast R-CNN использует ROI pooling для извлечения признаков из общей feature map.
- Fast R-CNN обучается end-to-end, а R-CNN — более разрозненно по этапам.
- Fast R-CNN обычно быстрее и экономичнее по памяти.
- Для детекции Fast R-CNN одновременно решает две задачи: классификацию объекта и регрессию bounding box.
- Основной источник ускорения — устранение повторных вычислений признаков для каждого proposal.