首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >超分辨率中的颜色变化

超分辨率中的颜色变化
EN

Stack Overflow用户
提问于 2017-09-04 14:43:40
回答 3查看 660关注 0票数 1

我在做一个超分辨率的CNN节目。训练进行得很好,没有过度拟合,但是当我在低分辨率图像上尝试训练网络时,输出图像改变了颜色:

输入图像

输出图像

即使训练时间更长,结果也是一样的。有没有人遇到过类似的问题?

我的第一个想法是将输出激活函数改为从0到1(乙状结肠),而不是ReLu,但没有改进。

下面是我在Keras中实现的网络:

代码语言:javascript
复制
input_img = Input(shape=(None,None,3))

c1 = Convolution2D(64, (3, 3))(input_img)
a1 = Activation('relu')(c1)

c2 = Convolution2D(64, (3, 3))(a1)
a2 = Activation('relu')(c2)
b2 = BatchNormalization()(a2)

c3 = Convolution2D(64, (3, 3))(b2)
a3 = Activation('relu')(c3)
b3 = BatchNormalization()(a3)

c4 = Convolution2D(64, (3, 3), strides=(2,2), padding='same')(b3)
a4 = Activation('relu')(c4)
b4 = BatchNormalization()(a4)

c5 = Convolution2D(64, (3, 3))(b4)
a5 = Activation('relu')(c5)
b5 = BatchNormalization()(a5)

d1 = Conv2DTranspose(64, (3, 3))(b5)
a6 = Activation('relu')(d1)
b6 = BatchNormalization()(a6)

m1 = add([a4, b6])
a7 = Activation('relu')(m1)

d2 = Conv2DTranspose(64, (3, 3), strides=(2,2), padding='same')(a7)
a8 = Activation('relu')(d2)
b8 = BatchNormalization()(a8)

d3 = Conv2DTranspose(64, (3, 3))(b8)
a9 = Activation('relu')(d3)
b9 = BatchNormalization()(a9)

m2 = add([a2, b9])
a10 = Activation('relu')(m2)

d4 = Conv2DTranspose(64, (3, 3))(a10)
a11 = Activation('relu')(d4)
b10 = BatchNormalization()(a11)

d5 = Conv2DTranspose(3, (3, 3))(b10)
a12 = Activation('relu')(d5)
b11 = BatchNormalization()(a12)

m3 = add([input_img, b11])
a13 = Activation('relu')(m3)

out = Convolution2D(3, (5, 5), activation='sigmoid', padding='same') (a13)

model = Model(input_img, out)
model.compile(optimizer='adam', loss='mae')
EN

回答 3

Stack Overflow用户

发布于 2017-09-15 07:47:04

在大多数的论文中,人们首先将图像转换成YCrCb格式,并与CNN一起处理Y频道(其中包含所有相关的图像细节)。然后将重建的Y通道与Cr和Cb通道连接起来,这些通道使用传统的双三次插值(或您选择的插值)进行上采样,然后将图像转换为RGB。试试这个,也许效果会更好。

票数 0
EN

Stack Overflow用户

发布于 2020-05-26 16:27:35

我也有类似的问题,所以检查一下你的像素是否在训练数据集的0到1之间,对于丢失函数,它应该是0到255。

票数 0
EN

Stack Overflow用户

发布于 2020-05-26 16:30:51

您可以向丢失函数中添加一个组件,以确保颜色与原始颜色匹配。添加一个丢失组件,将超分辨率图像降至输入图像,然后使用L1或L2丢失来惩罚输入和输出颜色之间的差异。

这个损失组件和您已经使用的损失组件之间的关键区别是,现有的损失将输出与地面真相进行比较,而这将比较输出与输入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46039458

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档