首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用CNN中给定的XML注释文件对图像进行分类

如何使用CNN中给定的XML注释文件对图像进行分类
EN

Stack Overflow用户
提问于 2022-05-03 19:05:01
回答 1查看 506关注 0票数 1

在过去的一个月里,我一直在学习卷积神经网络,并且在做某种分类时,我终于试着去了解如何使用带注释的图像。我目前正在使用以下图片/注释:

http://web.mit.edu/torralba/www/indoor.html

下载了为注释链接的tar文件后,我不明白如何使用提取的XML文件来帮助CNN对图像进行分类。我不明白它们是否需要以另一种方式格式化,或者只是以某种方式与我所拥有的正常图像相结合。我一直在寻找关于该如何做的参考资料,但据我所知,我还没有找到任何线索。

这是我当前的代码,用于在没有注释的情况下构建原始图像集。

我希望能就我需要做的事情提供任何指导。

代码语言:javascript
复制
import matplotlib.pyplot as plt
from sklearn.preprocessing import OneHotEncoder
import os
import cv2
import pickle
import random


DATADIR = "C:/Users/cadan/OneDrive/Desktop/IndoorImages/Images"
CATEGORIES = os.listdir(DATADIR)
#CATEGORIES = ["airport_inside","artstudio","auditorium","bakery","bar","bathroom","bedroom","bookstore","bowling","buffet"]

new_shape = len(CATEGORIES)

IMG_SIZE = 100
enc = OneHotEncoder(handle_unknown='ignore', categories = 'auto')
NEW_CATEGORIES = np.array(CATEGORIES).reshape(new_shape,1)
transformed = enc.fit_transform(NEW_CATEGORIES[:]).toarray()
training_data = []


def create_training_data():
    for category in CATEGORIES:
        path = os.path.join(DATADIR, category)
        class_num = CATEGORIES.index(category)
        for img in os.listdir(path):
            try:
                img_array = cv2.imread(os.path.join(path,img))
                new_array = cv2.resize(img_array, (IMG_SIZE,IMG_SIZE))
                training_data.append([new_array,transformed[class_num]])
            except Exception as e:
                pass
            
create_training_data()



random.shuffle(training_data)

X = []
y = []

for features, label in training_data:
    X.append(features)
    y.append(label)

X = np.array(X).reshape(-1, IMG_SIZE, IMG_SIZE, 3)
y = np.array(y)

pickle_out = open("images","wb")
pickle.dump(X, pickle_out)
pickle_out.close()

pickle_out = open("categories","wb")
pickle.dump(y, pickle_out)
pickle_out.close()
EN

回答 1

Stack Overflow用户

发布于 2022-05-04 11:30:46

这真的取决于你想要解决的任务,而且你的描述还不完全清楚。

由于您开始进入DL,我建议您从一个简单的分类任务开始,其中您将图像集作为输入,将一组单个标签作为输出(在本例中,您可以使用给定数据集提供的类别)。要解决这个问题,您可以从CNN架构开始,例如ResNet。在Keras中,您只需导入模型体系结构并更改顶层以匹配所需的输出形状(即两行代码!)。我非常喜欢Keras社区提供的示例,这里 --您可以从零开始为简单的分类任务找到一个很好的切入点。

对于您的特定数据集,我将采用以下方式(过于简化):

  • 为映像类构建XML解析器,并将其传递给Pandas Dataframe。一个列表示文件名,另一个列表示标签。
  • 建立有线电视新闻网,如在前面的链接。
  • 使用创建的Pandas中的Keras ImageDataGenerator
  • 利用.fit()对模型进行训练
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72104293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档