最近运行了一下 srez-master ,总结一下 :
原项目地址Github:https://github.com/david-gpu/srez
1 最重要的 :不可以去马赛克 不可以去马赛克,不可以去马赛克
事情原委就是我同学要我去掉一张正经的图片的马赛克,看看照片里的人长什么样。几经周转就信了某几篇简书的鬼话,一本正经的扯淡说这个项目可以去马赛克。后来回头一看发觉原作者也没有说是可以去马赛克,只是说这是图像的超分辨率重建。(着实坑了我一把,如果有人也是冲这个去的,看到这就可以走了,似乎我也没有写下去的必要)
2 运行过程
2.1 打开项目,首先得下载数据集,下载地址https://drive.google.com/drive/folders/0B7EVK8r0v71pWEZsZE9oNnFzTm8
将里面的image,放在一个dataset文件夹下。
2.2 安装requirements.txt包
2.3 在项目下新建 checkpoint 和 train 文件夹 。
2.4 运行
3 报错
运行项目时,我遇到了各种各样的错误,分为两大类吧:
第一类是没有安装requirements.txt安装依赖包的要求版本。最重要是安装低版本的tensorflow ,不可过高,1.10.0 即可。当初出现这种bug时真的是崩溃,有一个bug就是训练到最后突然崩了,没有结果。由于当初忘了截图,找不到出错信息了。
第二类是由于包更新了 。譬如 Only call `sigmoid_cross_entropy_with_logits` with named arguments (labels=..., logits=..., ...)
这类都好解决。
4出错的人
作者说:
Here's an random, non cherry-picked, example of what this network can do. From left to right, the first column is the 16x16 input image, the second one is what you would get from a standard bicubic interpolation, the third is the output generated by the neural net, and on the right is the ground truth.
翻译部分从左到右,第一列是16x16输入图像,第二列是标准双三次插值得到的图像,第三列是神经网络生成的输出,右侧是原始图像。误导人的人应该就是看了这个地方,然后就说可以去马赛克。
再看源码:
downsampled = tf.image.resize_area(image, [image_size//K, image_size//K])
feature = tf.reshape(downsampled, [image_size//K, image_size//K, 3])
label = tf.reshape(image, [image_size, image_size, 3])
模型训练的train_features, train_labels就是这个,没啥区别。那为什么又有马赛克的部分呢,在看源码
nearest = tf.image.resize_nearest_neighbor(feature, size)
nearest = tf.maximum(tf.minimum(nearest, 1.0), 0.0)
#
bicubic = tf.image.resize_bicubic(feature, size)
bicubic = tf.maximum(tf.minimum(bicubic, 1.0), 0.0)
clipped = tf.maximum(tf.minimum(gene_output, 1.0), 0.0)
image = tf.concat([nearest, bicubic, clipped, label],2)
nearest,bicubic,clipped,image 为第一到四列的输出图像。这就是有马赛克的原因了。其实第一列也并不是16*16的训练数据,作者只是为了给大家一个直观的效果,让大家觉得这个模型有多好,形成对比,才有马赛克图片的,跟去马赛克没有任何关系。
这个项目bug众多,模型的网络结构已经过时,在图像的超分辨率重建领域有更多效果更好的示例。作者能自己搞出这样的项目也是很牛批,厉害,厉害。