def __call__(self, x, rois, roi_indices, spatial_scale): roi_indices = roi_indices.astype(np.float32) indices_and_rois = self.xp.concatenate((roi_indices[:, None], rois), axis=1) # roi poolingをする前に、thin feature mapに変換します # activationしないっぽいことが書いてあるんだよなー left_path = self.conv_bl(self.conv_ul(x)) right_path = self.conv_br(self.conv_ur(x)) tfp = left_path + right_path pool = _roi_align_2d_yx(tfp, indices_and_rois, self.roi_size, self.roi_size, spatial_scale) h = F.relu(self.fc(pool)) roi_cls_locs = self.cls_loc(h) roi_scores = self.score(h) # at prediction time, we use two pass method. # at first path, we predict box location and class # at second path, we predict mask with accurate location from first path if chainer.config.train: mask = F.relu(self.conv2(pool)) mask = F.relu(self.conv3_(mask)) mask = F.relu(self.conv4(mask)) mask = self.deconv1_(pool) #mask = self.conv2(self.deconv1(pool)) return roi_cls_locs, roi_scores, mask else: # cache tfp for second path self.tfp = tfp return roi_cls_locs, roi_scores
def __call__(self, x, indices_and_rois, levels, spatial_scales): pool_box = list() levels = chainer.cuda.to_cpu(levels).astype(np.int32) for l, i in zip(levels, indices_and_rois): pool_box.append( _roi_align_2d_yx(x[l], i[None], self.roi_size_box, self.roi_size_box, spatial_scales[l])) pool_box = F.concat(pool_box, axis=0) h = F.relu(self.conv1(pool_box)) h = F.relu(self.fc1(h)) h = F.relu(self.fc2(h)) roi_cls_locs = self.cls_loc(h) roi_scores = self.score(h) # at prediction time, we use two pass method. # at first path, we predict box location and class # at second path, we predict mask with accurate location from first path if chainer.config.train: pool_mask = list() for l, i in zip(levels, indices_and_rois): pool_mask.append( _roi_align_2d_yx(x[l], i[None], self.roi_size_mask, self.roi_size_mask, spatial_scales[l])) mask = F.concat(pool_mask, axis=0) for l in self.mask_convs.children(): mask = F.relu(l(mask)) #mask = F.relu(self.mask1(pool_mask)) #mask = F.relu(self.mask2(mask)) #mask = F.relu(self.mask3(mask)) #mask = F.relu(self.mask4(mask)) mask = self.conv2(self.deconv1(mask)) *_, h, w = mask.shape mask = F.resize_images(mask, output_shape=(2 * h, 2 * w)) return roi_cls_locs, roi_scores, mask else: # cache self.x = x return roi_cls_locs, roi_scores
def predict_mask(self, levels, indices_and_rois, spatial_scales): pool_mask = list() for l, i in zip(levels, indices_and_rois): pool_mask.append( _roi_align_2d_yx(self.x[l], i[None], self.roi_size_mask, self.roi_size_mask, spatial_scales[l])) pool_mask = F.concat(pool_mask, axis=0) mask = F.relu(self.mask1(pool_mask)) mask = F.relu(self.mask2(mask)) mask = F.relu(self.mask3(mask)) mask = F.relu(self.mask4(mask)) mask = self.conv2(self.deconv1(mask)) return mask
def predict_mask(self, rois, roi_indices, spatial_scale): roi_indices = roi_indices.astype(np.float32) indices_and_rois = self.xp.concatenate((roi_indices[:, None], rois), axis=1) pool = _roi_align_2d_yx(self.tfp, indices_and_rois, self.roi_size, self.roi_size, spatial_scale) mask = F.relu(self.conv2(pool)) mask = F.relu(self.conv3_(mask)) mask = F.relu(self.conv4(mask)) mask = self.deconv1_(pool) # mask = self.deconv1(pool) # mask = self.conv2_(mask) # mask = self.conv3(mask) # mask = self.conv2(self.deconv1(pool)) return mask
def __call__(self, x, rois, roi_indices, spatial_scale): roi_indices = roi_indices.astype(np.float32) indices_and_rois = self.xp.concatenate( (roi_indices[:, None], rois), axis=1) pool = _roi_align_2d_yx(x, indices_and_rois, self.roi_size, self.roi_size, spatial_scale) # h: 分岐する直前まで h = F.relu(self.res5(pool)) h = F.relu(self.conv1(h)) # global average pooling gap = _global_average_pooling_2d(h) roi_cls_locs = self.cls_loc(gap) roi_scores = self.score(gap) # mask mask = self.conv2(F.relu(self.deconv1(h))) return roi_cls_locs, roi_scores, mask
def predict_mask(self, levels, indices_and_rois, spatial_scales): pool_mask = list() for l, i in zip(levels, indices_and_rois): pool_mask.append( _roi_align_2d_yx(self.x[l], i[None], self.roi_size_mask, self.roi_size_mask, spatial_scales[l])) mask = F.concat(pool_mask, axis=0) for l in self.mask_convs: mask = F.relu(l(mask)) #mask = F.relu(self.mask1(pool_mask)) #mask = F.relu(self.mask2(mask)) #mask = F.relu(self.mask3(mask)) #mask = F.relu(self.mask4(mask)) mask = self.conv2(self.deconv1(mask)) *_, h, w = mask.shape mask = F.resize_images(mask, output_shape=(2 * h, 2 * w)) return mask