TensorFlow 1 目标检测模型训练与评估实战指南:本地、Cloud AI Platform 与 TPU 全流程解析

发布时间:2026/10/27 21:39:45

TensorFlow 1 目标检测模型训练与评估实战指南:本地、Cloud AI Platform 与 TPU 全流程解析 TensorFlow 1 目标检测模型训练与评估实战指南本地、Cloud AI Platform 与 TPU 全流程解析【免费下载链接】modelsModels and examples built with TensorFlow项目地址: https://gitcode.com/GitHub_Trending/mode/models导读本文基于 TensorFlow Object Detection APITF1 分支官方训练与评估指南完整讲解如何从零训练一个目标检测模型从目录规划、模型配置文件编写、预训练权重初始化到在本地环境、Google Cloud AI Platform多 Worker GPU以及 TPU 上提交训练与评估任务并借助 TensorBoard 监控训练进度。读完本文你将能够独立完成一条pipeline.config→ 训练任务 → 评估任务 → TensorBoard 可视化的完整闭环并理解底层model_main.py/model_tpu_main.py的执行机制。适用前提本文对应仓库中的 TF1 训练链路环境要求 Python 3.6 与 TensorFlow 1.15。仓库中同步提供了 TF2 训练与评估指南新项目建议优先考虑 TF2 版本。开始前的前置条件本文假定读者已经完成以下两项准备工作已按 安装说明 安装好 TensorFlow Object Detection API含依赖包与slim路径配置。已经准备好了合法的数据集。关于如何为 PASCAL VOC 挑战赛或 Oxford-IIIT Pet 数据集生成 TFRecord 数据参见 preparing_inputs对数据格式、label map 与目录组织还有疑问的读者还可参考 using_your_own_dataset。在此基础上官方还推荐先在本地跑少量迭代验证任务可行性再提交到云端可大幅降低排查成本详见下文各云任务的“建议本地预演”。推荐的训练与评估目录结构为了让训练产物、评估产物彼此隔离、便于 TensorBoard 统一加载官方推荐使用如下目录结构. ├── data/ │ ├── eval-00000-of-00001.tfrecord │ ├── label_map.txt │ ├── train-00000-of-00002.tfrecord │ └── train-00001-of-00002.tfrecord └── models/ └── my_model_dir/ ├── eval/ # Created by evaluation job. ├── my_model.config └── train/ # └── model_ckpt-100-data1 # Created by training job. └── model_ckpt-100-index # └── checkpoint #要点说明data/存放 TFRecord 与 label maplabel map 在训练集和评估集之间必须保持一致my_model_dir/作为单一模型目录即下文的${MODEL_DIR}训练任务生成的 checkpoint含model_ckpt-*.data-*、*.index、checkpoint元文件等与评估任务生成的 events 分别落在train/、eval/子目录下便于后续tensorboard --logdir${MODEL_DIR}一条命令同时看到两侧曲线checkpoint 文件后缀中的data1等编号来自分布式TPU训练的多分片存储约定属于正常现象。编写模型配置文件所有训练参数都由一份基于 protobuf 的 pipeline 配置文件pipeline.config承载。其模式定义在 protos/pipeline.proto顶层由五大部分组成model模型结构、train_config训练超参与预训练权重初始化、eval_config评估指标、train_input_reader与eval_input_reader训练/评估数据源。仓库在 samples/configs 目录下提供了大量可直接复用的示例配置例如 SSD、Faster R-CNN 及其各 backbone 变体。建议操作方式挑选与目标网络最接近的 config 作为模板将其内容作为骨架替换三处关键路径与超参具体配置字段的逐项说明见 configuring_jobs。以 ssd_mobilenet_v2_coco.config 为例模板中以PATH_TO_BE_CONFIGURED占位的字段正是需要用户替换的部分train_input_reader.tf_record_input_reader.input_path与eval_input_reader...input_path训练/评估 TFRecord 路径支持?????通配符匹配多分片文件也支持gs://开头的云端路径label_map_pathlabel map 文件路径train_config.fine_tune_checkpoint预训练 checkpoint 前缀见下节model.ssd.num_classes必须改成自己数据集的类别数。模型参数初始化使用预训练权重加速收敛从零训练一个目标检测器往往耗时数天。官方强烈建议复用已有图像分类或目标检测 checkpoint 中的特征提取器参数。train_config提供两个关键字段定义见 protos/train.protofine_tune_checkpoint已有 checkpoint 的路径前缀例如/usr/home/username/checkpoint/model.ckpt-#####fine_tune_checkpoint_type取值为classification或detection决定从哪种类型的预训练模型加载。对fine_tune_checkpoint_type的底层语义train.proto 中有更精确的注释classification仅恢复特征提取器中用于分类的 backbone 部分典型场景是从 ImageNet 预训练分类模型如 ResNet起步训练检测模型detection恢复整个特征提取器仅不恢复 box 与 class 预测头典型场景是复用预训练检测模型在新数据集/新任务上微调full恢复完整检测模型特征提取器 预测头仅当预训练任务与微调任务完全一致时使用否则参数 shape 不兼容会在恢复时直接报错。此外需要注意旧字段from_detection_checkpoint默认false与load_all_detection_checkpoint_vars在 proto 中已被标记为deprecated新配置应统一改用fine_tune_checkpoint_type。加载 checkpoint 时默认还会跑一次 dummy computation 以触发变量构建对应run_fine_tune_checkpoint_dummy_computation字段默认trueCenterNet 等部分 meta architecture 可将其置false以缩短启动时间。仓库在 samples/configs 的示例中对该字段的典型用法如下train_config: { fine_tune_checkpoint: PATH_TO_BE_CONFIGURED/model.ckpt fine_tune_checkpoint_type: detection ... }可用的检测预训练模型清单含模型名、下载地址、速度与 mAP 等指标请查阅 tf1_detection_zoo。其中每个模型的名称都对应samples/configs下的一份训练配置文件解压 tar.gz 后即可得到 checkpoint、pipeline.config及可供推理的 frozen graph。本地训练训练 评估交错执行在本地 GPU/CPU 环境启动训练使用入口脚本 model_main.py# 在 tensorflow/models/research/ 目录下执行 PIPELINE_CONFIG_PATH{path to pipeline config file} MODEL_DIR{path to model directory} NUM_TRAIN_STEPS50000 SAMPLE_1_OF_N_EVAL_EXAMPLES1 python object_detection/model_main.py \ --pipeline_config_path${PIPELINE_CONFIG_PATH} \ --model_dir${MODEL_DIR} \ --num_train_steps${NUM_TRAIN_STEPS} \ --sample_1_of_n_eval_examples${SAMPLE_1_OF_N_EVAL_EXAMPLES} \ --alsologtostderr其中${PIPELINE_CONFIG_PATH}指向 pipeline 配置文件${MODEL_DIR}指向训练 checkpoint 与 events 的输出目录。需要特别强调的是该二进制会将训练与评估交错执行——从源码model_main.py可以看到未指定checkpoint_dir时程序会调用create_train_and_eval_specs构造 TrainSpec/EvalSpec再交由tf_estimator.train_and_evaluate运行评估会在训练中途周期性自动执行。该脚本支持的完整 flag 集合来自 model_main.py如下Flag类型默认值含义model_dirstring必填模型输出目录event/checkpoint 将写入这里pipeline_config_pathstring必填pipeline 配置文件路径num_train_stepsintNone训练步数sample_1_of_n_eval_examplesint1评估时每 n 个样本取 1 个参与评估sample_1_of_n_eval_on_train_examplesint5对训练数据做评估时每 n 个取 1 个仅eval_training_dataTrue时生效eval_training_databoolFalse是否评估训练数据仅用于 eval-only 模式且必须提供checkpoint_dircheckpoint_dirstringNone若提供则本二进制进入eval-only模式将指标写入model_dirrun_onceboolFalseeval-only 模式下只跑一轮评估否则持续评估默认max_eval_retriesint0持续评估遇到InvalidArgumentError时的最大重试次数为负则总是重试Google Cloud AI Platform 上的分布式训练TensorFlow Object Detection API 官方支持在 Google Cloud AI Platform 上训练与评估。开始前需要满足已在 Cloud AI Platform 上创建并配置好项目涉及 GPU/TPU 的配额与网络配置官方另有 Using GPUs / Using TPUs 指南此处不再展开数据已上传至 Google Cloud StorageGCS存储桶路径形式如gs://${BUCKET}/...。同样地官方建议先在本地跑少量迭代验证任务脚本正确再提交云端。单 GPU 多 Worker 训练多 Worker GPU 训练任务需要一份 YAML 集群配置文件样例内容如下trainingInput: runtimeVersion: 1.15 scaleTier: CUSTOM masterType: standard_gpu workerCount: 9 workerType: standard_gpu parameterServerCount: 3 parameterServerType: standard编写 YAML 时务必遵循以下经验法则n 个 worker 的任务实际会有n 1 台训练机器n 个 worker 1 个 masterparameter server 数量应使用奇数以避免因轮询调度导致某个 PS 上只存放了权重变量或只存放了偏置变量worker 数量增多时应相应降低学习率最优值需要通过实验确定仓库各示例 config 给出的学习率高度依赖具体训练环境例如 worker 数量与 GPU 型号。YAML 文件应保存在本地机器而非 GCP 上。随后用gcloud ml-engine jobs submit training提交任务# 在 tensorflow/models/research/ 目录下执行 cp object_detection/packages/tf1/setup.py . gcloud ml-engine jobs submit training object_detection_date %m_%d_%Y_%H_%M_%S \ --runtime-version 1.15 \ --python-version 3.6 \ --job-dirgs://${MODEL_DIR} \ --package-path ./object_detection \ --module-name object_detection.model_main \ --region us-central1 \ --config ${PATH_TO_LOCAL_YAML_FILE} \ -- \ --model_dirgs://${MODEL_DIR} \ --pipeline_config_pathgs://${PIPELINE_CONFIG_PATH}参数说明${PATH_TO_LOCAL_YAML_FILE}本地 YAML 配置路径gs://${MODEL_DIR}GCS 上写入训练 checkpoint 与 events 的目录即model_dirgs://${PIPELINE_CONFIG_PATH}存放在 GCS 上的 pipeline 配置文件路径先执行cp object_detection/packages/tf1/setup.py .是因为 packages/tf1/setup.py 声明了云端任务打包安装所依赖的REQUIRED_PACKAGESpillow、lxml、matplotlib、Cython、contextlib2、tf-slim、six、pycocotools、lvis、scipy、pandas 等并将slim下的子包纳入find_packages的范围与本地运行相同module-name object_detection.model_main的任务同样会在训练中交错执行评估训练进度可在 AI Platform 的任务管理控制台实时查看。使用 TPU 训练TPU 训练需要 pipeline config 是 TPU 兼容的batch size、anchor、网络结构均需适配随后使用 TPU 专用入口脚本 model_tpu_main.py 提交# 在 tensorflow/models/research/ 目录下执行 cp object_detection/packages/tf1/setup.py . gcloud ml-engine jobs submit training whoami_object_detection_date %m_%d_%Y_%H_%M_%S \ --job-dirgs://${MODEL_DIR} \ --package-path ./object_detection \ --module-name object_detection.model_tpu_main \ --runtime-version 1.15 \ --python-version 3.6 \ --scale-tier BASIC_TPU \ --region us-central1 \ -- \ --tpu_zone us-central1 \ --model_dirgs://${MODEL_DIR} \ --pipeline_config_pathgs://${PIPELINE_CONFIG_PATH}与 GPU 训练命令的差异不需要 YAML 文件改用--scale-tier BASIC_TPU一键拉起 TPU 集群module-name从object_detection.model_main换成object_detection.model_tpu_main需额外提供--tpu_zone--tpu_name、--gcp_project可选不指定时从环境自动探测pipeline_config_path必须指向TPU 兼容的模型配置。从源码看model_tpu_main.pyTPU 训练基于tf_estimator.tpu.RunConfigTPUConfig构建 Estimator其中几个默认值值得留意num_shardsTPU core 数默认 8、iterations_per_loop每个 TPU 训练循环的迭代数默认 100另有modetrain或eval、train_batch_size默认不指定则从 train config 读取等 flag。TPU 任务默认每 10 分钟保存一次最近 checkpoint。与 GPU 多 Worker 不同model_tpu_main的train模式不会在训练中交错执行评估见 model_tpu_main.pytrain模式仅调用estimator.train因此需要单独起评估任务见下节。使用 GPU 单独执行评估注意仅当使用 TPU 训练时才需要这一步因为 TPU 训练不像多 Worker GPU 训练那样在训练过程中交错执行评估。评估任务运行在单机上因此不需要编写 YAML 集群配置。命令如下# 在 tensorflow/models/research/ 目录下执行 cp object_detection/packages/tf1/setup.py . gcloud ml-engine jobs submit training object_detection_eval_date %m_%d_%Y_%H_%M_%S \ --runtime-version 1.15 \ --python-version 3.6 \ --job-dirgs://${MODEL_DIR} \ --package-path ./object_detection \ --module-name object_detection.model_main \ --region us-central1 \ --scale-tier BASIC_GPU \ -- \ --model_dirgs://${MODEL_DIR} \ --pipeline_config_pathgs://${PIPELINE_CONFIG_PATH} \ --checkpoint_dirgs://${MODEL_DIR}参数说明gs://${MODEL_DIR}既是训练 checkpoint 的存放目录与训练任务保持一致也是评估 events 的输出目录gs://${PIPELINE_CONFIG_PATH}是 GCS 上 pipeline 配置文件路径通过给model_main追加--checkpoint_dirgs://${MODEL_DIR}使其进入eval-only 模式——对照 model_main.py 的逻辑指定checkpoint_dir后会读取tf.train.latest_checkpoint(checkpoint_dir)得到最新 checkpoint 进行评估默认使用第一个 eval input 对应的验证集validation_data若加--eval_training_data则评估训练集不加--run_once时通过continuous_eval持续监控新 checkpoint 并循环评估。最佳实践是让评估任务与训练任务并发启动。还需注意官方不支持在 TPU 上运行评估因此无论训练使用的是 GPU 还是 TPU评估任务的启动命令都是上面这一条GPU 环境。评估循环的健壮性由model_lib.continuous_eval保证它支持配置max_eval_retries在评估单个 checkpoint 遇到InvalidArgumentError时可自动重试设为负数则无条件重试实现见 model_lib.py。使用 TensorBoard 监控训练与评估进度训练与评估的进度曲线都可以用 TensorBoard 查看。如果采用了本文推荐的目录结构train/与eval/位于同一model_dir下则只需一条命令tensorboard --logdir${MODEL_DIR}其中${MODEL_DIR}指向同时包含train/与eval/目录的父目录。TensorBoard 会自动把两侧的标量曲线loss、mAP 等按目录区分展示。需要提醒的是TensorBoard 拉取并聚合数据可能需要几分钟时间启动后稍候片刻再刷新页面即可看到完整曲线。训练/评估执行链路原理速览把上述操作背后的调用关系串起来可以得到一条清晰的主线统一以 model_lib.py 为核心工具库model_main.py/model_tpu_main.py解析命令行 flag并强制要求model_dir与pipeline_config_path调用model_lib.create_estimator_and_inputsmodel_lib.py读取 pipeline config构建 Estimator 以及 train/eval/predict 对应的 input_fnTPU 场景会传入use_tpu_estimatorTrue与num_shards无checkpoint_dir时create_train_and_eval_specsmodel_lib.py将第一个 EvalSpec 关联一个名为Servo的FinalExporter用于导出 serving 模型然后交给tf_estimator.train_and_evaluate交错执行训练与评估指定checkpoint_direval-only时continuous_evalmodel_lib.py 起的生成器实现持续扫描模型目录中的新 checkpoint逐个评估并写入model_dir直至训练总步数对应的最终 checkpoint 评估完成。理解这条链路后本地单机训练、云上多 Worker GPU 训练、TPU 训练与独立 GPU 评估这四种任务形态的区别是否交错评估、是否复用同一model_main、是否需要 YAML、入口是model_main还是model_tpu_main便会一目了然排查训练中断、评估不启动等常见问题时也更有章可循。常见问题与进阶参考训练一步都不走/checkpoint 不落盘优先检查model_dir是否可写、pipeline config 中input_path与 label map 路径是否准确含?????通配与gs://前缀场景以及fine_tune_checkpoint_type与预训练权重是否匹配加载 checkpoint 报 shape 不兼容多为classification/detection/full选择与来源模型不一致所致请对照前文 train.proto 语义重新选择评估任务一直不结束/不更新确认未加--run_once默认持续评估并核对checkpoint_dir与训练侧model_dir一致。更进一步的资料可继续阅读仓库中的 tf1.mdTF1 环境安装与整体概览、configuring_jobs.mdpipeline 各字段详解、tf1_detection_zoo.md预训练模型清单以及 tf2_training_and_evaluation.mdTF2 训练流程。若要在自定义数据集上走完整流程结合 using_your_own_dataset.md 与 running_pets.md 一起阅读效果最佳。【免费下载链接】modelsModels and examples built with TensorFlow项目地址: https://gitcode.com/GitHub_Trending/mode/models创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/27 23:56:54

