使用Turi Create创建Core ML模型时内存占用过高且无进展
解决Turi Create训练Core ML模型中途停止的问题
看起来你在使用Turi Create构建图像分类的Core ML模型时遇到了程序中途停止的情况,我帮你梳理下代码里的问题和可能的解决方案:
先修正代码里的明显错误
未定义的
poses变量
你代码里写了labels = list(poses),但poses根本没被定义过,这会直接触发NameError导致程序终止。其实你完全不用手动定义标签列表——Turi Create可以自动从子文件夹名称提取标签,这比自定义函数更可靠。load_images参数拼写错误
你写的with_path = Tr...应该是with_path=True,这个参数是用来获取图片的文件路径,后续才能从中提取标签。
替换自定义标签提取逻辑
你自己写的get_label函数容易出错,不如直接用路径解析来提取子文件夹名作为标签,比如:
data['label'] = data['path'].apply(lambda path: path.split('/')[-2])
这里假设你的文件夹结构是RenderedImages/标签名/图片.jpg,split('/')[-2]就能精准拿到子文件夹的标签名称。
程序停止的其他常见原因&解决办法
- 内存不足:如果你的图片数量多、分辨率高,加载时会占用大量内存,导致程序无响应。可以在
load_images里加上target_size=(224,224)参数,统一把图片缩放到224x224的尺寸,大幅降低内存占用。 - 损坏的图片:数据集里如果有损坏的图片,会导致Turi Create在处理时卡住。可以用
data = data.dropna()过滤掉无效的图片数据。 - 训练迭代设置:如果是训练模型时停止,可以调整
max_iterations参数(比如设为50),避免迭代次数过多导致超时。
修正后的完整代码示例
import turicreate as tc print("Processing images for training...") # 加载图片,同时获取路径,并统一缩放尺寸 data = tc.image_analysis.load_images('RenderedImages', with_path=True, target_size=(224,224)) # 从路径提取子文件夹名作为标签 data['label'] = data['path'].apply(lambda path: path.split('/')[-2]) # 过滤无效数据 data = data.dropna() # 划分训练集和测试集 train_data, test_data = data.random_split(0.8) print("Starting model training...") # 创建图像分类器,设置迭代次数 model = tc.image_classifier.create(train_data, target='label', max_iterations=50) # 评估模型性能 metrics = model.evaluate(test_data) print(f"Model accuracy: {metrics['accuracy']:.2f}") # 导出为Core ML模型 model.export_coreml('PoseClassifier.mlmodel') print("Core ML model exported successfully!")
额外调试建议
- 运行时盯着终端输出,看有没有报错信息(比如文件找不到、内存溢出),这能快速定位问题。
- 先拿少量图片测试,比如每个标签下放3-5张图,确认程序能正常运行后再用完整数据集。
内容的提问来源于stack exchange,提问作者J.Treutlein
相关产品推荐
相关产品推荐

