One can alter the sizes of anchors in FasterRCNN by
anchor_sizes = (
(
(32,),
(64,),
(128,),
(512,),
(728,),
), # resnet fpn only accepts 5 inputs
)
aspect_ratios = ((0.5, 0.75, 1.0, 1.33, 2.0),) * len(anchor_sizes)
anchor_generator = AnchorGenerator(anchor_sizes, aspect_ratios)
backbone = resnet_fpn_backbone(
backbone,
pretrained=True,
)
model = FasterRCNN(
backbone,
num_classes=num_classes,
rpn_anchor_generator=anchor_generator,
)
In my data with large fluctations of target sizes, this however still leads to inaccurate bounding boxes in large observations.
With mobilenet I can alter the amount of boxes trivially
anchor_sizes = (
(
32,
64,
128,
512,
728,
882, # 6 box sizes not 5
),
)
aspect_ratios = ((0.5, 0.75, 1.0, 1.33, 2.0),) * len(anchor_sizes)
anchor_generator = AnchorGenerator(anchor_sizes, aspect_ratios)
backbone = mobilenet_backbone(
"mobilenet_v3_large",
pretrained=True,
fpn=False,
)
model = FasterRCNN(
backbone,
num_classes=num_classes,
rpn_anchor_generator=anchor_generator,
)
However, is it possible to use alter ResNet backbone to allow arbitary number of boxes?
For example, this does not work, but can backbone be altered to accept the anchor generator?
anchor_sizes = (
(
(32,),
(64,),
(128,),
(512,),
(728,),
(882,),
(1028,),
), # here we have seven inputs -> model does not work
)
aspect_ratios = ((0.5, 0.75, 1.0, 1.33, 2.0),) * len(anchor_sizes)
anchor_generator = AnchorGenerator(anchor_sizes, aspect_ratios)
backbone = resnet_fpn_backbone(
backbone,
pretrained=True,
)
model = FasterRCNN(
backbone,
num_classes=num_classes,
rpn_anchor_generator=anchor_generator,
)