def __init__(self, roi_layer_type='RoIAlign', featmap_stride=16, output_size=16, sampling_ratio=0, pool_mode='avg', aligned=True, with_temporal_pool=True): super().__init__() self.roi_layer_type = roi_layer_type assert self.roi_layer_type in ['RoIPool', 'RoIAlign'] self.featmap_stride = featmap_stride self.spatial_scale = 1. / self.featmap_stride self.output_size = output_size self.sampling_ratio = sampling_ratio self.pool_mode = pool_mode self.aligned = aligned self.with_temporal_pool = with_temporal_pool if self.roi_layer_type == 'RoIPool': self.roi_layer = RoIPool(self.output_size, self.spatial_scale) else: self.roi_layer = RoIAlign( self.output_size, self.spatial_scale, sampling_ratio=self.sampling_ratio, pool_mode=self.pool_mode, aligned=self.aligned)
def __init__(self, roi_layer_type='RoIAlign', featmap_stride=16, output_size=16, sampling_ratio=0, pool_mode='avg', aligned=True, with_temporal_pool=True, temporal_pool_mode='avg', with_global=False): super().__init__() self.roi_layer_type = roi_layer_type assert self.roi_layer_type in ['RoIPool', 'RoIAlign'] self.featmap_stride = featmap_stride self.spatial_scale = 1. / self.featmap_stride self.output_size = output_size self.sampling_ratio = sampling_ratio self.pool_mode = pool_mode self.aligned = aligned self.with_temporal_pool = with_temporal_pool self.temporal_pool_mode = temporal_pool_mode self.with_global = with_global try: from mmcv.ops import RoIAlign, RoIPool except (ImportError, ModuleNotFoundError): raise ImportError('Failed to import `RoIAlign` and `RoIPool` from ' '`mmcv.ops`. The two modules will be used in ' '`SingleRoIExtractor3D`! ') if self.roi_layer_type == 'RoIPool': self.roi_layer = RoIPool(self.output_size, self.spatial_scale) else: self.roi_layer = RoIAlign( self.output_size, self.spatial_scale, sampling_ratio=self.sampling_ratio, pool_mode=self.pool_mode, aligned=self.aligned) self.global_pool = nn.AdaptiveAvgPool2d(self.output_size)
def test_roipool_gradcheck(self): if not torch.cuda.is_available(): return from mmcv.ops import RoIPool pool_h = 2 pool_w = 2 spatial_scale = 1.0 for case in inputs: np_input = np.array(case[0]) np_rois = np.array(case[1]) x = torch.tensor(np_input, device='cuda', requires_grad=True) rois = torch.tensor(np_rois, device='cuda') froipool = RoIPool((pool_h, pool_w), spatial_scale) if _USING_PARROTS: pass # gradcheck(froipool, (x, rois), no_grads=[rois]) else: gradcheck(froipool, (x, rois), eps=1e-2, atol=1e-2)