模块化家用移动服务机器人实战:从移动充电到智能中枢

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 2:25:30

从TikTok成瘾性设计解析推荐算法与交互优化技术实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 4:53:07

游戏机制实测方法:飞毛腿与蝎刺增伤效果的数据验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/28 16:32:23

Agent Skills实战:从只会聊到会干活,技能机制全解析

你有没有过这种经历:一个Agent吹得天花乱坠,接进来之后日常聊天确实像模像样,可只要一让它干点具体的活——画一张分镜、生成一份带样式的落地页、批量整理一批文件——就开始拉胯。要么给一堆正确的废话,要么做出来的东西根本不能…

2026/10/28 16:32:23

Web 3D优化实战:KTX2纹理压缩与Draco几何编码管线

如果你是一个 Web 3D 项目的负责人,应该对这套流程一点都不陌生:美术在 Blender 里调了一下午,导出几百 MB 的 glTF 模型;你也认真写了模型加载代码,结果用户打开页面先盯着加载条看了三秒,然后说“这页面怎…

2026/10/28 16:32:23

C++ Socket编程:从基础到高级实践

1. Socket编程基础概念解析在C网络编程中,Socket(套接字)是网络通信的基本构建块。简单来说,它就像是两台计算机之间的电话插座——插上就能通话。Socket本质上是一个抽象层,位于应用层和传输层之间,为应用…

