本代码是pytorch版本的ssd实现,来源amdegroot/ssd.pytorch
一、PhotometricDistort
class PhotometricDistort(object):
def __init__(self):
#定义6个操作
self.pd = [
RandomContrast(),
ConvertColor(transform='HSV'),
RandomSaturation(),
RandomHue(),
ConvertColor(current='HSV', transform='BGR'),
RandomContrast()
]
self.rand_brightness = RandomBrightness()
self.rand_light_noise = RandomLightingNoise()
def __call__(self, image, boxes, labels):
im = image.copy()
im, boxes, labels = self.rand_brightness(im, boxes, labels)
if random.randint(2):
distort = Compose(self.pd[:-1]) #最先做RandomContrast
else:
distort = Compose(self.pd[1:]) #最后做RandomContrast
im, boxes, labels = distort(im, boxes, labels)
return self.rand_light_noise(im, boxes, labels)
RandomBrightness(随机改变亮度):
在原有图片像素上加一个实数(实数的范围在[-32,32])
其中:random.randint(2):在0和1之间随机产生一个数,random.uniform(x, y) :将随机生成一个实数,它在 [x,y] 范围
class RandomBrightness(object):
def __init__(self, delta=32):
#默认delta=32,delta的范围要在0-255之间
assert delta >= 0.0
assert delta <= 255.0
self.delta = delta
def __call__(self, image, boxes=None, labels=None):
if random.randint(2):
delta = random.uniform(-self.delta, self.delta)
image += delta
return image, boxes, labels
RandomContrast(随机改变对比度):
在原图像素上乘一个系数(系数的范围在[0.5,1.5])
class RandomContras