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

如何在TensorFlow中加载图像及CSV标注文件用于目标检测?

TensorFlow目标检测:加载图像与CSV标注的方法

TensorFlow没有直接对应image_dataset_from_directory的目标检测专用加载函数,但可以通过tf.data.Dataset自定义实现,步骤如下:

1. 读取CSV标注文件

先通过pandas读取CSV,关联图像路径与边界框标注:

import pandas as pd
import tensorflow as tf

# 配置路径
IMAGE_DIR = "./path/to/your/images"
CSV_PATH = "./path/to/annotations.csv"

# 读取CSV,假设列名是filename, x0, y0, width, height
df = pd.read_csv(CSV_PATH)
# 拼接完整图像路径
df["image_path"] = df["filename"].apply(lambda x: f"{IMAGE_DIR}/{x}")

2. 创建基础数据集

从DataFrame中提取图像路径和标注数据,构建TensorFlow数据集:

# 提取图像路径数组和标注数组
image_paths = df["image_path"].values
bboxes = df[["x0", "y0", "width", "height"]].values

# 创建数据集
dataset = tf.data.Dataset.from_tensor_slices((image_paths, bboxes))

3. 编写图像与标注解析函数

实现加载图像、解码、格式转换的逻辑,把CSV的(x0,y0,width,height)转成目标检测常用的(xmin, ymin, xmax, ymax)格式:

def load_and_preprocess_image(image_path, bbox):
    # 读取图像文件
    img_raw = tf.io.read_file(image_path)
    # 解码成RGB图像
    img = tf.image.decode_jpeg(img_raw, channels=3)
    # 归一化到[0,1]区间(可选,根据模型需求调整)
    img = tf.cast(img, tf.float32) / 255.0
    
    # 转换边界框格式:x0,y0,w,h → xmin, ymin, xmax, ymax
    xmin = bbox[0]
    ymin = bbox[1]
    xmax = bbox[0] + bbox[2]
    ymax = bbox[1] + bbox[3]
    # 包装成模型需要的格式(比如列表或字典)
    bbox_processed = tf.stack([xmin, ymin, xmax, ymax])
    
    return img, bbox_processed

4. 应用解析函数并优化数据集

对数据集映射解析函数,添加shuffle、batch、prefetch等操作提升训练效率:

# 应用解析函数
dataset = dataset.map(load_and_preprocess_image, num_parallel_calls=tf.data.AUTOTUNE)

# 数据集优化
BATCH_SIZE = 32
dataset = dataset.shuffle(buffer_size=len(df)) \
                 .batch(BATCH_SIZE) \
                 .prefetch(tf.data.AUTOTUNE)

额外说明

  • 如果你的CSV包含类别标签,只需在解析函数中加入类别处理逻辑,返回(img, (bbox, label))即可适配多输出模型。
  • 若存在单张图像对应多个边界框的情况,需先按图像名分组标注,再调整数据集构建逻辑(比如用tf.data.Dataset.group_by_window)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 19:35:21