ludwig MNIST示例在pillow>7.0.0时会失败,出现AttributeError: 'NoneType' object has no attribute 'read'错误,

nbysray5  于 2个月前  发布在  其他
关注(0)|答案(8)|浏览(29)

描述bug

尝试重现MNIST演示。

重现步骤

重现行为的方法:
请按照以下步骤操作:https://uber.github.io/ludwig/examples/#image-classification-mnist
我的目录如下所示:

$ pwd
/Users/john/git/ludwig-sandbox/MNIST/mnist_png/mnist_png

$ ls
training
testing
mnist_dataset_training.csv
mnist_dataset_testing.csv
model_definition.yaml
results

time ludwig train   --data_train_csv mnist_dataset_training.csv   --data_test_csv  mnist_dataset_testing.csv   --model_definition_file model_definition.yaml

Traceback (most recent call last):
  File "/Users/john/.venv/ludwig/bin/ludwig", line 11, in <module>
    load_entry_point('ludwig==0.2.2.4', 'console_scripts', 'ludwig')()
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/ludwig/cli.py", line 118, in main
    CLI()
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/ludwig/cli.py", line 64, in __init__
    getattr(self, args.command)()
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/ludwig/cli.py", line 74, in train
    train.cli(sys.argv[2:])
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/ludwig/train.py", line 806, in cli
    full_train(**vars(args))
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/ludwig/train.py", line 301, in full_train
    random_seed=random_seed
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/ludwig/data/preprocessing.py", line 339, in preprocess_for_training
    random_seed=random_seed
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/ludwig/data/preprocessing.py", line 528, in preprocess_for_training_by_type
    random_seed=random_seed
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/ludwig/data/preprocessing.py", line 655, in _preprocess_csv_for_training
    random_seed=random_seed
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/ludwig/data/preprocessing.py", line 96, in build_dataset_df
    global_preprocessing_parameters
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/ludwig/data/preprocessing.py", line 171, in build_data
    preprocessing_parameters
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/ludwig/features/image_feature.py", line 269, in add_feature_data
    preprocessing_parameters, first_image_path
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/ludwig/features/image_feature.py", line 179, in _finalize_preprocessing_parameters
    first_image = imread(first_image_path)
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/skimage/io/_io.py", line 62, in imread
    img = call_plugin('imread', fname, plugin=plugin, **plugin_args)
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/skimage/io/manage_plugins.py", line 214, in call_plugin
    return func(*args, **kwargs)
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/skimage/io/_plugins/pil_plugin.py", line 37, in imread
    return pil_to_ndarray(im, dtype=dtype, img_num=img_num)
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/skimage/io/_plugins/pil_plugin.py", line 67, in pil_to_ndarray
    image.seek(i)
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/PIL/PngImagePlugin.py", line 748, in seek
    self._seek(f)
  File "/Users/john/.venv/ludwig/lib/python3.7/site-packages/PIL/PngImagePlugin.py", line 791, in _seek
    cid, pos, length = self.png.read()
AttributeError: 'NoneType' object has no attribute 'read'

请提供代码、yaml定义文件和一个示例数据,以便完全重现问题。
无法重现的问题将被忽略。

预期行为

我希望它能运行实验。

环境信息(请填写以下信息):

  • 操作系统:OSX
  • 版本:10.15.4
  • Python版本:Python 3.7.3
  • Ludwig版本:ludwig==0.2.2.4
    附加上下文

我在pil插件中设置了一个断点,并检查了它正在使用的路径,这似乎完全有效。我认为所有目录的权限都是有效的...

$ ll /Users/john/git/ludwig-sandbox/MNIST/mnist_png/mnist_png/training/0/16585.png 
-rw-r----- 1 john staff 315 Dec 10  2015 /Users/john/git/ludwig-sandbox/MNIST/mnist_png/mnist_png/training/0/16585.png
zbq4xfa0

zbq4xfa01#

我再次按照示例中的步骤操作,对我来说运行正常。
你应该查看训练和测试的内容以及两个csv文件的内容,很可能ath不匹配。在创建它们之后,你是否移动了目录和文件?
无论如何,我建议你从头开始,删除到目前为止的所有内容,并严格按照说明进行操作。
如果你能解决这个问题,请告诉我。

hgqdbh6s

hgqdbh6s2#

这个问题在Windows和Linux(我尝试过Ubuntu)上都是持续存在的。在Mac上,完全相同的文件似乎可以正常运行,没有出现问题。我尝试为FashionMnist运行相同的操作。


# 这是一个Markdown格式的文本内容
w7t8yxp5

w7t8yxp53#

更新:
这两个环境上,模型服务都无法正常工作。

7xllpg7q

7xllpg7q4#

这很有趣@gilga98 ,所以你在OSX上没有问题,但在其他平台上有问题?这和我相反。
我今天会从头开始尝试。

tvokkenx

tvokkenx5#

我再次按照说明在GCE(9.12(stretch))上的Debian盒子上操作。这次我只用pip安装ludwig,没有自己构建。Ludwig版本显示为('0.2.2.4')。
同样的异常。
我没有对目录做任何特殊处理。不仅csv和png看起来很好,正如我提到的,我在文件对象中设置了断点并检查了正在使用的路径,然后运行ls以验证其正确性。

$ pip freeze | egrep -ie "pil|image|ludwig"
ludwig==0.2.2.4
Pillow==7.1.1
scikit-image==0.14.2
ctehm74n

ctehm74n6#

问题出在枕头版本上。7.0.0对我在所有平台上都运行良好。

pip install pillow==7.0.0

https://pillow.readthedocs.io/en/stable/releasenotes/7.1.1.html`
这个来自pillow的关于PNGs的修复正在破坏它。

ejk8hzay

ejk8hzay7#

就是这样——我可以确认这对我也有用。非常感谢@gilga98!

tpgth1q7

tpgth1q78#

这很奇怪。
很高兴问题已经解决了,我可能会在需求中添加一个关于枕头版本的约束,同时也会尝试看看自从我在scikit-image==1.14.2上引入了约束之后,问题是否已经解决了。
我会把它留作提醒。

相关问题