在过去的一个月里,我一直在学习卷积神经网络,并且在做某种分类时,我终于试着去了解如何使用带注释的图像。我目前正在使用以下图片/注释:
http://web.mit.edu/torralba/www/indoor.html
下载了为注释链接的tar文件后,我不明白如何使用提取的XML文件来帮助CNN对图像进行分类。我不明白它们是否需要以另一种方式格式化,或者只是以某种方式与我所拥有的正常图像相结合。我一直在寻找关于该如何做的参考资料,但据我所知,我还没有找到任何线索。
这是我当前的代码,用于在没有注释的情况下构建原始图像集。
我希望能就我需要做的事情提供任何指导。
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()发布于 2022-05-04 11:30:46
这真的取决于你想要解决的任务,而且你的描述还不完全清楚。
由于您开始进入DL,我建议您从一个简单的分类任务开始,其中您将图像集作为输入,将一组单个标签作为输出(在本例中,您可以使用给定数据集提供的类别)。要解决这个问题,您可以从CNN架构开始,例如ResNet。在Keras中,您只需导入模型体系结构并更改顶层以匹配所需的输出形状(即两行代码!)。我非常喜欢Keras社区提供的示例,这里 --您可以从零开始为简单的分类任务找到一个很好的切入点。
对于您的特定数据集,我将采用以下方式(过于简化):
.fit()对模型进行训练https://stackoverflow.com/questions/72104293
复制相似问题