Когда искал альтернативы, я прочитал о SwinTransformer V2 и Я нашел это многообещающим, особенно для приложений с изображениями высокого разрешения. Поскольку все изображения в моем наборе данных также имеют размер 1200 x 1600, и я не хочу их уменьшать, я хотел бы настроить Faster R-CNN для использования магистральной сети Swin V2 и, возможно, добавить FPN и реализовать Cascade R-CNN. голова. Однако я сталкиваюсь с проблемами несоответствия размеров позвоночника, шеи и головы RPN.
Это то, что я придумал на данный момент (я решил использовать базовую модель );
Код: Выделить всё
import torch
from torch import nn
from torchvision.models.detection import FasterRCNN
from torchvision.models.detection.rpn import AnchorGenerator
from torchvision.models.swin_transformer import swin_v2_b, Swin_V2_B_Weights
from torchvision.ops import MultiScaleRoIAlign
import torchvision.transforms as transforms
import requests
from PIL import Image
NUM_CLASSES = 100
trainable_layers = 2
class CustomSwin(nn.Module):
def __init__(self, backbone):
super().__init__()
self.backbone = backbone
self.out_channels = 1024
def forward(self, x):
return torch.permute(self.backbone(x), (0, 3, 1, 2))
backbone = swin_v2_b(weights=Swin_V2_B_Weights.DEFAULT)
# Remove the classification head
backbone.norm = nn.Identity()
backbone.permute = nn.Identity()
backbone.avgpool = nn.Identity()
backbone.flatten = nn.Identity()
backbone.head = nn.Identity()
# Freeze all parameters
for param in backbone.parameters():
param.requires_grad = False
# Unfreeze the last trainable_layers
for layer in list(backbone.features)[-trainable_layers:]:
for param in layer.parameters():
param.requires_grad = True
custom_backbone = CustomSwin(backbone)
# Added smaller sizes for really small objects
anchor_generator = AnchorGenerator(
sizes=((8, 16, 32, 64, 128, 256, 512),), aspect_ratios=((0.5, 1.0, 2.0),)
)
roi_pooler = MultiScaleRoIAlign(featmap_names=["0"], output_size=7, sampling_ratio=2)
model = FasterRCNN(
custom_backbone,
num_classes=NUM_CLASSES,
rpn_anchor_generator=anchor_generator,
box_roi_pool=roi_pooler,
min_size=1224,
max_size=1632,
)
Подробнее здесь: https://stackoverflow.com/questions/790 ... 2-backbone