血泪教训——被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.,审校:虎说八道
文章为简译,更为详细的内容,请查看原文文章

目录
打赏
0
0
0
0
1807
分享
相关文章
还在抱怨pandas运行速度慢?这几个方法会颠覆你的看法
还在抱怨pandas运行速度慢?这几个方法会颠覆你的看法
1120 0
还在抱怨pandas运行速度慢?这几个方法会颠覆你的看法
💡探索C#语言进化论:揭秘.NET开发效率飙升的秘密武器💼
【8月更文挑战第28天】C#语言凭借其强大的功能与易用性深受开发者喜爱。伴随.NET平台演进,C#持续引入新特性,如C# 7.0的模式匹配,让处理复杂数据结构更直观简洁;C# 8.0的异步流则使异步编程更灵活高效,无需一次性加载全部数据至内存。通过示例展示了模式匹配简化JSON解析及异步流实现文件逐行读取的应用。此外,C# 8.0还提供了默认接口成员和可空引用类型等特性,进一步提高.NET开发效率与代码可维护性。随着C#的发展,未来的.NET开发将更加高效便捷。
91 1
技术人修炼之道阅读笔记(四)低效的7个行为习惯
技术人修炼之道阅读笔记(四)低效的7个行为习惯
《当Keras遇上复杂模型:探寻其潜藏的局限》
Keras以其简洁易用的特点成为深度学习入门者的首选工具,但构建复杂模型时其局限性逐渐显现。首先,在表达复杂网络结构(如多分支、多模态融合)时灵活性不足;其次,动态网络结构调整支持较弱,难以满足实时变化的需求。此外,性能瓶颈问题突出,包括运行速度慢和GPU内存占用高,影响大规模模型训练效率。调试方面,过度封装使错误排查困难,自定义层和集成其他工具也面临挑战。尽管如此,Keras仍在快速原型开发中占据重要地位,未来需通过改进以适应更复杂的深度学习需求。
43 13
哪门编程语言需求量最大、最有前途?
哪门编程语言需求量最大、最有前途? 旨在帮助初级开发人员找到高质量工作, MyFirstITJob.com 创始人 Alexander Petkov 在本文中就开发人员在 2018 年应该考虑选择的十门编程语言给出了自己的建议,旨在帮助开发人员了解 2018 年 IT 市场将会需要什么样的编程语言,从而做出决定在哪个方面投入更多的时间和精力,也有助于开发人员了解掌握哪些内容才能走上成功的软件开发员之路,或者是掌握哪门语言才能在成功的道路上越走越远。
3230 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等