imagenet 数据整理

写在前面
百万张图片的 imagenet 数据原始大小约为 148G,整理成 TFRecord 格式文件后约为 144G,因此至少要准备 300G 大小。

参考:https://github.com/tensorflow/models/tree/master/research/inception#getting-started

1 在 iimagenet 网站 http://image-net.org 注册,记下用户名与密码。
2 下载代码。是tensorflow 的model zoom,https://github.com/tensorflow/models, 代码在models/research/inception/inception/data
3 修改 download_and_preprocess_imagenet.sh 脚本,如我改的结果如下:
主要是 WORK_DIRBUILD_SCRIPTOUTPUT_DIRECTORY 三个,另外,将 BUILD_SCRIPT 设为可执行, 在 build_imagenet_data.py 文件头添加了 #!/usr/bin/env python, 目的是 BUILD_SCRIPT 默认是shell可执行文件。


# usage:
#  ./download_and_preprocess_imagenet.sh [data-dir]
set -e

if [ -z "$1" ]; then
  echo "Usage: download_and_preprocess_imagenet.sh [data dir]"
  exit
fi

# Create the output and temporary directories.
DATA_DIR="${1%/}"
SCRATCH_DIR="${DATA_DIR}/raw-data/"
#mkdir -p "${DATA_DIR}"
#mkdir -p "${SCRATCH_DIR}"
#WORK_DIR="$0.runfiles/inception/inception"
WORK_DIR="/home/linlf/project/linlf/mlperf/reference/image_classification/dataset/inception"
# Download the ImageNet data.
LABELS_FILE="${WORK_DIR}/data/imagenet_lsvrc_2015_synsets.txt"
DOWNLOAD_SCRIPT="${WORK_DIR}/data/download_imagenet.sh"
"${DOWNLOAD_SCRIPT}" "${SCRATCH_DIR}" "${LABELS_FILE}"

# Note the locations of the train and validation data.
TRAIN_DIRECTORY="${SCRATCH_DIR}train/"
VALIDATION_DIRECTORY="${SCRATCH_DIR}validation/"

# Preprocess the validation data by moving the images into the appropriate
# sub-directory based on the label (synset) of the image.
echo "Organizing the validation data into sub-directories."
PREPROCESS_VAL_SCRIPT="${WORK_DIR}/data/preprocess_imagenet_validation_data.py"
VAL_LABELS_FILE="${WORK_DIR}/data/imagenet_2012_validation_synset_labels.txt"

"${PREPROCESS_VAL_SCRIPT}" "${VALIDATION_DIRECTORY}" "${VAL_LABELS_FILE}"

# Convert the XML files for bounding box annotations into a single CSV.
echo "Extracting bounding box information from XML."
BOUNDING_BOX_SCRIPT="${WORK_DIR}/data/process_bounding_boxes.py"
BOUNDING_BOX_FILE="${SCRATCH_DIR}/imagenet_2012_bounding_boxes.csv"
BOUNDING_BOX_DIR="${SCRATCH_DIR}bounding_boxes/"

"${BOUNDING_BOX_SCRIPT}" "${BOUNDING_BOX_DIR}" "${LABELS_FILE}" \
 | sort > "${BOUNDING_BOX_FILE}"
echo "Finished downloading and preprocessing the ImageNet data."

# Build the TFRecords version of the ImageNet data.
#BUILD_SCRIPT="${WORK_DIR}/build_imagenet_data"
BUILD_SCRIPT="${WORK_DIR}/data/build_imagenet_data_newdataset.py"
#OUTPUT_DIRECTORY="${DATA_DIR}"
# mime -- output new dir
OUTPUT_DIRECTORY="/home/linlf/dataset"
IMAGENET_METADATA_FILE="${WORK_DIR}/data/imagenet_metadata.txt"

"${BUILD_SCRIPT}" \
  --train_directory="${TRAIN_DIRECTORY}" \
  --validation_directory="${VALIDATION_DIRECTORY}" \
  --output_directory="${OUTPUT_DIRECTORY}" \
  --imagenet_metadata_file="${IMAGENET_METADATA_FILE}" \
  --labels_file="${LABELS_FILE}" \
  --bounding_box_file="${BOUNDING_BOX_FILE}"

4 在 build_imagenet_data.py 可以自由调整多少个 TFRecord 训练集 和 TFRecord 测试集,在代码110行:
如下我调整成 512 个 TFRecord 训练集和 64 个 TFRecord 测试集。

 tf.app.flags.DEFINE_integer('train_shards', 512,
                            'Number of shards in training TFRecord files.')
 tf.app.flags.DEFINE_integer('validation_shards', 64,
                            'Number of shards in validation TFRecord files.')
### 下载和使用 ImageNet 数据集的方法 #### 1. **官方下载渠道** ImageNet 数据集的正式获取途径需要通过其官方网站进行注册和申请。具体步骤如下: - 用户需提供教育机构电子邮件地址(通常是 `.edu` 结尾)以完成身份验证。 - 登录后进入 Download 页面,选择所需版本的数据集(如 ILSVRC2012),这是最常用的子集之一[^1]。 - 按照指引下载训练集、验证集以及测试集文件。注意各部分数据量较大,分别为约 140GB、6GB 和 13GB 不等。 #### 2. **备用下载选项** 如果无法满足官方认证条件或遇到其他障碍,还可以考虑一些社区维护的镜像站点。不过务必确认来源可靠合法以免侵犯版权等问题发生。某些科研论坛可能会分享整理后的压缩包链接供研究者们便捷取用[^1]。 #### 3. **安装依赖库与准备环境** 为了高效处理如此海量的信息资源,在本地搭建合适的软件生态至关重要。推荐采用 Python 编程语言配合 PyTorch 或 TensorFlow 等主流框架实现自动化加载流程管理功能。下面给出一段简单的代码片段展示如何读取已解压完毕的标准目录结构下的图片素材: ```python from torchvision import datasets, transforms import torch.utils.data as data_utils transform = transforms.Compose([ transforms.Resize((256, 256)), transforms.ToTensor(), ]) # 加载训练集 train_data_path = './imagenet/train' train_dataset = datasets.ImageFolder(train_data_path, transform=transform) # 创建 DataLoader 对象方便批次迭代访问 batch_size = 32 train_loader = data_utils.DataLoader(dataset=train_dataset, batch_size=batch_size, shuffle=True) ``` 以上脚本定义了一个基本转换管道调整输入尺寸至固定规格后再转成张量形式便于后续计算操作执行。同时利用 `torchvision.datasets.ImageFolder()` 方法快速扫描指定路径下按类别分好文件夹存放的所有样本实例集合起来形成最终可用于模型训练阶段调用的数据流接口实体对象。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值