无法为 Pascal VOC 泡菜数据集加载泡菜

Posted

技术标签:

【中文标题】无法为 Pascal VOC 泡菜数据集加载泡菜【英文标题】:Pickle can't be load for Pascal VOC pickle dataset 【发布时间】:2018-07-29 10:48:47 【问题描述】:

我正在尝试从斯坦福网站here 加载 Pascal VOC 数据集。还试图实现来自Semantic Image Segmentation on Pascal VOC Pystruct blog 的代码。但是当我尝试加载泡菜文件时,我得到了 UnicodeDecodeError。到目前为止,我尝试了以下代码:

import numpy as np
try:
    import cPickle as pickle
except ImportError:
    import pickle

from pystruct import learners
import pystruct.models as crfs
from pystruct.utils import SaveLogger

data_train = pickle.load(open("trainingData/data_train.pickle"))
C = 0.01

我得到了这个错误:

Traceback (most recent call last):
  File "/Users/mypath/PycharmProjects/semantic_segmentation_ex/ex1.py", line 11, in <module>
    data_train = pickle.load(open("trainingData/data_train.pickle"))
  File "/usr/local/Cellar/python3/3.6.2/Frameworks/Python.framework/Versions/3.6/lib/python3.6/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0x80 in position 0: ordinal not in range(128)

我找不到任何相同的问题和解决方案。我如何让它发挥作用?

【问题讨论】:

通常情况下,Pickle 文件应以二进制模式打开:open("trainingData/data_train.pickle","rb") 试过了,但我还是遇到了同样的错误 您可能想添加一个encoding='latin-1' 作为参数。 我应该在哪里添加这个编码参数? pickle.load(open("trainingData/data_train.pickle", 'wb', encoding='latin-1')) 【参考方案1】:

我的一个朋友告诉我原因。序列化对象是一个python2对象,所以如果你用python2加载,它直接打开没有任何问题。

但是如果你想用 Python3 加载,你需要将编码参数添加到 pickle 而不是 open 函数中。这是示例代码:

import numpy as np

try:
    import cPickle as pickle
except ImportError:
    import pickle


with open('data_train.pickle', 'rb') as f:
    # If you use Python 3 needs a parameter as encoding='bytes'
    # Otherwise, you shouldn't add encoding parameters in Python 2
    data_train = pickle.load(f, encoding='bytes')


print("Finished loading data!")
print(data_train.keys())

特别感谢@ahmet-sezgin-duran

【讨论】:

以上是关于无法为 Pascal VOC 泡菜数据集加载泡菜的主要内容,如果未能解决你的问题,请参考以下文章

如何减少在 python 中加载泡菜文件或将泡菜文件映射到磁盘的时间

在泡菜文件中保存和加载多个对象?

加载或倾倒泡菜时如何阻止动画 QCursor 冻结?

使用 cx_freeze 时如何加载泡菜模型?

PASCAL VOC数据集分析

PASCAL VOC数据集分析(转)