血泪教训——被Tensorflow浪费的60天

简介: 血泪教训:tf.image.resize偷走了我60天 警告对象:所有有关视觉内容的Tensorflow使用者 警告内容:别使用tf.image.resize函数

那时,我正在重写我们的神经网络图像升级服务代码库,使之为更大、更快的API和模型做好准备。当我们着手于图像生成(超分辨率、去模糊等)时,我们依赖一个典型的图像处理库,例如OpenCV或PIL。我总会怀疑使用Tensorflow的图像处理功能是否有效。从理论上看,他们应该更快。所以我决定坚持在本地执行Tensorflow图像处理和使用dataset.map构建数据集,以保证所有操作都在我的代码中。
我发现,不仅是我为超分辨率写的新代码不能够再现任何网络新技术,连四个月前写好的代码都不行。更奇怪的是,尽管没有达到预期目标,超分辨率本身的结果有时非常好,网络也正常工作。

调试一下

最初看起来很小的错误导致了60天的奋斗和不眠之夜。我最初错误的想法很简单,我的网络定义或训练过程有问题。数据的预处理非常好,因为我获得了有意义的结果和对图像处理的视觉控制。我调整了所有我能找到的东西,使用Keras、Slim和原始Tensorflow,查找不同版本的Tensorflow和CUDA,以观察变化。我很惭愧地告诉你我最近的怀疑,其中涉及GPU内存和静态的缺陷。我正在调整感知损失和风格损失来寻找原因。每次迭代都需要几天时间来重新训练,才能获得有意义的数据。
昨天我在查看Tensorboard时找到了错误。几乎是潜意识觉得图像出了问题,我忽略了网络输出,并在Photoshop中叠加了目标图像和输入图像,这是我得到的:
__20180410144324

这看起来很奇怪,它发生了一些移位。完全违背任何逻辑,这不可能是真的!我的代码很简单。读取图像、裁剪图像、调整图像大小,所有在Tensorflow中。
无论如何,RTFM有一个“角落对齐”参数。你想如何缩小图像尺寸而不是对齐?您可以!所以这个函数有一个存在已久的非常奇怪的行为——阅读这个线程。他们无法修复它,因为这会破坏大量旧代码和预先训练的网络。
该代码实际上将您的图像向左和向上移动一个像素。线程表明,甚至插值在TensorFlow中都会被破坏。这是Tensorflow中实际的缩小结果:
__20180410144341

坚持使用Scipy / OpenCV / numpy / PIL,无论你喜欢哪种图像处理。第二个我改变了它,我的网络像魅力一样工作(实际上第二天,我看到了训练结果)。
数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!
本文由阿里云云栖社区组织翻译
作者:Oleksandr Savsunenko
译者:Anchor C.,审校:虎说八道
文章为简译,更为详细的内容,请查看原文文章

相关文章
|
1月前
|
人工智能
编程领域长期霸榜的GPT之设计奥秘
编程领域长期霸榜的GPT之设计奥秘
|
1月前
|
算法 搜索推荐 数据挖掘
掌握程序员之剑:解析常见算法与其在生活和工作中的影响
掌握程序员之剑:解析常见算法与其在生活和工作中的影响
40 1
|
1月前
|
算法 数据可视化 TensorFlow
【经验与Bug】tensorflow草记
1 常用小知识 conda activate tf 在anaconda prompt使用,进入名为tf的虚拟环境。 pip install <包名>== 可以查看指定包能被找到的所有版本。 pip install <包名> -i https://pypi.org/simple
43 0
|
9月前
|
机器人 程序员
大模型的出现,程序员的出路在何方?
随着人工智能技术的不断发展,大模型的出现已经成为了一个热门话题。这些大型模型需要大量的数据和算力来训练,但是它们真的会取代程序员吗?我认为答案是否定的。
345 2
|
机器学习/深度学习 人工智能 PyTorch
改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减(1)
改变几行代码,PyTorch炼丹速度狂飙、模型优化时间大减
106 0
|
人工智能 并行计算 架构师
CUDA编程模型都改了!英伟达架构师团队撰文详解:Hopper为啥这么牛?
CUDA编程模型都改了!英伟达架构师团队撰文详解:Hopper为啥这么牛?
247 0
|
机器学习/深度学习 PyTorch TensorFlow
深度学习基础之三分钟轻松搞明白tensor到底是个啥
再不入坑就晚了,深度神经网络概念大整理,最简单的神经网络是什么样子?
453 0
深度学习基础之三分钟轻松搞明白tensor到底是个啥
|
机器学习/深度学习 编解码 数据可视化
模型部署遇到困难?不慌,这样解决!
在之前的学习中,我们在模型部署上顺风顺水,没有碰到任何问题。这是因为 SRCNN 模型只包含几个简单的算子,而这些卷积、插值算子已经在各个中间表示和推理引擎上得到了完美支持。如果模型的操作稍微复杂一点,我们可能就要为兼容模型而付出大量的功夫了。
598 0
模型部署遇到困难?不慌,这样解决!

相关实验场景

更多