![](/img/trans.png)
[英]How do I adjust brightness, contrast and vibrance with opencv python?
[英]How do I adjust contrast within TensorFlow layer?
我想创建一个始终应用对比度的 TensorFlow/Keras 层,无论是在训练时间还是测试时间。
我使用了 TensorFlow 对比度调整方法tf.image.adjust_contrast
,但是当我将它放在我正在制作的图层的call
方法中并尝试训练时出现错误:
LookupError: gradient registry has no entry for: AdjustContrastv2
这是我当前的图层代码:
class Contrast(keras.layers.Layer):
def __init__(self, contrast_level=2, **kwargs):
super(Contrast, self).__init__(**kwargs)
self.supports_masking = True
self.contrast_level = contrast_level
def call(self, inputs, training=None):
return tf.image.adjust_contrast(inputs, self.contrast_level)
def get_config(self):
config = {'stddev': self.stddev}
base_config = super(Contrast, self).get_config()
return dict(list(base_config.items()) + list(config.items()))
def compute_output_shape(self, input_shape):
return input_shape
我认为为了提高效率,我应该尝试使用实现对比度的 TensorFlow 方法,但这不是解决问题的方法吗?
错误消息的字面意思是,tensorflow 不知道操作的梯度。 您必须自己定义adjust_contrast
。
示例代码:
class Contrast(tf.keras.layers.Layer):
def __init__(self, contrast_level=2.0, **kwargs):
self.contrast_level = contrast_level
super().__init__(**kwargs)
self.supports_masking = True
def call(self, inputs, training=None):
channel_mean = tf.math.reduce_mean(inputs, [1, 2], keepdims=True)
return (inputs - channel_mean) * self.contrast_level + channel_mean
contrast_layer=Contrast()
random_images=[np.random.uniform(1,2,size=(64,224,224,3)).astype(np.float32) for i in range(3)]
print(np.allclose(tf.image.adjust_contrast(random_images[0],2),contrast_layer(random_images[0]),atol=0,rtol=1e-4))#True
print(np.allclose(tf.image.adjust_contrast(random_images[1],2),contrast_layer(random_images[1]),atol=0,rtol=1e-4))#True
print(np.allclose(tf.image.adjust_contrast(random_images[2],2),contrast_layer(random_images[2]),atol=0,rtol=1e-4))#True
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.