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

相关文章
|
7月前
|
机器人 程序员
大模型的出现,程序员的出路在何方?
随着人工智能技术的不断发展,大模型的出现已经成为了一个热门话题。这些大型模型需要大量的数据和算力来训练,但是它们真的会取代程序员吗?我认为答案是否定的。
327 2
|
8月前
|
存储 程序员 虚拟化
程序员必备的软技能- CPU“没有灵魂的躯体”
程序员必备的软技能- CPU“没有灵魂的躯体”
|
11月前
|
机器学习/深度学习 编解码 缓存
全面碾压AdamW!谷歌新出优化器内存小、效率高,网友:训练GPT 2果然快
全面碾压AdamW!谷歌新出优化器内存小、效率高,网友:训练GPT 2果然快
303 0
|
11月前
|
人工智能 并行计算 架构师
CUDA编程模型都改了!英伟达架构师团队撰文详解:Hopper为啥这么牛?
CUDA编程模型都改了!英伟达架构师团队撰文详解:Hopper为啥这么牛?
218 0
|
编解码 算法 PyTorch
解决方案:炼丹师养成计划 Pytorch+DeepLearning遇见的各种报错与踩坑避坑记录(二)
解决方案:炼丹师养成计划 Pytorch+DeepLearning遇见的各种报错与踩坑避坑记录(二)
解决方案:炼丹师养成计划 Pytorch+DeepLearning遇见的各种报错与踩坑避坑记录(二)
|
并行计算 异构计算
解决方案:炼丹师养成计划 Pytorch+DeepLearning遇见的各种报错与踩坑避坑记录(一)
解决方案:炼丹师养成计划 Pytorch+DeepLearning遇见的各种报错与踩坑避坑记录(一)
|
存储 数据可视化 PyTorch
学懂 ONNX,PyTorch 模型部署再也不怕!
在把 PyTorch 模型转换成 ONNX 模型时,我们往往只需要轻松地调用一句 torch.onnx.export 就行了。这个函数的接口看上去简单,但它在使用上还有着诸多的“潜规则”。在这篇教程中,我们会详细介绍 PyTorch 模型转 ONNX 模型的原理及注意事项。除此之外,我们还会介绍 PyTorch 与 ONNX 的算子对应关系,以教会大家如何处理 PyTorch 模型转换时可能会遇到的算子支持问题。
3690 0
学懂 ONNX,PyTorch 模型部署再也不怕!
|
机器学习/深度学习 编解码 数据可视化
模型部署遇到困难?不慌,这样解决!
在之前的学习中,我们在模型部署上顺风顺水,没有碰到任何问题。这是因为 SRCNN 模型只包含几个简单的算子,而这些卷积、插值算子已经在各个中间表示和推理引擎上得到了完美支持。如果模型的操作稍微复杂一点,我们可能就要为兼容模型而付出大量的功夫了。
586 0
模型部署遇到困难?不慌,这样解决!
|
存储 SQL 数据挖掘
还在抱怨pandas运行速度慢?这几个方法会颠覆你的看法
还在抱怨pandas运行速度慢?这几个方法会颠覆你的看法
还在抱怨pandas运行速度慢?这几个方法会颠覆你的看法
|
人工智能 Java 开发工具
不加班的秘诀:如何通过AOE快速集成NCNN?
NCNN是腾讯开源的一个为手机端极致优化的高性能神经网络前向计算框架。在AOE开源工程里,我们提供了NCNN组件,本文以SqueezeNet物体识别这个Sample为例,来讲一讲 NCNN组件的设计和用法。