@@ -247,77 +247,30 @@ def __call__(self, im, im_info):
247247
248248
249249class Pad (object ):
250- def __init__ (self ,
251- size = None ,
252- size_divisor = 32 ,
253- pad_mode = 0 ,
254- offsets = None ,
255- fill_value = (127.5 , 127.5 , 127.5 )):
250+ def __init__ (self , size , fill_value = [114.0 , 114.0 , 114.0 ]):
256251 """
257- Pad image to a specified size or multiple of size_divisor .
252+ Pad image to a specified size.
258253 Args:
259- size (int, Sequence): image target size, if None, pad to multiple of size_divisor, default None
260- size_divisor (int): size divisor, default 32
261- pad_mode (int): pad mode, currently only supports four modes [-1, 0, 1, 2]. if -1, use specified offsets
262- if 0, only pad to right and bottom. if 1, pad according to center. if 2, only pad left and top
263- offsets (list): [offset_x, offset_y], specify offset while padding, only supported pad_mode=-1
264- fill_value (bool): rgb value of pad area, default (127.5, 127.5, 127.5)
254+ size (list[int]): image target size
255+ fill_value (list[float]): rgb value of pad area, default (114.0, 114.0, 114.0)
265256 """
266257 super (Pad , self ).__init__ ()
267258 if isinstance (size , int ):
268259 size = [size , size ]
269-
270- assert pad_mode in [
271- - 1 , 0 , 1 , 2
272- ], 'currently only supports four modes [-1, 0, 1, 2]'
273- if pad_mode == - 1 :
274- assert offsets , 'if pad_mode is -1, offsets should not be None'
275-
276260 self .size = size
277- self .size_divisor = size_divisor
278- self .pad_mode = pad_mode
279261 self .fill_value = fill_value
280- self .offsets = offsets
281-
282- def apply_image (self , image , offsets , im_size , size ):
283- x , y = offsets
284- im_h , im_w = im_size
285- h , w = size
286- canvas = np .ones ((h , w , 3 ), dtype = np .float32 )
287- canvas *= np .array (self .fill_value , dtype = np .float32 )
288- canvas [y :y + im_h , x :x + im_w , :] = image .astype (np .float32 )
289- return canvas
290262
291263 def __call__ (self , im , im_info ):
292264 im_h , im_w = im .shape [:2 ]
293- if self .size :
294- h , w = self .size
295- assert (
296- im_h <= h and im_w <= w
297- ), '(h, w) of target size should be greater than (im_h, im_w)'
298- else :
299- h = int (np .ceil (im_h / self .size_divisor ) * self .size_divisor )
300- w = int (np .ceil (im_w / self .size_divisor ) * self .size_divisor )
301-
265+ h , w = self .size
302266 if h == im_h and w == im_w :
303267 im = im .astype (np .float32 )
304268 return im , im_info
305269
306- if self .pad_mode == - 1 :
307- offset_x , offset_y = self .offsets
308- elif self .pad_mode == 0 :
309- offset_y , offset_x = 0 , 0
310- elif self .pad_mode == 1 :
311- offset_y , offset_x = (h - im_h ) // 2 , (w - im_w ) // 2
312- else :
313- offset_y , offset_x = h - im_h , w - im_w
314-
315- offsets , im_size , size = [offset_x , offset_y ], [im_h , im_w ], [h , w ]
316- im = self .apply_image (im , offsets , im_size , size )
317-
318- if self .pad_mode == 0 :
319- return im , im_info
320-
270+ canvas = np .ones ((h , w , 3 ), dtype = np .float32 )
271+ canvas *= np .array (self .fill_value , dtype = np .float32 )
272+ canvas [0 :im_h , 0 :im_w , :] = im .astype (np .float32 )
273+ im = canvas
321274 return im , im_info
322275
323276
0 commit comments