从 CNN(Xception 模型)中提取特征,我得到 IsADirectoryError?

Posted

技术标签:

【中文标题】从 CNN(Xception 模型)中提取特征,我得到 IsADirectoryError?【英文标题】:Extractung features from CNN (Xception model), I got IsADirectoryError? 【发布时间】:2021-11-26 08:45:09 【问题描述】:

从 xcption 模型中提取特征 我正在使用 cnn 和 lstm 开发图像标题生成器,并且我分享了从网站获得的代码。我试图解决它,但是当我对代码进行更改时,我在其他部分出现错误,所以任何人都可以告诉我如何解决这个问题

def extract_features(directory):
        model = Xception( include_top=False, pooling='avg' )
        features = 
        for img in tqdm(os.walk(directory)):
            filename = directory + "/" + img
            image = Image.open(filename)
            image = image.resize((299,299))
            image = np.expand_dims(image, axis=0)
            #image = preprocess_input(image)
            image = image/127.5
            image = image - 1.0

            feature = model.predict(image)
            features[img] = feature
        return features

#2048 feature vector
features = extract_features(dataset_images)
dump(features, open("features.p","wb"))

错误

TypeError                                 Traceback (most recent call last)
<ipython-input-8-5f1d4e4e3211> in <module>()
     16 
     17 #2048 feature vector
---> 18 features = extract_features(dataset_images)
     19 dump(features, open("features.p","wb"))

<ipython-input-8-5f1d4e4e3211> in extract_features(directory)
      3         features = 
      4         for img in tqdm(os.walk(directory)):
----> 5             filename = directory + "/" + img
      6             image = Image.open(filename)
      7             image = image.resize((299,299))

TypeError: can only concatenate str (not "tuple") to str

【问题讨论】:

os.listdir() 返回文件和目录。所以你正在尝试使用Image.open 打开一个目录 是的,我想打开一个图像数据集。我是否需要使用其他代码来打开目录?实际上,我将 'os.listdir()' 更改为 'os.walk' 并解决了 ' IsADirectory ' 错误,但我遇到了其他错误。 顺便说一句,你的新错误是什么? 我已经更新了我所做的更改后出现的新错误。你能查一下吗,我卡在那里了 【参考方案1】:

在您的情况下,filename = directory + "/" + img 中的 img 是一个元组,directory 是一个字符串,因此它们不能被连接。

所以你已经循环通过img。在这种情况下,您可能会收到另一个错误,因为img 包含根目录和子目录。

def extract_features(directory):
            model = Xception( include_top=False, pooling='avg' )
            features = 
            for (root,dirs,files) in tqdm(os.walk(directory)):
                for img in files:
                    filename = directory + "/" + img
                    image = Image.open(filename)
                    image = image.resize((299,299))
                    image = np.expand_dims(image, axis=0)
                    #image = preprocess_input(image)
                    image = image/127.5
                    image = image - 1.0
                    feature = model.predict(image)
                    features[img] = feature
            return features

【讨论】:

我尝试使用您提供的代码,但出现此错误...... FileNotFoundError: [Errno 2] No such file or directory: '/content/drive/MyDrive/Project /Flickr8k_Dataset (1).zip(解压文件)/446291803_2fd4641b99.jpg' 如果图像位于压缩文件夹中,您可能必须在同一位置解压缩文件并删除压缩文件。可以添加文件结构的截图吗? 其实这个错误现在已经解决了,这是我的错误,因为我给的路径是错误的,现在一切都很好。您是一直在帮助我度过难关的人,非常感谢您的帮助和努力。再次非常感谢......

以上是关于从 CNN(Xception 模型)中提取特征,我得到 IsADirectoryError?的主要内容,如果未能解决你的问题,请参考以下文章

Keras:如何将 CNN 模型与决策树连接起来

三大特征提取器(RNN/CNN/Transformer)

如何存储 CNN 提取的特征来训练 SVM 分类器

CNN和Transformer相结合的模型

在 CNN 提取特征之上使用 SVM - 如何进行多类分类?

CNN: