Начало Faster R-CNN

компьютерное зрение
Начало Faster R-CNN

Эта серия статей через маленькую картинку М вFaster R-CNNДеконструкция чудесного путешествия вFaster R-CNNсетевая структура

Код входа см.:pytorch-tutorial/framework.py

Есть первобытное племя, называемое страной картинок, где есть всякие картинки.Когда рождается каждая картинка, в разных карманах на теле лежат разные предметы, и судьба каждой картинки - достать ее.Знай в какой карман находится в и что.

В этом племени живет много мудрых архитекторов, они строят один лабиринт за другим. Некоторые из этих лабиринтов имеют сложную структуру, некоторые хитроумно устроены и неровны, от нескольких дней до целой жизни. И каждая картинка, завершающая лабиринт, может завершить миссию этой жизни.

Одному из архитекторов, RHRS, потребовалось несколько лет, чтобы создать проект под названиемFaster R-CNNЛабиринт был построен таинственным образом и стал одним из самых известных лабиринтов того времени.

В этот день, прежде чем картина Сяо М пришла в этот лабиринт, он постучал в дверь и увидел следующие слова, выгравированные на стене крыльца у входа в лабиринт.

Те, кто хочет пройти этот лабиринт, должны сначала пройти следующие пять уровней, как сложных, так и легких, продолжайте думать и запаситесь терпением.

Первый уровень:TransformПредварительно обработайте изображение, чтобы оно удовлетворяло входным даннымFaster R-CNNминимальные требования
Второй уровень:BackboneПолучить карту характеристик изображения
Третий уровень:RPNУкажите возможные области изображения, которые содержат цель обнаружения
Четвертый уровень:ROI Pooling & FlattenОбработать все возможные регионы для удовлетворения требований последующей обработки
Пятый уровень:Классификация и регрессияКлассифицируйте полученную возможную область, чтобы узнать, что это такое, и выполните регрессию, чтобы узнать, где она находится.

Наконец, после постобработки полученные категории и позиции можно отметить на исходном изображении.

Дизайн всего лабиринта должен быть дан под текстом Текст под рисунком указывает на то, что детальный дизайн каждого уровня дан между прочим.

image.png

Пока Сяо М думал об этом, вниз упал свиток, и когда он его открыл, казалось, что основная структура лабиринта была полностью написана ниже, например:

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Что в нем? И послушайте следующее разложение...