You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让图像增强生成的每张图片对应各自标签?

问题分析与解决方案

核心问题

你的代码存在两个关键问题导致生成的图片名称重复:

  • get_augmt函数未正确接收label参数,当前代码里的label变量要么未定义,要么所有调用都复用了同一个值;
  • 仅用label作为前缀时,同一图像生成的多张增强图会共享前缀,Keras默认追加的标识无法有效区分不同来源的图像。

修复步骤

1. 传递标签参数到增强函数

调整apply逻辑,同时传入图像和对应标签,修改get_augmt函数接收标签参数:

def get_augmt(row, model):
    image = row["images"]
    label = row["label"]  # 替换为你DataFrame中实际的标签列名
    i = 0
    img_list = []
    for batch in model.flow(x=image,
                            batch_size=1,
                            save_to_dir='probando',
                            # 前缀加入标签和增强次数,确保唯一性
                            save_prefix=f"{label}_aug_{i}",
                            save_format='jpeg',
                            subset=None):
        img_list.append(batch)
        i += 1
        if i > 5:
            return img_list

# 使用axis=1处理整行数据,同时获取图像和标签
pr["img_aug"] = pr.apply(lambda row: get_augmt(row, datagen), axis=1)

2. 优化文件名唯一性(可选)

如果需要更清晰的文件名(比如包含原始图像的唯一标识),可以结合DataFrame行索引:

def get_augmt(row, model):
    image = row["images"]
    label = row["label"]
    img_idx = row.name  # 获取当前行索引作为原始图像的唯一标识
    i = 0
    img_list = []
    for batch in model.flow(x=image,
                            batch_size=1,
                            save_to_dir='probando',
                            save_prefix=f"{label}_img{img_idx}_aug{i}",
                            save_format='jpeg',
                            subset=None):
        img_list.append(batch)
        i += 1
        if i > 5:
            return img_list

pr["img_aug"] = pr.apply(lambda row: get_augmt(row, datagen), axis=1)

关键说明

  • Keras的flow方法会自动在save_prefix后追加随机哈希值,但手动加入标签、原始图像标识和增强次数,能让文件名更具语义且完全唯一;
  • 确认你的DataFrame中存在标签列,若列名不是label,记得替换为实际名称;
  • 若image是批量数据而非单张图像,需要调整x的维度,确保flow能正确处理输入。

内容的提问来源于stack exchange,提问作者Mikee571

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 06:39:15