Question 7
The following code snippets represent different blocks in the Fast R-CNN pipeline. Identify the correct arrangement of these blocks in the Fast R-CNN architecture:
A. Block A
import torchimport torch.nn as nn
class RegionProposal(nn.Module): def __init__(self, in_channels): super(RegionProposal, self).__init__() self.conv = nn.Conv2d(in_channels, 256, kernel_size=3, stride=1, padding=1) self.cls_layer = nn.Conv2d(256, 18, kernel_size=1) self.reg_layer = nn.Conv2d(256, 36, kernel_size=1)
def forward(self, x): features = torch.relu(self.conv(x)) cls_logits = self.cls_layer(features) reg_deltas = self.reg_layer(features) return cls_logits, reg_deltasB. Block B
import torchvision.models as models
class FeatureExtractor(nn.Module): def __init__(self): super(FeatureExtractor, self).__init__() vgg = models.vgg16(pretrained=True) self.features = vgg.features # Use pre-trained VGG16 convolutional layers
def forward(self, x): return self.features(x)C. Block C
from torchvision.ops import roi_pool
class ROIPooling(nn.Module): def __init__(self, output_size=(7, 7)): super(ROIPooling, self).__init__() self.output_size = output_size
def forward(self, feature_map, proposals): return roi_pool(feature_map, proposals, output_size=self.output_size)D. Block D
class FullyConnectedHead(nn.Module): def __init__(self, in_features, num_classes): super(FullyConnectedHead, self).__init__() self.fc1 = nn.Linear(in_features, 4096) self.fc2 = nn.Linear(4096, 4096) self.cls_score = nn.Linear(4096, num_classes) self.bbox_pred = nn.Linear(4096, num_classes * 4) # 4 coordinates per class
def forward(self, x): x = torch.relu(self.fc1(x)) x = torch.relu(self.fc2(x)) cls_logits = self.cls_score(x) bbox_deltas = self.bbox_pred(x) return cls_logits, bbox_deltasWhich of the following is the correct arrangement of these blocks in the Fast R-CNN architecture?
B, A, C, D
A, B, C, D
B, C, D, A
C, A, B, D