训练前准备
原始模型获取
Resnet50为一个深度残差网络,可用于对CIFAR-10和ImageNet的1000类数据集进行分类。
主要文件目录结构如下所示(只列出部分涉及文件,更多文件请查看获取的ResNet原始网络脚本):
├── r1 // 原始模型目录 │ ├── resnet // resnet主目录 │ ├── __init__.py │ ├── imagenet_main.py // 基于Imagenet数据集训练网络模型 │ ├── imagenet_preprocessing.py // Imagenet数据集数据预处理模块 │ ├── resnet_model.py // resnet模型文件 │ ├── resnet_run_loop.py // 数据输入处理与运行循环(训练、验证、测试) │ ├── README.md // 项目介绍文件 │ ├── utils │ ├── export.py // 数据接收函数,定义了导出的模型将会对何种格式的参数予以响应 ├── utils │ ├── flags │ ├── core.py // 包含了参数定义的公共接口 │ ├── logs │ ├── hooks_helper.py //自定义创建模型在测试/训练时的工具,比如每秒钟计算步数的功能、每N步或捕获CPU/GPU分析信息的功能等 │ ├── logger.py // 日志工具 │ ├── misc │ ├── distribution_utils.py // 进行分布式运行模型的辅助函数 │ ├── model_helpers.py // 定义了一些能被模型调用的函数,比如控制模型是否停止
数据集准备
- 准备数据集
- 获取数据集
本训练示例以imagenet2012数据集为例,从imagenet官方网站https://www.image-net.org/获取数据集。将准备好的数据集压缩包上传到训练环境上(请自行检查数据集是否完整)。
- 数据集目录参考(本示例在“ /data/dataset/”路径下):
├──imagenet2012 │ ├──ILSVRC2012_img_train.tar │ ├──ILSVRC2012_img_val.tar │ ├──ILSVRC2012_bbox_train_v2.tar.gz
- 执行如下命令,创建并运行脚本文件,创建“train”、“val”、“bbox”和“imagenet_tf”目录,分别解压train、val、bbox数据集压缩包到对应的目录。
- 执行如下命令,创建并打开“prepare_dataset.sh”文件。
vim prepare_dataset.sh
- 在文件中添加如下脚本命令。
#!/bin/bash mkdir -p train val bbox imagenet_tf tar -xvf ILSVRC2012_img_train.tar -C train/ tar -xvf ILSVRC2012_img_val.tar -C val/ tar -xvf ILSVRC2012_bbox_train_v2.tar.gz -C bbox/
- 执行:wq!命令保存文件并退出。
- 执行如下命令运行脚本文件。
- 执行如下命令,创建并打开“prepare_dataset.sh”文件。
- 检查数据集目录(本示例在“ /data/dataset/”路径下)。
├──imagenet2012 │ ├──ILSVRC2012_img_train.tar │ ├──ILSVRC2012_img_val.tar │ ├──ILSVRC2012_bbox_train_v2.tar.gz │ ├──bbox/ │ ├──train/ │ ├──val/
- 获取数据集
- 转换数据集为TFRecord格式。
- 下载源代码。
- 执行如下命令进入源代码的“datasets”目录,并预处理验证数据。
cd models-master/research/slim/datasets/
python preprocess_imagenet_validation_data.py /data/dataset/imagenet2012/val/ imagenet_2012_validation_synset_labels.txt # 预处理验证数据
- 将标注的XML文件转换为单个CSV文件。
python process_bounding_boxes.py /data/dataset/imagenet2012/bbox/ imagenet_lsvrc_2015_synsets.txt | sort > imagenet_2012_bounding_boxes.csv
- 转换ImageNet数据集为TFRecord格式。
python build_imagenet_data.py --output_directory=/data/dataset/imagenet2012/imagenet_tf --train_directory=/data/dataset/imagenet2012/train --validation_directory=/data/dataset/imagenet2012/val
- 查看转换好的数据集。
├─ imagenet2012 ├─——imagenet_tf │ ├──train-00000-of-01024 │ ├──train-00001-of-01024 │ ├──train-00002-of-01024 │ ... │ ├──validation-00000-of-00128 │ ├──validation-00001-of-00128 │ ├──validation-00002-of-00128 │ ...
父主题: 手工迁移样例(ResNet50模型)