MCPcopy Create free account
hub / github.com/VCIP-RGBD/DFormer / scale_process

Method scale_process

utils/engine/dist_test.py:188–233  ·  view source on GitHub ↗
(self, img, ori_shape, crop_size, stride_rate, device=None)

Source from the content-addressed store, hash-verified

186 return pred
187
188 def scale_process(self, img, ori_shape, crop_size, stride_rate, device=None):
189 new_rows, new_cols, c = img.shape
190 long_size = new_cols if new_cols > new_rows else new_rows
191
192 if long_size <= crop_size:
193 input_data, margin = self.process_image(img, crop_size)
194 score = self.val_func_process(input_data, device)
195 score = score[:, margin[0] : (score.shape[1] - margin[1]), margin[2] : (score.shape[2] - margin[3])]
196 else:
197 stride = int(np.ceil(crop_size * stride_rate))
198 img_pad, margin = pad_image_to_shape(img, crop_size, cv2.BORDER_CONSTANT, value=0)
199
200 pad_rows = img_pad.shape[0]
201 pad_cols = img_pad.shape[1]
202 r_grid = int(np.ceil((pad_rows - crop_size) / stride)) + 1
203 c_grid = int(np.ceil((pad_cols - crop_size) / stride)) + 1
204 data_scale = torch.zeros(self.class_num, pad_rows, pad_cols).cuda(device)
205 count_scale = torch.zeros(self.class_num, pad_rows, pad_cols).cuda(device)
206
207 for grid_yidx in range(r_grid):
208 for grid_xidx in range(c_grid):
209 s_x = grid_xidx * stride
210 s_y = grid_yidx * stride
211 e_x = min(s_x + crop_size, pad_cols)
212 e_y = min(s_y + crop_size, pad_rows)
213 s_x = e_x - crop_size
214 s_y = e_y - crop_size
215 img_sub = img_pad[s_y:e_y, s_x:e_x, :]
216 count_scale[:, s_y:e_y, s_x:e_x] += 1
217
218 input_data, tmargin = self.process_image(img_sub, crop_size)
219 temp_score = self.val_func_process(input_data, device)
220 temp_score = temp_score[
221 :,
222 tmargin[0] : (temp_score.shape[1] - tmargin[1]),
223 tmargin[2] : (temp_score.shape[2] - tmargin[3]),
224 ]
225 data_scale[:, s_y:e_y, s_x:e_x] += temp_score
226 # score = data_scale / count_scale
227 score = data_scale
228 score = score[:, margin[0] : (score.shape[1] - margin[1]), margin[2] : (score.shape[2] - margin[3])]
229
230 score = score.permute(1, 2, 0)
231 data_output = cv2.resize(score.cpu().numpy(), (ori_shape[1], ori_shape[0]), interpolation=cv2.INTER_LINEAR)
232
233 return data_output
234
235 def val_func_process(self, input_data, device=None):
236 input_data = np.ascontiguousarray(input_data[None, :, :, :], dtype=np.float32)

Callers 1

sliding_evalMethod · 0.95

Calls 3

process_imageMethod · 0.95
val_func_processMethod · 0.95
pad_image_to_shapeFunction · 0.90

Tested by

no test coverage detected