
深度学习后端开发工具【免费下载链接】tpuReference models and tools for Cloud TPUs.项目地址https://gitcode.com/gh_mirrors/tpu/tpu点击查看免费下载本指南以 tpu 仓库中 models/experimental/deeplab 为蓝本系统讲解如何在 Google Cloud TPU 上训练与评估 DeepLab V3 语义分割模型。你将掌握从环境搭建、数据集与预训练权重准备到训练/评估命令与全部核心参数再到数据管线、多尺度网络构建、MIOU 评估等源码级实现原理的完整链路可直接复现接近 0.74 MIOU使用 train_aug 增强集可达约 0.77的 VOC 2012 分割结果。一、前置条件搭建 Cloud TPU 运行环境DeepLab on Cloud TPU 的完整运行依赖 Google Cloud 环境、tensorflow/models 中的 Deeplab 库以及可用的 PASCAL VOC 2012 数据与预训练权重按以下三步准备即可。1.1 创建 Google Cloud 项目并开通 TPU在运行模型前需要一台与 Cloud TPU 资源绑定的 GCE 虚拟机Compute Engine VM。官方 Quickstart 流程会引导完成项目的创建、TPU 资源的申请以及 VM 与 TPU 的关联。运行本模型必须具备三样东西一台关联了 Cloud TPU 资源的 GCE VM 实例一个存放训练 checkpoint 的 GCS 存储桶一个存放训练与评估数据的 GCS 存储桶。由于训练过程中的 checkpoint、TFRecord 数据集都以 GCS 路径gs://访问建议提前创建好存储桶并确保 VM 具备读写权限。1.2 安装 tensorflow/models 下的 Deeplab 库DeepLab on Cloud TPU 本身是依赖型实现它不重复实现网络骨干、ASPP、Decoder 等全部细节而是直接复用tensorflow/models仓库research/deeplab目录下的库代码。因此必须先按其安装说明将该库加入PYTHONPATH并验证安装成功。这一点从本仓库源码可以清楚印证main.py中直接from deeplab import common、from deeplab.deprecated import segmentation_datasetmodel.py中from deeplab.core import feature_extractor、from deeplab.model import multi_scale_logits等导入全部指向外部 Deeplab 库。除此之外还需要按照tpu仓库顶层说明把models目录本身加入 Python 路径export PYTHONPATH$PYTHONPATH:/path/to/models1.3 准备 PASCAL VOC 2012 语义分割数据集数据集可使用 tensorflow/models 官方提供的脚本research/deeplab/datasets/download_and_convert_voc2012.sh一键完成下载与 TFRecord 格式转换。转换产物包含训练集train、增强训练集train_aug额外加入了 SBD 增强标注样本量更大与验证集val等多个 split后续可通过--train_split/--eval_split参数选择。1.4 准备预训练骨干权重DeepLab V3 的骨干网络通常先在 ImageNet 上预训练。README 中特别推荐使用经过修改的 ResNet-101ImageNet 预训练权重在后续训练命令中通过--init_checkpoint指定其路径。若没有该权重训练将从零开始收敛速度与最终精度都会明显下降。二、代码结构理解本仓库的 DeepLab 实现models/experimental/deeplab目录结构非常精简只有 4 个文件职责划分清晰文件职责README.md使用说明前置条件、训练/评估命令、预期精度main.py训练与评估入口flag 定义、TPUEstimator 装配、模式调度model.pymodel_fn网络构建、损失、优化器、评估指标data_pipeline.pyInputReaderTFRecord 读取、预处理、批量化三者形成清晰的调用链main.py构建TPUEstimator(model_fnmodel.model_fn, ...)训练/评估时由data_pipeline.InputReader提供数据批次model.py完成前向、损失与指标计算。下一节先看如何实战运行第四节再深入源码原理。三、训练与评估实战3.1 启动训练训练命令如下在models/experimental/deeplab目录下执行python main.py \ --modetrain \ --num_shards8 \ --train_splittrain \ --alsologtostderrtrue \ --model_dir${MODEL_DIR} \ --dataset_dir${DATASET_DIR} \ --init_checkpoint${INIT_CHECKPOINT} \ --model_variantresnet_v1_101_beta \ --image_pyramid1. \ --aspp_with_separable_convfalse \ --multi_grid1,2,4 \ --decoder_use_separable_convfalse各环境变量的含义${MODEL_DIR}checkpoint 与 TensorBoard 摘要的写入目录GCS 或本地路径${DATASET_DIR}存放 TFRecord 数据集的目录${INIT_CHECKPOINT}上一步下载的 ResNet-101 预训练权重路径。训练完成后只需将--mode改为eval即可复用同一份参数进行评估。README 给出的参考指标为使用trainsplit 训练约 9 小时MIOU 接近0.74若使用增强集--train_splittrain_augMIOU 应接近0.77。3.2 三种运行模式main.py通过--mode控制运行方式默认值为train_and_eval见 main.pymode行为train只训练--train_steps默认 50000步后结束eval持续监听--model_dir下新出现的 checkpoint逐个评估达到最终训练步数后自动退出对应 main.py 中基于checkpoints_iterator的循环train_and_eval训练与评估交错进行每训练--steps_per_eval默认 2000步保存一次 checkpoint 并立即评估一次对应 train_and_eval 函数3.3 核心参数详解main.py中注册了约 30 个 flag分组说明如下。其中--image_pyramid、--multi_grid、--aspp_with_separable_conv、--decoder_use_separable_conv等网络结构参数并不在本仓库定义——从源码结构看它们由所依赖的 tensorflow/models Deeplab 库deeplab/common.py注册本仓库main.py通过from deeplab import common导入后即可在命令行直接使用get_params会将全部 flag 值收集进参数字典供模型使用。数据集设置参数默认值说明--dataset_namepascal_voc_seg分割数据集名称对应segmentation_dataset.get_dataset的注册名--train_splittrain_aug训练所用 splitREADME 命令中显式指定为train--eval_splitval评估所用 split--dataset_dir无数据集根目录必填预处理设置参数默认值说明--crop_size513,513训练裁剪尺寸[height, width]多值 flag逗号分隔--min_scale_factor0.5数据增强随机缩放的最小比例--max_scale_factor2.0数据增强随机缩放的最大比例--scale_factor_step_size0.25缩放因子的离散步长用于在区间内等距采样模型结构设置参数默认值说明--atrous_rates6,12,18ASPP空洞空间金字塔池化中各分支的空洞率--output_stride16输入与输出空间分辨率之比--fine_tune_batch_normTrue是否微调 BatchNorm 参数--upsample_logitsTrue训练期间是否对 logits 上采样后计算损失训练与评估设置参数默认值说明--learning_policypoly学习率策略可选poly或step--weight_decay0.0001L2 权重衰减系数--learning_rate0.01初始学习率--learning_rate_decay0.97step策略下的学习率衰减率--learning_power0.9poly策略的幂指数--optimizermomentum优化器可选momentum/sgd/rmsprop--momentum0.9Momentum 优化器的动量使用 Nesterov 变体--train_batch_size64训练 batch size--eval_batch_size8评估 batch size代码注释说明取 8×num_shards 以适配 TPU 内存分块--train_steps50000训练总步数--steps_per_eval2000train_and_eval模式下两次评估之间的训练步数--save_checkpoints_steps2000checkpoint 保存间隔--model_dir无Estimator 模型目录必填--init_checkpoint无用于初始化骨干网络的预训练 checkpoint--eval_timeout无eval模式下等待新 checkpoint 的最大秒数TPU 设置参数默认值说明--num_shards8TPU 分片数对应 TPU 芯片数量--use_tpuTrue使用 TPU 而非 CPU--use_bfloat16False是否使用 bfloat16 训练--iterations_per_loop2000TPU 上连续执行的步数之后将指标回传 CPU越大 TPU 利用率越高--use_host_callTrue是否通过 host_call 在每个训练步生成摘要loss、学习率等供 TensorBoard 使用--tpu无Cloud TPU 名称或grpc://ip:8470地址--gcp_project无TPU 所在项目名缺省时自动从 GCE metadata 探测--tpu_zone无TPU 所在 GCE zone缺省时自动探测四、源码级原理剖析4.1 数据管线InputReader 与预处理data_pipeline.InputReader负责把 TFRecord 数据集转成 TPU 可消费的 batch其构造参数包括dataset、split_name、is_training与model_variant后者用于选择对应的图像均值减除方式见 data_pipeline.py。关键实现细节数据读取使用slim.dataset_data_provider.DatasetDataProvider训练时开启shuffle且num_epochsNone无限循环评估时关闭 shuffle 且只跑一个 epochdata_pipeline.py标签必须是[height, width]或[height, width, 1]形状否则抛ValueError随后统一 reshape 为[None, None, 1]data_pipeline.py预处理复用外部 Deeplab 库的input_preprocess.preprocess_image_and_label完成随机裁剪crop_size、随机缩放min/max_scale_factor与步长、均值减除等增强操作data_pipeline.py批量化使用tf.train.batch训练时 64 个线程评估时降为 1 个线程并额外保存original_image供可视化使用容量设为32 * batch_size并开启dynamic_paddata_pipeline.py。4.2 网络构建多尺度 logits 与 bfloat16model.py中的_build_network调用外部 Deeplab 库的multi_scale_logits构建网络支持按image_pyramid指定的多个尺度分别前向最终在merged_logitsscope 下融合多尺度结果对应 model.py 与常量_MERGED_LOGITS_SCOPE。当启用--use_bfloat16时整个网络在bfloat16.bfloat16_scope()内构建以利用 TPU 的 bfloat16 加速能力随后把各尺度 logits 显式tf.cast回tf.float32保证数值稳定性model.py。README 训练命令中--image_pyramid1.表示仅使用原始尺度一个尺度。model_variant不仅决定骨干网络如resnet_v1_101_beta还用于 checkpoint 恢复时的变量作用域映射model_fn在提供init_checkpoint且处于训练模式时通过feature_extractor.name_scope[model_variant]构造变量前缀用tf.train.init_from_checkpoint完成骨干部分权重加载model.py。4.3 损失函数多尺度交叉熵 L2 正则loss_fn的核心逻辑model.py对每个输出尺度调用add_softmax_cross_entropy_loss_for_each_scale计算 softmax 交叉熵损失ignore_label区域不参与损失计算upsample_logits控制是否先上采样 logits 再与标签对齐所有尺度损失求和得到losses手工收集所有名称含weights且不含BatchNorm的可训练变量计算 L2 损失——BatchNorm 的缩放/偏移参数不做权重衰减最终loss losses weight_decay * l2_loss。4.4 优化器与学习率策略优化器由_get_optimizer按--optimizer选择model.pymomentumMomentumOptimizermomentum0.9且use_nesterovTrueREADME 默认命令使用此配置sgd普通梯度下降rmspropRMSPropepsilon与momentum由外部 Deeplab 库参数提供。学习率由_get_learning_rate按--learning_policy选择model.pypolytf.train.polynomial_decay从learning_rate多项式衰减到 0幂指数learning_power0.9steptf.train.exponential_decay每过num_batches_per_epoch一个 epoch 的 batch 数按learning_rate_decay0.97阶梯式衰减。在 TPU 模式下优化器会包一层contrib_tpu.CrossShardOptimizer实现跨分片跨芯片梯度同步model.py同时把 BatchNorm 的UPDATE_OPS作为train_op的依赖加入确保 moving mean/variance 正确更新model.py。4.5 评估指标MIOU 的正确计算方式_create_eval_metric展示了语义分割标准指标 MIOUmean Intersection over Union在 TPU 上的实现细节model.py将融合后的 logits 用tf.image.resize_bilinear双线性上采样回crop_size保证与标签分辨率一致tf.argmax得到逐像素预测类别reshape 成一维关键技巧tf.metrics.mean_iou要求标签取值范围是[0, num_classes)因此先把ignore_label区域置 0再通过weights掩码把这些区域排除在统计之外model.py从而保证 ignore 区域既不影响分母也不影响分子。4.6 训练摘要与 checkpoint 协调train_and_eval函数实现“训练一段、评估一次”的循环每轮训练steps_per_eval步后保存 checkpoint随即用eval_dataset.num_samples // eval_batch_size步完成整轮评估main.py。训练摘要通过host_call机制在 CPU host 侧生成loss、learning_rate、current_epoch三个标量写入model_dir供 TensorBoard 查看model.py。eval模式则用checkpoints_iterator持续监听新 checkpoint并对 TPU worker 初始化慢于 CPU 任务导致的 checkpoint 已删除情况做了容错捕获NotFoundError后跳过继续监听见 main.py。五、注意事项与常见问题use_host_call必须为 True源码注释明确指出main.py该 flag 用于每步生成训练摘要若置为 False且 host_call 较慢跟不上 TPU 计算时可能出现性能下降。num_shards与 TPU 规格匹配命令中--num_shards8对应 8 核 TPU如 v2-8/v3-8eval_batch_size默认取8 × num_shards以充分利用 TPU 内存分块。batch_size缩放换用更大的 TPU如 32/128 核时train_batch_size、eval_batch_size需按分片数等比放大同时可考虑适当调整learning_rate。iterations_per_loop越大越好TPU 上连续执行的步数越多、与 CPU 的同步越少利用率越高但会受train_steps上限约束。评估等待超时eval模式建议设置--eval_timeout避免训练停滞时评估任务无限等待。image_pyramid、multi_grid等结构参数由 tensorflow/models Deeplab 库提供README 中--image_pyramid1.单尺度、--multi_grid1,2,4多网格空洞卷积、--aspp_with_separable_convfalse与--decoder_use_separable_convfalse禁用可分离卷积换取精度是经过验证的标准配置组合。六、总结本指南完整覆盖了 Cloud TPU 上 DeepLab V3 语义分割的端到端流程环境与依赖准备、VOC 2012 数据与预训练权重获取、训练/评估命令与全部参数语义以及从数据管线、多尺度网络、损失与优化器到 MIOU 指标计算和 TPU 训练协调的源码级原理。仓库中的 README.md、main.py、model.py 与 data_pipeline.py 是可直接复用的完整参考实现按文中命令配置即可在约 9 小时内复现接近 0.74 MIOUtrainsplit或接近 0.77 MIOUtrain_augsplit的 VOC 2012 分割模型。赞分享深度学习后端开发工具【免费下载链接】tpuReference models and tools for Cloud TPUs.项目地址https://gitcode.com/gh_mirrors/tpu/tpu点击查看免费下载相关推荐使用 TensorFlow DeepLab 在 PASCAL VOC 2012 上完成语义分割全流程实战数据转换、训练、评估、可视化使用 TensorFlow DeepLab 在 PASCAL VOC 2012 上完成语义分割全流程实战数据转换、训练、评估、可视化 本指南以仓库内 pas人工智能深度学习计算机视觉NLP语音CoreNet 实战用 RangeAugment 可学习数据增强训练 DeepLabv3 语义分割模型ADE20k 与 PASCAL VOCCoreNet 实战用 RangeAugment 可学习数据增强训练 DeepLabv3 语义分割模型ADE20k 与 PASCAL VOC 本文是 Co深度学习计算机视觉NLP多模态模型训练大模型基于 PyTorch 的 DeepLabV3 语义分割实战从 PASCAL VOC 数据准备到单/多 GPU 训练、验证与预测基于 PyTorch 的 DeepLabV3 语义分割实战从 PASCAL VOC 数据准备到单/多 GPU 训练、验证与预测 导读 本文以 pytorch_示例工程上一篇Terraform AWS Provider 数据源详解aws_prometheus_workspace 读取 Amazon Managed Prometheus 工作区下一篇Balena Etcher终极指南如何三步制作完美系统启动盘创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考