TensorFlow Model Garden research 目录深度解析:研究模型目录的全景导航与核心模块源码导读
【免费下载链接】modelsModels and examples built with TensorFlow项目地址: https://gitcode.com/GitHub_Trending/mode/models
本篇技术指南以 research/README.md 为主骨架,系统梳理 TensorFlow Model Garden 中 research 目录的定位、两大分类(建模库与研究模型实现)、覆盖计算机视觉/NLP/音频/强化学习等方向的 18 个研究模型清单,并结合各子目录的 README 与源码,带你深入 object_detection、slim、autoaugment、deeplab、deep_speech、audioset 等核心模块的架构演进、训练命令与版本维护现状,帮助你在复用这些论文级实现时做出准确的技术选型。
1. research 目录在 Model Garden 中的定位
TensorFlow Model Garden 的根目录 README.md 将整个仓库划分为四大板块:
| 目录 | 定位(摘自根 README) |
|---|---|
| official | 使用最新 TensorFlow 2 高层 API 的 SOTA 模型示例,由 TensorFlow 官方维护并随 TF2 API 更新 |
| research | 研究人员用 TensorFlow 1 或 2 实现的研究模型集合,由各研究者自行维护 |
| community | 基于 TensorFlow 2 的社区模型仓库精选列表 |
| orbit | 用于编写自定义 TF2 训练循环的轻量库,无缝集成tf.distribute,支持 CPU/GPU/TPU |
research/README.md 开篇即说明了该目录的边界与治理方式:
- 该目录收录的是已发表研究论文的代码实现与预训练模型;
- 各研究模型由其各自作者(maintainer)独立维护,而非由 Model Garden 团队统一维护——这意味着各子模块的版本要求(TF1/TF2)、维护活跃度差异很大,复用前务必查看对应子目录 README 中的版本徽章与弃用声明。
从目录结构看,research 下共包含 20 个子模块:两个建模库(object_detection、slim)和 18 个研究模型实现,另有少量未列入 README 索引的历史目录(如cognitive_planning、seq_flow_lite、video 相关实验等),从仓库结构看它们属于早期实验代码。
2. 目录两大分类:建模库 vs 研究模型实现
research/README.md 将全部条目分为两层,这一划分方式决定了各模块的工程成熟度:
2.1 Modeling Libraries and Models(建模库)
| 目录 | 名称 | 说明 | 维护者 |
|---|---|---|---|
| research/object_detection | TensorFlow Object Detection API | 构建、训练、部署目标检测模型的框架;附带在 COCO、Kitti、Open Images、AVA v2.1、iNaturalist 等数据集上预训练的检测模型集合 | jch1, tombstone, pkulzc |
| research/slim | TensorFlow-Slim 图像分类模型库 | 定义、训练、评估图像分类模型的轻量级高层 API,覆盖 Inception V1–V4、Inception-ResNet-v2、ResNet V1/V2、VGG 16/19、MobileNet V1/V2/V3、NASNet-A_Mobile/Large、PNASNet-5_Large/Mobile 等骨干网络 | sguada, marksandler2 |
2.2 Models and Implementations(按领域分类的研究模型)
计算机视觉(Computer Vision)
| 目录 | 对应论文 | 发表会议 | 维护者 |
|---|---|---|---|
| attention_ocr | Attention-based Extraction of Structured Information from Street View Imagery | ICDAR 2017 | xavigibert |
| autoaugment | AutoAugment;Wide Residual Networks;Shake-Shake regularization;ShakeDrop | CVPR 2019 / BMVC 2016 / ICLR 2017 / ICLR 2018 | barretzoph |
| deeplab | DeepLabv1–v3 系列;DeepLabv3+ (Encoder-Decoder with Atrous Separable Convolution) | ICLR 2015 / TPAMI 2017 / ECCV 2018 | aquariusjay, yknzhu |
| delf | DELF(注意力深度局部特征);Detect-to-Retrieve;DELG(统一局部与全局特征);GLDv2 基准数据集 | ICCV 2017 / CVPR 2019 / CVPR 2020 | andrefaraujo |
| lstm_object_detection | Mobile Video Object Detection with Temporally-Aware Feature Maps | CVPR 2018 | yinxiaoli, yongzhe2160, lzyuan |
| marco | MARCO:使用深度卷积网络分类结晶实验结果 | — | vincentvanhoucke |
| vid2depth | Unsupervised Learning of Depth and Ego-Motion from Monocular Video Using 3D Geometric Constraints | CVPR 2018 | rezama |
自然语言处理(NLP)
| 目录 | 对应论文 | 会议 | 维护者 |
|---|---|---|---|
| adversarial_text | Adversarial Training Methods for Semi-Supervised Text Classification;Semi-supervised Sequence Learning | ICLR 2017 / NIPS 2015 | rsepassi, a-dai |
| cvt_text | Semi-Supervised Sequence Modeling with Cross-View Training | EMNLP 2018 | clarkkev, lmthang |
音频与语音(Audio and Speech)
| 目录 | 对应论文/数据集 | 会议 | 维护者 |
|---|---|---|---|
| audioset | AudioSet(200 万条 10 秒人类标注 YouTube 音轨,600+ 类别本体);CNN Architectures for Large-Scale Audio Classification | ICASSP 2017 | plakal, dpwe |
| deep_speech | Deep Speech 2 | ICLR 2016 | yhliang2018 |
强化学习(Reinforcement Learning)
| 目录 | 对应论文 | 会议 | 维护者 |
|---|---|---|---|
| efficient-hrl | Data-Efficient Hierarchical Reinforcement Learning;Near-Optimal Representation Learning for HRL | NIPS 2018 / ICLR 2019 | ofirnachum |
| pcl_rl | Improving Policy Gradient by Exploring Under-appreciated Rewards;Bridging the Gap Between Value and Policy Based RL;Trust-PCL | ICLR 2017 / NIPS 2017 / ICLR 2018 | ofirnachum |
其他(Others)
| 目录 | 对应论文 | 会议 | 维护者 |
|---|---|---|---|
| lfads | LFADS: Latent Factor Analysis via Dynamical Systems | — | jazcollins, sussillo |
| rebar | REBAR: Low-variance, unbiased gradient estimates for discrete latent variable models | NIPS 2017 | gjtucker |
此外,research/README.md 明确指出:基于 TensorFlow 1 的旧模型与实现已迁移至 Archive 分支,主分支仅保留上表所列模型。这是一个重要的检索事实——如果你要找 TF1 时代的其他研究代码(如早期 seq2seq 实验),需要去 archive 分支查找,而不是在主分支里空找。
3. 核心模块深挖:从 README 到源码
下面选取 catalog 中最具代表性的六个模块,结合其子目录 README 与源码文件,展开实现层面的说明。
3.1 object_detection:Object Detection API
research/object_detection/README.md 说明该框架"构建、训练、部署目标检测模型",并同时支持 TF1 与 TF2(多数模块双兼容,不兼容时提供双版本)。TF2 版本的核心特性包括:
- 面向 eager 模式设计的 train/eval/export 新二进制;
- 一套 TF2 兼容(Keras 化)模型:SSD-MobileNet、RetinaNet、Faster R-CNN、Mask R-CNN 的迁移,以及仅 TF2 维护的新架构 CenterNet(anchor-free,基于 Objects as Points 论文)与 EfficientDet(NAS 发现的 SOTA 模型家族);
- 提供 Distribution Strategies,支持同步多 GPU 与 TPU 分布式训练;
- TF1/TF2 两套 Model Zoo 的权重互不兼容,分别见 g3doc 下的 TF2 Zoo 与 TF1 Zoo。
从源码结构看,双版本入口清晰分离:TF1 走 model_main.py + model_lib.py,TF2 走 model_main_tf2.py + model_lib_v2.py;配置体系由 configs/ 下的 41 个.config原型配置与 protos/ 的 34 个 proto 定义支撑,模型定义位于 models/(99 个 Python 文件,覆盖 ssd、retinanet、faster_rcnn、mask_rcnn、centernet、efficientdet 等)。近期发布(见 README "Whats New")包括:面向 Edge TPU 的 SpaghettiNet(示例配置 ssd_spaghettinet_edgetpu_320x320_coco17_sync_4x4.config)、基于 CenterNet 的 DeepMAC 实例分割架构,以及 TF2 模型转 TFLite 的移动端推理路径。
维护状态提醒:该 README 顶部有明确的 Deprecation 声明——Object Detection API 不再跟进外部依赖(pip/apt)的新版本兼容性,后续变更仅用于内部维护;官方建议寻找活跃维护的检测/分割代码库的用户转向 official/vision(TF-Vision)或 scenic。若你的目标是长期维护的检测项目,这一信息比 API 本身更关键。
3.2 slim:TF-Slim 图像分类模型库
research/slim/README.md 是 research 目录下信息密度最高的文档之一,完整覆盖了"数据准备 → 预训练权重 → 从头训练 → 微调 → 评估 → 导出推理图"的全流程,以下要点均直接继承自该文档。
支持的数据集(含各数据集规模):
| 数据集 | 训练集 | 测试集 | 类别数 | 备注 |
|---|---|---|---|---|
| Flowers | 2500 | 2500 | 5 | 多种尺寸(Flickr) |
| Cifar10 | 60k | 10k | 10 | 32x32 彩色 |
| MNIST | 60k | 10k | 10 | 28x28 灰度 |
| ImageNet | 1.2M | 50k | 1000 | 多种尺寸 |
| VisualWakeWords | 82783 | 40504 | 2 | 多种尺寸(MS COCO) |
数据准备:download_and_convert_data.py将原始数据下载并转换为 TFRecord(每条记录是一个 TF-Example 协议缓冲),例如 Flowers:
DATA_DIR=/tmp/data/flowers python download_and_convert_data.py \ --dataset_name=flowers \ --dataset_dir="${DATA_DIR}"完成后生成 5 片 train 分片、5 片 validation 分片及labels.txt整数标签到类名的映射。脚本对应文件为 download_and_convert_data.py,数据集描述符(dataset descriptor)在 datasets/ 下,包含 flowers、cifar10、mnist、imagenet、visualwakewords 五个模块。
预训练模型表(ILSVRC-2012-CLS 上训练,单裁剪评估)摘录:
| 模型 | 代码文件 | Top-1 | Top-5 |
|---|---|---|---|
| Inception V3 | nets/inception_v3.py | 78.0 | 93.9 |
| Inception-ResNet-v2 | nets/inception_resnet_v2.py | 80.4 | 95.3 |
| ResNet V1 50 | nets/resnet_v1.py | 75.2 | 92.2 |
| ResNet V2 152 | nets/resnet_v2.py | 77.8 | 94.1 |
| VGG 16 | nets/vgg.py | 71.5 | 89.8 |
| MobileNet_v1_1.0_224 | nets/mobilenet_v1.py | 70.9 | 89.9 |
| NASNet-A_Large_331 | nets/nasnet/nasnet.py | 82.7 | 96.2 |
| PNASNet-5_Large_331 | nets/nasnet/pnasnet.py | 82.9 | 96.2 |
其中 VGG 与 ResNet V1 权重由 Caffe 格式转换而来,Inception 与 ResNet V2 权重由内部训练得到;ResNet V2 需使用--preprocessing_name inception --eval_image_size 299。
从头训练与微调(入口 train_image_classifier.py):
# 在 ImageNet 上从头训练 Inception V3 DATASET_DIR=/tmp/imagenet TRAIN_DIR=/tmp/train_logs python train_image_classifier.py \ --train_dir=${TRAIN_DIR} \ --dataset_name=imagenet \ --dataset_split_name=train \ --dataset_dir=${DATASET_DIR} \ --model_name=inception_v3微调时三个关键 flag 的语义值得注意:--checkpoint_path指定预训练检查点;--checkpoint_exclude_scopes禁止恢复 logits 层(新任务类别数不同时,如 ImageNet 的[2048x1001]与 Flowers 的[2048x5],维度不匹配无法恢复);--trainable_scopes指定只训练哪些层、其余冻结。注意--checkpoint_path与--checkpoint_exclude_scopes仅在 global step 0(模型初始化时)生效,训练中途重启会从${TRAIN_DIR}的新检查点恢复,而非原始预训练检查点。官方微调示例脚本为 scripts/finetune_inception_v3_on_flowers.sh:
python train_image_classifier.py \ --train_dir=${TRAIN_DIR} \ --dataset_dir=${DATASET_DIR} \ --dataset_name=flowers \ --dataset_split_name=train \ --model_name=inception_v3 \ --checkpoint_path=${CHECKPOINT_PATH} \ --checkpoint_exclude_scopes=InceptionV3/Logits,InceptionV3/AuxLogits \ --trainable_scopes=InceptionV3/Logits,InceptionV3/AuxLogits评估与导出:eval_image_classifier.py负责单检查点评估(见 eval_image_classifier.py);export_inference_graph.py导出 GraphDef,再配合freeze_graph得到内联常量的冻结图,最终可用 C++ 的label_image工具推理。多卡训练通过 deployment/model_deploy.py 实现同步/异步两种模式。该库还有交互式教程 slim_walkthrough.ipynb。需要强调的是,slim 是 TF1 时代的代码库,示例代码使用tensorflow.compat.v1,在新环境中运行应使用 TF1 兼容模式或 TF2 的tf.compat.v1。
3.3 autoaugment:AutoAugment 与正则化骨干网络
research/autoaugment/README.md 明确标注TensorFlow 1.x only(TF2 Not Supported),且要求使用 python2 运行。该模块复刻了 AutoAugment 论文在 CIFAR-10/100 上表 1、表 2 的结果,提供四种骨干网络的复现实现:
| CIFAR-10 模型 | 学习率 | 权重衰减 | Epoch 数 | Batch Size |
|---|---|---|---|---|
| Wide-ResNet-28-10 | 0.1 | 5e-4 | 200 | 128 |
| Shake-Shake (26 2x32d) | 0.01 | 1e-3 | 1800 | 128 |
| Shake-Shake (26 2x96d) | 0.01 | 1e-3 | 1800 | 128 |
| PyramidNet + ShakeDrop | 0.05 | 5e-5 | 1800 | 64 |
训练命令(以 WRN 为例):
python train_cifar.py --model_name=wrn \ --checkpoint_dir=/tmp/training \ --data_path=/tmp/data \ --dataset='cifar10' \ --use_cpu=0从源码结构看,各组件分工明确:train_cifar.py 为训练入口,wrn.py 实现 Wide-ResNet,policies.py 定义自动增广策略,shake_shake.py 与 shake_drop.py 分别实现两种正则化方法,augmentation_transforms.py 提供基础变换算子。
3.4 deeplab:语义分割的演进主线
research/deeplab/README.md 按代际梳理了 DeepLab v1–v3+ 的技术演进,是理解"空洞卷积如何一步步解决分割分辨率问题"的最佳文档:
- DeepLabv1:用空洞卷积显式控制 DCNN 内部特征响应的计算分辨率;
- DeepLabv2:引入空洞空间金字塔池化(ASPP),以多种采样率与有效感受野多尺度分割;
- DeepLabv3:ASPP 增加图像级特征捕获长程信息,并引入 batch normalization——特别地,以 output stride=16 训练、在评估时切到 output stride=8,兼顾 BN 训练稳定性与精度;
- DeepLabv3+:增加轻量解码器模块,重点细化物体边界;编码器-解码器结构中可用空洞卷积任意调节编码器特征分辨率,在精度与运行时之间权衡。
README 同时提示:像素级密集标注任务的统一 TF2 代码库已迁移至 deeplab2 仓库。本仓库中该模块的核心入口包括 model.py(模型定义,含 model_test.py 单测)、train.py、eval.py、vis.py、export_model.py 与 convert_to_tflite.py,核心实现位于 core/,数据集脚本在 datasets/,本地测试脚本(如 local_test_mobilenetv2.sh)可直接参考。
3.5 deep_speech:端到端语音识别(已停止维护)
research/deep_speech/README.md 标注No Maintenance Intended,兼容 TensorFlow 1.15.3 与 2.3。DeepSpeech2 是端到端 ASR 模型,结构为 2 层卷积 + 5 层双向 RNN + 1 层全连接,输入为线性谱特征,损失函数采用 CTC。数据流水线:
# 1. 设置 PYTHONPATH 后安装依赖 pip3 install -r requirements.txt # 2. 下载并预处理 LibriSpeech(train-clean-100 + 360,约 130k 条;验证集 dev-clean 2.7k 行) python data/download.py # 默认 --data_dir=/tmp/librispeech_data # 3. 训练与评估 python deep_speech.py从源码结构看,data/download.py 将数据预处理为 wav_filename、wav_filesize、transcript 三列 CSV;data/dataset.py 解析 CSV 构建tf.data.Dataset,除首 epoch 外每个 epoch 内按 batch 级洗牌(启用 sortagrad 时);模型定义在 deep_speech_model.py,解码逻辑在 decoder.py,另有 run_deep_speech.sh 一键脚本。由于该模块已声明不再维护,新项目建议仅将其作为架构参考,而非生产基座。
3.6 audioset:大规模音频事件分类
research/audioset/README.md 说明该仓库服务于 AudioSet 数据集(200 万+ 条 10 秒 YouTube 音轨,600+ 音频事件类别本体),并附 ICASSP 2017 的两篇论文(AudioSet 数据集本身与大规模音频分类 CNN 架构)。从目录结构看,该模块下包含两套子实现:vggish/(VGGish 模型,11 个文件)与 yamnet/(YAMNet 模型,含 yamnet.ipynb 演示 notebook 与 csv 数据)。该模块同样标注 TF1.x only。
3.7 其他模块速览
- adversarial_text(README,TF >= 1.3):半监督文本分类的对抗训练完整流水线,文档给出了 IMDB 情感分类的四步端到端命令——下载原始数据、
gen_vocab.py生成词表、gen_data.py生成 TFRecords、pretrain.py预训练语言模型(关键超参:vocab_size=87007、embedding_dims=256、rnn_cell_size=1024、max_steps=100000等)、最后train_classifier.py训练分类器并通过pretrained_model_dir加载预训练 embedding 与 LSTM 变量。对应源码含 pretrain.py、train_classifier.py、adversarial_losses.py、graphs.py(附 graphs_test.py 单测)。 - cvt_text(README,基于 TF 1.10.1 + Numpy 1.14.5):跨视角训练(Cross-View Training)半监督序列建模,支持序列标注与依存句法分析。数据经 fetch_data.sh 下载 GloVe 向量、1B 无标注语料与 CoNLL-2000 chunking 数据集,再运行 preprocessing.py;训练命令
python cvt.py --mode=train --model_name=chunking_model,每 1000 步自动 checkpoint,支持断点续训;文档给出的参考指标:chunking 数据训练 200k 步后 dev 集至少 97.1 F1、test 集 96.6 F1。 - delf(setup.py、DETECTION.md、EXTRACTION_MATCHING.md、INSTALL_INSTRUCTIONS.md):DELf/DELg 大规模图像检索,配套 GLDv2 地标数据集基准,子实现位于 delf/delf/。
- lstm_object_detection:基于时序感知特征图的移动视频目标检测,含独立 tflite 导出链路(export_tflite_lstd_graph.py)。
- reinforcement learning 模块:efficient-hrl 提供 train.py、eval.py 入口与 configs/ 下的 3 个 gin 配置;pcl_rl 覆盖 PCL/Trust-PCL 策略梯度方法,含 trainer.py、policy.py、replay_buffer.py 等 14 个组件文件。
4. 版本兼容性与维护状态:复用前必查
综合各子目录 README 的徽章与声明,research 目录内模块的 TF 版本要求呈明显分裂:
| 模块 | TensorFlow 要求 | 维护状态 |
|---|---|---|
| object_detection | TF 2.2 / TF 1.15 双支持 | 不再跟进外部依赖新版本,推荐转向 official/vision |
| slim | TF1 代码库(tf.compat.v1风格) | 由原维护者维护 |
| autoaugment | TF 1.x only,需 python2 | TF2 不支持 |
| adversarial_text | TF >= 1.3 | TF2 不支持 |
| deep_speech | TF 1.15.3 / 2.3 | 明确声明 No Maintenance Intended |
| audioset | TF 1.x only | TF2 不支持 |
这一事实对技术选型有直接含义:research 目录是论文复现与架构研究的价值仓库,而非长期生产基座。根 README.md 对 official 与 research 的分工表述(official 由 TensorFlow 官方维护并跟进 TF2 最新 API,research 由研究者自行维护)正是这一边界的官方定义。
5. 贡献与协作约定
research/README.md 的 Contributions 章节与根 README 一致:贡献前需阅读 Model Garden 的贡献指南(Wiki 的 How-to-contribute 页面)。结合各子目录的实践可以看到 research 目录的协作模式:每个模块以README.md(含版本徽章、论文引用、运行命令)+ 训练/评估入口脚本 +_test.py单测文件 + 可选requirements.txt的标准化结构组织,例如 deep_speech/requirements.txt 独立声明依赖、delf/INSTALL_INSTRUCTIONS.md 单独给出安装说明,模块间互不耦合。
6. 小结
- research/README.md 本质是一份研究模型目录索引:两层分类(object_detection、slim 两个建模库 + 按 CV/NLP/音频/RL/其他划分的 16 个论文复现模块)、18 个条目均附论文出处与发表会议、维护者清单,并指向 Archive 分支存放 TF1 旧模型。
- 复用价值最高的模块是slim(完整的数据-训练-微调-评估-导出链路文档)与object_detection(TF1/TF2 双栈检测框架),但前者属于 TF1 代码库、后者已声明停止跟进新依赖,选型时须对照第 4 节的版本表。
- 每个子目录的 README 才是该模块的"事实源":autoaugment 的超参表、adversarial_text 的四步命令、deep_speech 的数据流水线都只在其子 README 中给出细节,主 README 仅提供目录与归属信息。建议在深入任何模块前,先读其子目录 README 的徽章(TensorFlow 版本 / No Maintenance Intended),再核对其训练入口源码与单测文件,即可获得与文档一致的、可验证的实现细节。
【免费下载链接】modelsModels and examples built with TensorFlow项目地址: https://gitcode.com/GitHub_Trending/mode/models
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考