0

我一直在尝试使用 Turi Create 创建一个简单的 Core ML 模型,但程序在迭代后停止。我有一个名为“RenderedImages”的文件夹,其中包含带有标签名称的文件夹以及所有相关图像。

编码:

import turicreate as tc

print("Processing images for training...")            
# load the images
labels = list(poses)
def get_label(path, labels=labels):  
    for label in labels:  
        if label in path:  
            return label

data = tc.image_analysis.load_images('RenderedImages', with_path = True)
data['label'] = data['path'].apply(get_label)
print(data.groupby('label',[tc.aggregate.COUNT]))

# save the data
sFramePath = 'Data.sframe'
data.save(sFramePath)
data.explore()

#Train the model

print("Training model..") 
# load the data
data = tc.SFrame(sFramePath)
train_data, test_data = data.random_split(0.8)
model = tc.image_classifier.create(
    train_data,
    target='label',
    model='squeezenet_v1.1',
    max_iterations=500)
print("ENDED")
model.save('MyModel.model')
model.export_coreml('Data.mlmodel')

predictions = model.predict(test_data)
metrics = model.evaluate(test_data)
print(metrics['accuracy'])

输出是:

物化 SFrame... 完成。训练模型.. [19:49:50] src/nnvm/legacy_json_util.cc:190:加载由以前版本 v0.8.0 保存的符号。正在尝试升级... [19:49:50] src/nnvm/legacy_json_util.cc:198:符号升级成功!调整图像大小...对调整大小的图像执行特征提取...已完成 154/154 进度:从 5% 的训练数据创建验证集。可能还要等一下。您可以设置validation_set=None禁用验证跟踪。

警告:与示例数量相比,此问题中的特征维度数量非常大。除非设置了适当的正则化值,否则此模型可能无法为验证/测试集提供准确的预测。

逻辑回归:

示例数:143 类数:31 特征列数:1 解包特征数:1000 系数数:30030

启动 L-BFGS

+-----------+---------+------------+-------------- +-----------------+---------------------+ | 迭代 | 通行证 | 步长 | 已用时间 | 训练精度 | 验证准确度 | +-----------+---------+------------+-------------- +-----------------+---------------------+ | 1 | 6 | 0.000111 | 1.190632 | 0.076923 | 0.000000 | | 2 | 8 | 1.000000 | 1.284117 | 0.076923 | 0.000000 | | 3 | 9 | 1.000000 | 1.342702 | 0.111888 | 0.090909 | | 4 | 10 | 1.000000 | 1.400136 | 0.412587 | 0.181818 | | 5 | 11 | 1.000000 | 1.463703 | 0.426573 | 0.181818 | | 6 | 12 | 1.000000 | 1.511046 | 0.601399 | 0。454545 | | 11 | 17 | 1.000000 | 1.800922 | 0.853147 | 0.272727 | | 25 | 33 | 0.500000 | 2.653545 | 0.930070 | 0.454545 | | 50 | 65 | 0.500000 | 4.236037 | 1.000000 | 0.545455 | | 51 | 69 | 0.250000 | 4.388548 | 1.000000 | 0.545455 | | 75 | 103 | 0.500000 | 5.984408 | 1.000000 | 0.545455 | | 100 | 142 | 1.000000 | 7.716398 | 1.000000 | 0.545455 | | 101 | 144 | 1.000000 | 7.792923 | 1.000000 | 0.545455 | | 125 | 171 | 1.000000 | 9.240253 | 1.000000 | 0。545455 | +-----------+---------+------------+-------------- +-----------------+----------+

成功:找到最佳解决方案。

然后在这一点之后,内存完全填满,即使我等待一段时间也没有任何反应。

我有 16GB 的内存,为了确保图像的数量不是问题,我什至在每个标签上运行了 5 张图像(总共大约 50 张图像)。我认为我的电脑和内存不是问题,所以我做错了什么?

提前感谢您的任何答案


更新

我发现了问题所在!虽然,我不知道如何解决它。

本节:

def get_label(path, labels=labels):  
    for label in labels:  
        if label in path:  
            return label

data['label'] = data['path'].apply(get_label)

未根据文件路径正确标记所有图像这是因为这样的事情

data["foodType"] = data["path"].apply(lambda path: "Rice" if "rice" in path else "Soup")

有效,但使用这种方法我只能有 2 个不同的标签(2 个不同的文件夹),但我想要更多。有没有办法根据它们所在的文件夹的名称来标记图像,其中包含超过 2 个文件夹?

谢谢!

4

1 回答 1

0

也许您使用的squeezenet_v1.1 会比其他模型好得多。您可以尝试通过以下方式评论 data.explore()

# data.explore()

这只是 turi 中所有图像的可视化可能会导致您的内存问题(如果您的数据集有很多图像)。

于 2018-03-29T00:19:46.487 回答