Эта серия статей через маленькую картинку М в
Faster R-CNN
Деконструкция чудесного путешествия вFaster R-CNN
сетевая структураКод входа см.:pytorch-tutorial/framework.py
Есть первобытное племя, называемое страной картинок, где есть всякие картинки.Когда рождается каждая картинка, в разных карманах на теле лежат разные предметы, и судьба каждой картинки - достать ее.Знай в какой карман находится в и что.
В этом племени живет много мудрых архитекторов, они строят один лабиринт за другим. Некоторые из этих лабиринтов имеют сложную структуру, некоторые хитроумно устроены и неровны, от нескольких дней до целой жизни. И каждая картинка, завершающая лабиринт, может завершить миссию этой жизни.
Одному из архитекторов, RHRS, потребовалось несколько лет, чтобы создать проект под названиемFaster R-CNN
Лабиринт был построен таинственным образом и стал одним из самых известных лабиринтов того времени.
В этот день, прежде чем картина Сяо М пришла в этот лабиринт, он постучал в дверь и увидел следующие слова, выгравированные на стене крыльца у входа в лабиринт.
Те, кто хочет пройти этот лабиринт, должны сначала пройти следующие пять уровней, как сложных, так и легких, продолжайте думать и запаситесь терпением.
Первый уровень:TransformПредварительно обработайте изображение, чтобы оно удовлетворяло входным данным
Faster R-CNN
минимальные требования
Второй уровень:BackboneПолучить карту характеристик изображения
Третий уровень:RPNУкажите возможные области изображения, которые содержат цель обнаружения
Четвертый уровень:ROI Pooling & FlattenОбработать все возможные регионы для удовлетворения требований последующей обработки
Пятый уровень:Классификация и регрессияКлассифицируйте полученную возможную область, чтобы узнать, что это такое, и выполните регрессию, чтобы узнать, где она находится.Наконец, после постобработки полученные категории и позиции можно отметить на исходном изображении.
Дизайн всего лабиринта должен быть дан под текстом Текст под рисунком указывает на то, что детальный дизайн каждого уровня дан между прочим.
Пока Сяо М думал об этом, вниз упал свиток, и когда он его открыл, казалось, что основная структура лабиринта была полностью написана ниже, например:
class FasterRCNNBase(nn.Module):
'''
transform: 即关卡一,用于对图片做预处理
backbone: 即关卡二,用于提取图片的特征(Feature Map)
rpn: 即关卡三,生成图片中可能含有目标的区域(Region Proposal)
roi_heads: 即关卡四、五的集成,用于从获取最后的含有目标的区域
'''
def __init__(self, transform, backbone, rpn, roi_heads):
super(FasterRCNNBase, self).__init__()
self.transform = transform
self.backbone = backbone
self.rpn = rpn
self.roi_heads = roi_heads
def forward(self, images: List[Tensor], targets=None):
raw_image_shape: List[Tuple[int, int]] = []
for image in images:
raw_image_shape.append((image.shape[1], image.shape[2]))
'''第一关卡'''
images, targets = self.transform(images, targets) # 对图像进行预处理
'''第二关卡'''
features = self.backbone(images.tensors) # 将预处理后的图像输入到 backbone 得到特征图
'''第三关卡'''
# 将特征图输入到RPN中,得到 region proposals
proposals, proposal_losses = self.rpn(images, features, targets)
'''第四、五关卡'''
# 将 特征图、可能含有目标的区域、预处理后的图像、targets 传入 roi_heads 得到 检测目标
detections, detector_losses = self.roi_heads(
features, proposals, images, targets
)
''' 最终,将预测的bboxes还原到原始图像尺度上 '''
detections = self.transform.post_process(
detections, images, raw_image_shape
)
losses = {}
losses.update(detector_losses)
losses.update(proposal_losses)
return losses, detections
Прочитав текстовое описание, чертежи и структуру конструкции, Сяо М. совершенно уверен, что сможет пройти весь лабиринт.
Свитком Сяо М оттолкнул его第一关: Transform
дверь, затемTransform
Что в нем? И послушайте следующее разложение...