2026/10/28 16:32:23

C++20 Ranges适配器视图与代理迭代器深度解析

1. 项目概述在C20标准中引入的std::ranges库彻底改变了我们处理序列数据的方式。作为一名长期使用C进行系统开发的工程师,我发现其中最令人兴奋的特性莫过于适配器视图(Adapter Views)与代理迭代器(Proxy Iterators)的…

2026/10/28 16:32:22

STM32H743定时器触发ADC+DMA双缓冲:高速采样不拖累CPU的工程模板

简介:在嵌入式数据采集与电机控制中,ADC采样率提升常导致CPU被中断拖累。利用定时器硬件触发ADC转换,再配合DMA双缓冲(乒乓缓冲)搬运数据,可让采样链路几乎不占用CPU资源。STM32H743基于异步时钟域的ADC与高…

2026/10/28 16:27:19

Flask+WebUploader实现大文件分片上传与断点续传

简介:这是一份基于Flask与WebUploader实现的大文件分片上传与流式下载的完整Web应用Demo,面向Python后端开发者、Web全栈初学者及需要解决大文件传输瓶颈的工程实践者。资源解决了传统单次HTTP上传易超时、内存占用高、并发上传冲突等问题,通…

2026/10/28 14:42:12

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/28 15:28:56

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/28 3:32:29

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/28 0:02:13

Python股票自动交易系统源码解析:从行情获取到风控的完整链路

简介:这份资源是面向高校计算机、金融相关专业毕业设计场景的完整项目源码包,主题为基于Python的股票自动交易系统,适合需要完成毕设选题、课程设计或自学金融量化交易开发的学生与开发者参考。压缩包共收录687个文件,整体约14.93…

2026/10/28 0:02:13

视酷酷信IM源码部署指南:Java 17+MySQL 8.0.33实战配置

简介:这是一套2024年亲测可部署的视酷酷信IM即时通讯系统源码,面向具备Java、OC、C#及Vue开发能力的技术人员,解决私有化即时通讯平台快速搭建与二次定制需求,尤其适用于需集成商城、保障数据主权的中小型企业或独立开发者。资源共…

2026/10/28 0:02:13

Python爬取百度迁徙数据:接口解析、批量采集与避坑指南

简介:这份资源是一个用Python爬取百度迁徙数据的脚本压缩包,面向具备Python基础、希望入门网络爬虫与数据解析的开发者,解决按日期获取全国热门城市人口迁徙数据的问题。包内共1个文件,为单个py脚本,压缩包约1KB&#…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