1. Architecture Overview
TensorFlow Models is Google's official repository of machine learning model implementations for TensorFlow 2.x. The codebase is organized into three main pillars: official (production-quality, Google-maintained models), research (paper implementations, community-maintained), and orbit (a standalone training loop library). Together, they form a layered framework where official/core provides the configuration, registry, and training infrastructure; domain-specific libraries (official/vision, official/nlp, official/recommendation) provide task implementations and model architectures; and Orbit manages the outer training loop with distribution strategy support.
The pip-installable package tf-models-official (v2.20.0) bundles the official/ and orbit/ directories. Research models are used from source only. All models are built on tf_keras (the standalone Keras fork) and TensorFlow 2.x, with native support for tf.distribute strategies including MirroredStrategy, TPUStrategy, MultiWorkerMirroredStrategy, and ParameterServerStrategy.
Architecture Diagram
┌─────────────────────────────────────────────────────────────────────┐
│ tensorflow_models (pip API) │
│ tfm.vision │ tfm.nlp │ tfm.uplift │ tfm.core/optimization │
├───────────────┴───────────┴──────────────┴─────────────────────────┤
│ official/ (core library) │
│ ┌──────────┐ ┌──────────┐ ┌───────────────┐ ┌──────────────┐ │
│ │ core/ │ │ modeling/ │ │ common/ │ │ utils/flags │ │
│ │ registry │ │ hyperpar │ │ distribute_ │ │ _base.py │ │
│ │ task_fac │ │ optimiz. │ │ utils.py │ │ _perf.py │ │
│ │ train_lib│ │ grad_util│ │ dataset_fn.py │ │ │ │
│ └────┬─────┘ └────┬─────┘ └───────┬───────┘ └──────────────┘ │
│ │ │ │ │
│ ┌────▼──────────────▼────────────────▼──────────────────────────┐ │
│ │ Domain Libraries │ │
│ │ vision/ nlp/ recommendation/ projects/ │ │
│ │ (ResNet, (BERT, (ranking, uplift) (YOLO, │ │
│ │ RetinaNet, ALBERT, CenterNet, │ │
│ │ MaskRCNN, Longformer) DeepLab, │ │
│ │ DeepLab) SimCLR...) │ │
│ └──────────────────────────────────────────────────────────────┘ │
├───────────────────────────────────────────────────────────────────┤
│ orbit/ │ research/ │
│ Controller (train/eval loops) │ object_detection/ │
│ StandardTrainer/StandardEvaluator │ deeplab/ slim/ delf/ │
│ Actions (EMA, Export, Pruning) │ audioset/ adversarial_text│
│ SummaryManager, CheckpointManager │ (standalone, from source) │
└──────────────────────────────────────┴───────────────────────────┘
│
┌────────▼────────┐
│ tf.distribute │
│ Strategy Layer │
│ (GPU/TPU/Multi)│
└─────────────────┘
Component Inventory
| Component | Path | Role |
|---|---|---|
official/core |
official/core/ |
Registry, experiment factory, task base classes, training orchestration |
official/modeling |
official/modeling/ |
Shared modeling utilities: hyperparameters, optimization, gradient tools |
official/common |
official/common/ |
Distribution strategy helpers, dataset utilities, common flags |
official/vision |
official/vision/ |
Vision models: classification, detection, segmentation, video |
official/nlp |
official/nlp/ |
NLP models: BERT, encoders, fine-tuning pipelines |
official/recommendation |
official/recommendation/ |
Recommendation models, uplift modeling |
official/legacy |
official/legacy/ |
Deprecated models kept for benchmarking (BERT, detection, image classification) |
official/projects |
official/projects/ |
Domain-specific projects (40+ sub-projects) |
orbit |
orbit/ |
Training loop library: Controller, runners, actions, utilities |
tensorflow_models |
tensorflow_models/ |
Public pip package entry point (import tensorflow_models as tfm) |
research/object_detection |
research/object_detection/ |
TF Object Detection API (SSD, Faster R-CNN, etc.) |
research/deeplab |
research/deeplab/ |
DeepLab semantic segmentation |
research/slim |
research/slim/ |
TF-Slim model library |
research/delf |
research/delf/ |
DEep Local Features for image retrieval |
research/audioset |
research/audioset/ |
VGGish and YAMNet audio classifiers |
Technology Stack
| Layer | Technology |
|---|---|
| Runtime | Python 3.7+, TensorFlow 2.20.0 |
| ML Framework | tf_keras 2.16+ (standalone Keras) |
| Distribution | tf.distribute (Mirrored, TPU, MultiWorker, ParameterServer) |
| Configuration | YAML (ExperimentConfig dataclasses), Gin-config, absl-py flags |
| Data Pipeline | tf.data, TFRecord, TFDS |
| Serialization | Protocol Buffers (object detection protos), SavedModel |
| Package | tf-models-official on PyPI, setuptools |
| CV Dependencies | opencv-python-headless, Pillow, pycocotools, Cython |
| NLP Dependencies | sentencepiece, seqeval, sacrebleu, tensorflow-text |
| Optimization | tensorflow-model-optimization (pruning, quantization) |
| Serving | TFLite (ai-edge-litert), SavedModel, FastAPI (waste_identification_ml) |
Note
The codebase uses
import tensorflow as tf, tf_kerasthroughout — this dual import pattern ensures compatibility with TensorFlow 2.16+ where Keras was separated intotf_keras. All Keras API calls usetf_kerasrather thantf.keras.
2. System Requirements
| Requirement | Development | Production (GPU) | Production (TPU) |
|---|---|---|---|
| Python | 3.7+ | 3.10+ | 3.10+ |
| TensorFlow | 2.20.0 | 2.20.0 | tf-nightly or 2.20.0 |
| CPU | Any x86_64 | 8+ cores | N/A (Cloud VM) |
| RAM | 8 GB | 32 GB+ | 16 GB+ (VM) |
| GPU | Optional | NVIDIA A100/V100/T4 with CUDA 12.x | N/A |
| Storage | 2 GB (code + deps) | 100 GB+ (datasets) | GCS bucket |
| Network | Internet for pip | High bandwidth for data loading | GCP internal |
Software Dependencies (from official/requirements.txt)
| Package | Required Version | Purpose |
|---|---|---|
tensorflow |
~=2.20.0 | Core ML framework |
tensorflow-text |
~=2.20.0 | NLP text processing |
tf-keras |
>=2.16.0 | Keras API |
tensorflow-hub |
>=0.6.0 | Pre-trained model loading |
tensorflow-model-optimization |
>=0.4.1 | Pruning, QAT |
tensorflow-datasets |
any | Dataset loading |
gin-config |
any | Experiment configuration |
tf_slim |
>=1.1.0 | Slim model definitions |
numpy |
>=1.20 | Numerical computing |
scipy |
>=0.19.1 | Scientific computing |
pandas |
>=0.22.0 | Data processing |
Pillow |
any | Image processing |
opencv-python-headless |
any | Computer vision operations |
pycocotools |
any | COCO evaluation metrics |
pyyaml |
>=6.0.0 | YAML config parsing |
kaggle |
>=1.3.9 | Dataset downloads |
ai-edge-litert |
>=1.0.1 | TFLite runtime |
sentencepiece |
any | NLP tokenization |
seqeval |
any | Sequence labeling metrics |
sacrebleu |
any | MT evaluation metrics |
immutabledict |
any | Immutable dictionaries |
3. Configuration Reference
Configuration System Architecture
TensorFlow Models uses a hierarchical configuration system:
- Python dataclasses (
official/core/config_definitions.py) — DefineExperimentConfig,RuntimeConfig,TrainerConfig, and task-specific configs as typed, validatable Python objects - YAML files — Serialized experiment configs in
configs/experiments/directories - Gin-config — Additional binding overrides for flexible parameterization
- CLI flags — Runtime overrides via
--params_overrideand--config_file - ParamsDict — Legacy config system used by
official/legacy/models (official/modeling/hyperparams/params_dict.py)
Config Files
| File/Directory | Format | Purpose |
|---|---|---|
official/vision/configs/experiments/*.yaml |
YAML | Vision task experiment configs |
official/nlp/configs/experiments/*.yaml |
YAML | NLP task experiment configs |
official/projects/*/configs/experiments/*.yaml |
YAML | Per-project experiment configs |
official/legacy/detection/configs/base_config.py |
Python dict | Legacy detection base configuration |
official/legacy/detection/configs/*_config.py |
Python dict | Per-model detection configs |
Environment Variables
| Variable | Type | Default | Description | Required? |
|---|---|---|---|---|
TF_CONFIG |
JSON string | {} |
Multi-worker cluster specification. Read by official/common/distribute_utils.py:217 to configure multi-worker training. Must include cluster and task keys. |
Only for multi-worker |
PYTHONPATH |
Path list | — | Must include repository root for source installs | Source installs only |
CUDA_VISIBLE_DEVICES |
Comma-separated ints | all GPUs | Restrict visible GPUs | No |
CLI Flags — Common Training Flags
These flags are registered by official/utils/flags/_base.py and available in most training scripts:
| Flag | Short | Type | Default | Description |
|---|---|---|---|---|
--data_dir |
-dd |
str |
/tmp |
Location of input data |
--model_dir |
-md |
str |
/tmp |
Location for model checkpoints |
--clean |
— | bool |
False |
Remove model_dir before training |
--train_epochs |
-te |
int |
1 |
Number of training epochs |
--epochs_between_evals |
-ebe |
int |
1 |
Epochs between evaluations |
--stop_threshold |
-st |
float |
None |
Stop training when metric exceeds this |
--batch_size |
-bs |
int |
32 |
Global batch size (split across devices) |
--num_gpus |
-ng |
int |
1 |
GPUs per worker |
--distribution_strategy |
-ds |
str |
mirrored |
Distribution strategy (off, one_device, mirrored, parameter_server, multi_worker_mirrored, tpu) |
--run_eagerly |
— | bool |
False |
Run ops eagerly (for debugging) |
--hooks |
-hk |
list |
LoggingTensorHook |
Training hooks |
--export_dir |
-ed |
str |
None |
Export SavedModel after training |
--log_steps |
— | int |
— | Log metrics every N steps |
CLI Flags — Vision Training (official/vision/train.py)
| Flag | Type | Default | Description |
|---|---|---|---|
--experiment |
str |
(required) | Registered experiment name |
--config_file |
str |
— | YAML config path |
--params_override |
str |
— | Comma-separated key=value overrides |
--mode |
str |
train |
train, eval, train_and_eval, continuous_eval |
--enable_async_checkpointing |
bool |
True |
Enable async checkpoint saving |
CLI Flags — Legacy Detection (official/legacy/detection/main.py)
| Flag | Type | Default | Description |
|---|---|---|---|
--mode |
str |
train |
train, eval, or eval_once |
--model |
str |
retinanet |
retinanet, mask_rcnn, olnmask, shapemask |
--enable_xla |
bool |
False |
Enable XLA compilation for GPU |
--training_file_pattern |
str |
None |
Training data glob pattern |
--eval_file_pattern |
str |
None |
Evaluation data glob pattern |
--checkpoint_path |
str |
None |
Checkpoint for eval_once |
Legacy Detection Base Configuration
The base config (official/legacy/detection/configs/base_config.py) defines defaults for all detection models:
| Section | Key | Default | Description |
|---|---|---|---|
train |
batch_size |
64 |
Training batch size |
train |
total_steps |
22500 |
Total training steps |
train |
iterations_per_loop |
100 |
Steps per training loop iteration |
train.optimizer |
type |
momentum |
Optimizer type |
train.optimizer |
momentum |
0.9 |
Momentum value |
train.optimizer |
nesterov |
True |
Use Nesterov momentum |
train.learning_rate |
type |
step |
LR schedule type |
train.learning_rate |
warmup_learning_rate |
0.0067 |
Warmup LR |
train.learning_rate |
warmup_steps |
500 |
Warmup duration |
train.learning_rate |
init_learning_rate |
0.08 |
Initial learning rate |
train |
l2_weight_decay |
0.0001 |
L2 regularization |
train |
gradient_clip_norm |
0.0 |
Gradient clipping (0 = disabled) |
eval |
batch_size |
8 |
Eval batch size |
eval |
eval_samples |
5000 |
Number of eval samples |
eval |
min_eval_interval |
180 |
Minimum seconds between evals |
architecture |
backbone |
resnet |
Backbone network (resnet, spinenet) |
architecture |
min_level |
3 |
Minimum FPN level |
architecture |
max_level |
7 |
Maximum FPN level |
architecture |
multilevel_features |
fpn |
Feature extraction (fpn, identity) |
architecture |
use_bfloat16 |
True |
Use bfloat16 mixed precision |
architecture |
num_classes |
91 |
Number of classes (including background) |
resnet |
resnet_depth |
50 |
ResNet depth |
fpn |
fpn_feat_dims |
256 |
FPN feature dimensions |
postprocess |
nms_iou_threshold |
0.5 |
NMS IoU threshold |
postprocess |
score_threshold |
0.05 |
Detection score threshold |
postprocess |
max_total_size |
100 |
Max detections per image |
Important
The frozen variable prefix
RESNET_FROZEN_VAR_PREFIXfreezes conv1 and conv2_x layers during fine-tuning. This speeds up training and slightly improves accuracy. Settrain.frozen_variable_prefixto this regex when loading from pre-trained ResNet checkpoints.
Distribution Strategy Configuration
# From official/common/distribute_utils.py
distribution_strategy = distribute_utils.get_distribution_strategy(
distribution_strategy='mirrored', # Strategy type
all_reduce_alg='nccl', # All-reduce algorithm
num_gpus=4, # GPUs per worker
tpu_address='grpc://10.0.0.1:8470' # TPU address (for TPU strategy)
)
| Strategy | all_reduce_alg options |
Use case |
|---|---|---|
mirrored |
nccl, hierarchical_copy |
Single host, multiple GPUs |
multi_worker_mirrored |
ring, nccl |
Multiple hosts with GPUs |
tpu |
N/A | Google Cloud TPU |
one_device |
N/A | Single GPU/CPU (debugging) |
parameter_server |
N/A | Async training with parameter servers |
Warning
When specifying
num_gpus > 0withdistribution_strategy=off, aValueErroris raised. To use GPUs without a distribution strategy, setnum_gpus=0and manage device placement manually.
4. Deployment & Scaling
pip Package Distribution
The official/pip_package/setup.py builds two packages:
| Package | Version Pattern | TF Dependency |
|---|---|---|
tf-models-official |
2.20.0 |
tensorflow~=2.20.0 |
tf-models-nightly |
2.21.0.dev{YYYYMMDD} |
tf-nightly |
The nightly version bumps the minor version and appends a date suffix.
Building from Source
cd official/pip_package
python setup.py sdist bdist_wheel
pip install dist/tf_models_official-2.20.0-py3-none-any.whl
The package includes all official/ code except research/, official.pip_package, official.benchmark, official.colab, and official.recommendation.ranking.data.preprocessing. Test files (*_test.py) are excluded from distribution.
Multi-Worker Distributed Training
# Worker 0
export TF_CONFIG='{"cluster":{"worker":["host1:12345","host2:12345"]},"task":{"type":"worker","index":0}}'
python official/vision/train.py --experiment=resnet_imagenet --config_file=config.yaml
# Worker 1
export TF_CONFIG='{"cluster":{"worker":["host1:12345","host2:12345"]},"task":{"type":"worker","index":1}}'
python official/vision/train.py --experiment=resnet_imagenet --config_file=config.yaml
The configure_cluster() function in distribute_utils.py reads TF_CONFIG, extracts worker_hosts and task_index, and configures the appropriate strategy. When the number of workers is >= 2, multi-host mode activates and batch sizes are automatically divided across replicas.
TPU Training
python official/vision/train.py \
--experiment=resnet_imagenet \
--mode=train_and_eval \
--model_dir=gs://bucket/model_dir \
--config_file=config.yaml \
--params_override="runtime.distribution_strategy=tpu,runtime.tpu=grpc://${TPU_IP}:8470"
When strategy_type == 'tpu', the system automatically:
- Enables
use_bfloat16for mixed precision - Enables
use_sync_bnfor synchronized batch normalization - Adjusts batch partitioning for TPU cores
Docker Deployment — Waste Identification API
The waste identification project provides a FastAPI-based prediction server:
# From official/projects/waste_identification_ml/docker_solution/prediction_api/
FROM tensorflow/tensorflow:latest
COPY . /app
WORKDIR /app
RUN pip install fastapi uvicorn Pillow
EXPOSE 5000
CMD ["python", "app.py"]
The server loads Mask R-CNN models at startup (model_manager.load_all_models()), accepts image uploads via POST /predict, resizes to 512×1024, and returns JSON detection results. Runs on Uvicorn (ASGI) at port 5000.
Note
The prediction API uses
app_utils.ModelManagerfor model lifecycle management andapp_utils.NumpyEncoderfor JSON serialization of NumPy arrays in detection results.
Model Export
# Export SavedModel after training
python official/vision/train.py \
--experiment=resnet_imagenet \
--mode=eval \
--model_dir=/tmp/trained_model \
--export_dir=/tmp/saved_model
For TFLite conversion, use ai-edge-litert:
import ai_edge_litert as tfl
converter = tfl.TFLiteConverter.from_saved_model('/tmp/saved_model')
tflite_model = converter.convert()
5. Operations
Training Lifecycle
- Config loading — YAML →
ExperimentConfigdataclass, with Gin and flag overrides - Strategy setup —
distribute_utils.get_distribution_strategy()creates the distribution context - Task creation —
task_factory.get_task()instantiates the task from the experiment registry - Training loop — Orbit
Controllermanages train/eval interleaving, checkpointing, and summaries - Checkpointing —
tf.train.CheckpointManagerwith configurablemax_to_keep - Evaluation — Periodic evaluation at
validation_intervalsteps - Export — Optional SavedModel/TFLite export at completion
Monitoring with TensorBoard
tensorboard --logdir=/path/to/model_dir
The Orbit Controller writes training and evaluation summaries at summary_interval steps. Custom summary managers (e.g., ImageScalarSummaryManager in official/vision/utils/summary_manager.py) extend the default behavior.
Checkpoint Management
checkpoint_manager = tf.train.CheckpointManager(
checkpoint,
directory=model_dir,
max_to_keep=5,
checkpoint_name='ckpt')
Orbit's Controller supports:
- Synchronous checkpointing (default)
- Async checkpointing (
enable_async_checkpointing=Truein vision train.py) - EMA checkpointing via
EMACheckpointingaction (saves exponential moving average weights underema_checkpoints/)
Preemption Recovery
The vision training driver (official/vision/train.py) includes a preemption recovery loop that automatically reconnects when Cloud TPU preemption occurs:
def _run_experiment_with_preemption_recovery(params, model_dir):
keep_training = True
while keep_training:
try:
# Setup strategy and run training
...
except (tf.errors.UnavailableError, ...):
# Reconnect and resume from last checkpoint
continue
Tip
For long-running TPU training jobs, set
checkpoint_intervalto a reasonable frequency (every 1000–5000 steps). The preemption recovery loop restarts from the last saved checkpoint.
Continuous Evaluation
controller = orbit.Controller(
global_step=global_step,
evaluator=evaluator,
checkpoint_manager=checkpoint_manager)
# Monitor a directory for new checkpoints and evaluate each
controller.evaluate_continuously(
timeout=3600, # Max wait time for new checkpoints
timeout_fn=timeout_fn # Custom timeout logic
)
Note
evaluate_continuouslyis designed for asynchronous training/evaluation pipelines. Point it at themodel_dirof a running training job and it will automatically evaluate each new checkpoint.
6. Performance
Mixed Precision Training
Mixed precision is automatically enabled for TPU (use_bfloat16=True). For GPU:
runtime:
mixed_precision_dtype: 'float16'
Or in the legacy detection config:
'architecture': {
'use_bfloat16': True, # bfloat16 for TPU
}
Tip
Set
steps_per_loop=1000for TPU training. Running steps inside atf.functiondramatically increases TPU utilization compared to per-step Python overhead.
XLA Compilation
python official/legacy/detection/main.py --enable_xla=True ...
XLA (Accelerated Linear Algebra) compiles TF graphs for optimized execution. Benefits vary by model; object detection models with dynamic shapes may see limited gains.
Gradient Optimization
The official/modeling/grad_utils.py module provides:
_filter_grads— RemovesNonegradients (for frozen layers) and raisesValueErrorif no gradients remain_filter_and_allreduce_gradients— Performs distributed all-reduce in configurable precision (float32orfloat16) with optional packing (bytes_per_pack)
from official.modeling.grad_utils import _filter_and_allreduce_gradients
allreduced_grads, variables = _filter_and_allreduce_gradients(
grads_and_vars,
allreduce_precision="float16", # Reduce communication overhead
bytes_per_pack=128 * 1024 * 1024 # 128 MB packs
)
Frozen Variable Optimization
For transfer learning, freeze early layers to reduce computation:
# Legacy detection: freeze ResNet conv1 + conv2_x
RESNET_FROZEN_VAR_PREFIX = r'(resnet\d+)\/(conv2d(|_([1-9]|10))|batch_normalization(|_([1-9]|10)))\/'
Set train.frozen_variable_prefix to this regex in the detection config.
7. Security
Input Validation
- Image uploads (waste identification API): Validates image format with PIL, returns HTTP 400 for corrupt images and HTTP 422 for wrong format
- Config validation:
ParamsDictenforces type constraints and restrictions;params.validate()checks inter-parameter consistency beforeparams.lock()makes config immutable - File type validation:
pick_dataset_fn()only acceptstfrecordandtfrecord_compressed; raisesValueErrorfor unknown types
Distribution Strategy Safety
- GPU count validation: negative
num_gpusraisesValueError - Strategy/GPU mismatch:
offstrategy withnum_gpus > 0raisesValueError one_devicewith multiple GPUs raisesValueError- Multi-worker without
task_indexraisesValueError
Checkpoint Security
- Checkpoints contain model weights as TensorFlow variables; no executable code in standard
tf.train.Checkpointformat - SavedModel format includes serialized graph — load only from trusted sources
Caution
Pre-trained models and checkpoints should only be loaded from trusted sources (official Google Cloud Storage buckets, TF Hub). A malicious SavedModel can execute arbitrary TensorFlow ops during loading. Verify checkpoint provenance before use in production.
Network Exposure
- The waste identification prediction API (
app.py) binds to0.0.0.0:5000— place behind a reverse proxy in production - No authentication or rate limiting built into the prediction API
- No sensitive data stored in model artifacts
8. Developer Internals
Repository Structure
models/
├── tensorflow_models/ # pip package entry: import tensorflow_models as tfm
│ ├── __init__.py # Re-exports: nlp, vision, uplift, core, optimization
│ ├── nlp.py # tfm.nlp namespace
│ ├── vision.py # tfm.vision namespace
│ └── uplift.py # tfm.uplift namespace
├── official/ # Production models (Google-maintained)
│ ├── core/ # Framework core (27 files, 213K chars)
│ │ ├── config_definitions.py # ExperimentConfig, RuntimeConfig, TrainerConfig
│ │ ├── train_lib.py # run_experiment() orchestrator
│ │ ├── train_utils.py # Config serialization, strategy utilities
│ │ ├── base_task.py # Abstract base for all tasks
│ │ ├── base_trainer.py # Base trainer with Orbit integration
│ │ ├── task_factory.py # get_task() from registry
│ │ ├── exp_factory.py # Experiment config factory
│ │ ├── registry.py # Global model/task/config registry
│ │ ├── input_reader.py # Unified data pipeline
│ │ ├── export_base.py # SavedModel export utilities
│ │ ├── actions.py # PruningAction, EMACheckpointing
│ │ ├── file_writers.py # Output file utilities
│ │ ├── savedmodel_checkpoint_manager.py # SavedModel-aware checkpoint management
│ │ ├── tf_example_builder.py # TFExample construction helpers
│ │ └── tf_example_feature_key.py # Standard feature key constants
│ ├── modeling/ # Shared modeling utilities (6 files, 28K chars)
│ │ ├── hyperparams/ # ParamsDict, Config, typed parameters
│ │ │ └── params_dict.py # Hierarchical dict with validation + locking
│ │ ├── optimization/ # Learning rate schedules, EMA, optimizers
│ │ ├── grad_utils.py # Gradient filtering, all-reduce
│ │ ├── tf_utils.py # TF utility functions
│ │ ├── performance.py # Mixed precision, XLA configuration
│ │ └── multitask/ # Multi-task learning utilities
│ ├── common/ # Shared infrastructure (7 files, 24K chars)
│ │ ├── distribute_utils.py # Distribution strategy factory
│ │ ├── dataset_fn.py # Dataset type picker
│ │ └── flags.py # Common flag registration
│ ├── utils/ # Utilities
│ │ ├── flags/ # Flag definitions (_base.py, _perf.py, core.py)
│ │ │ └── _base.py # define_base() registers standard CLI flags
│ │ ├── testing/ # Test utilities and mock tasks
│ │ └── misc/ # Keras utilities
│ ├── vision/ # Vision models (4 core files + layers/configs/tasks)
│ │ ├── train.py # Training driver with preemption recovery
│ │ ├── registry_imports.py # Registry side-effect imports
│ │ ├── configs/experiments/ # YAML configs by task type
│ │ ├── modeling/ # Backbones, heads, decoders, layers
│ │ ├── tasks/ # Image classification, detection, segmentation tasks
│ │ ├── dataloaders/ # Data pipeline implementations
│ │ ├── losses/ # Loss functions
│ │ ├── ops/ # Vision-specific ops
│ │ ├── evaluation/ # Evaluation metrics
│ │ ├── serving/ # Serving utilities
│ │ └── utils/ # Summary manager, object detection utils
│ ├── nlp/ # NLP models (5 core files + modeling/configs/tasks)
│ │ ├── optimization.py # WarmUp LR schedule, optimizer factory
│ │ ├── continuous_finetune_lib.py # Continuous fine-tuning utilities
│ │ ├── modeling/ # BERT, encoders, networks, layers (19 model files)
│ │ ├── configs/ # NLP experiment configs
│ │ ├── tasks/ # NLP task implementations
│ │ ├── finetuning/ # GLUE, SQuAD, SuperGLUE fine-tuning
│ │ └── serving/ # NLP serving utilities
│ ├── recommendation/ # Recommendation models (15 files, 145K chars)
│ │ ├── ranking/ # Ranking models and data preprocessing
│ │ └── uplift/ # Uplift modeling (two-tower, treatment effects)
│ ├── legacy/ # Deprecated models (benchmarking only)
│ │ ├── detection/ # RetinaNet, Mask R-CNN, ShapeMask
│ │ ├── bert/ # Legacy BERT implementation
│ │ ├── albert/ # ALBERT (deprecated)
│ │ ├── xlnet/ # XLNet
│ │ ├── image_classification/ # ResNet, EfficientNet classifier trainer
│ │ └── transformer/ # Legacy transformer
│ ├── projects/ # 40+ domain-specific projects
│ │ ├── yolo/ # YOLOv4, YOLOv7, Scaled-YOLO
│ │ ├── centernet/ # CenterNet detection
│ │ ├── detr/ # DETR detection transformer
│ │ ├── simclr/ # Self-supervised contrastive learning
│ │ ├── movinet/ # Mobile video networks
│ │ ├── perceiver/ # Perceiver models
│ │ ├── longformer/ # Longformer attention
│ │ ├── bigbird/ # BigBird sparse attention
│ │ ├── mae/ # Masked autoencoders
│ │ ├── maxvit/ # MaxViT vision transformer
│ │ ├── pointpillars/ # 3D object detection
│ │ ├── panoptic/ # Panoptic segmentation
│ │ ├── maskconver/ # MaskConver
│ │ ├── pix2seq/ # Pix2Seq
│ │ ├── qat/ # Quantization-aware training (vision + NLP)
│ │ ├── pruning/ # Model pruning
│ │ ├── edgetpu/ # Edge TPU optimized models
│ │ ├── videoglue/ # Video understanding
│ │ ├── waste_identification_ml/ # CircularNet waste detection + prediction API
│ │ └── ... # basnet, fffner, unified_detector, etc.
│ └── pip_package/ # setup.py for PyPI distribution
├── orbit/ # Training loop library
│ ├── __init__.py # Public API: Controller, runners, actions
│ ├── controller.py # Controller class (train/eval outer loop)
│ ├── runner.py # AbstractTrainer, AbstractEvaluator interfaces
│ ├── standard_runner.py # StandardTrainer, StandardEvaluator
│ ├── actions/ # Built-in actions (8 files, 38K chars)
│ │ ├── __init__.py # Export, NewBestMetric, ConditionalAction
│ │ └── ... # Action implementations
│ ├── utils/ # Summary managers, utilities (9 files, 33K chars)
│ └── examples/ # Example trainer implementations
├── research/ # Paper implementations (community-maintained)
│ ├── object_detection/ # TF OD API (44 core, 62 utils, 81 models)
│ │ ├── protos/ # 34 protobuf definitions
│ │ ├── core/ # Core detection abstractions
│ │ ├── models/ # SSD, Faster R-CNN, and Keras model implementations
│ │ ├── utils/ # Visualization, evaluation, ops
│ │ ├── builders/ # Builder pattern for constructing models from configs
│ │ ├── meta_architectures/ # Meta-architecture abstractions
│ │ └── dataset_tools/ # Data conversion utilities
│ ├── deeplab/ # DeepLab segmentation (12 core files + core/)
│ │ ├── core/ # Xception, ResNet backbones, dense prediction
│ │ ├── utils/ # Training, evaluation utilities
│ │ └── datasets/ # Dataset definitions
│ ├── slim/ # TF-Slim model zoo
│ │ ├── nets/ # MobileNet, NASNet, network definitions
│ │ └── preprocessing/ # Image preprocessing pipelines
│ ├── delf/ # DEep Local Features
│ │ └── delf/python/examples/ # CLI tools: extract_boxes, extract_features, match_images
│ ├── audioset/ # VGGish, YAMNet audio classifiers
│ ├── adversarial_text/ # Adversarial training for text
│ ├── seq_flow_lite/ # On-device sequence models
│ ├── autoaugment/ # Data augmentation policies
│ ├── deep_speech/ # Speech recognition
│ ├── cognitive_planning/ # Cognitive planning research
│ ├── lfads/ # Latent Factor Analysis via Dynamical Systems
│ ├── pcl_rl/ # Path Consistency Learning (RL)
│ ├── vid2depth/ # Video-to-depth estimation
│ ├── rebar/ # REBAR gradient estimator
│ ├── efficient-hrl/ # Efficient hierarchical RL
│ ├── lstm_object_detection/ # LSTM-based video object detection
│ ├── marco/ # Automated image analysis
│ ├── cvt_text/ # Cross-view training for text
│ └── nst_blogpost/ # Neural style transfer
├── docs/ # Public documentation (mirrored to tensorflow.org/tfmodels)
│ ├── orbit/ # Orbit documentation
│ ├── vision/ # Vision documentation
│ └── nlp/ # NLP documentation
└── community/ # Community contributions
Architecture Deep Dive
Registry and Factory Pattern
The official/core/registry.py module implements a global registry for experiments, tasks, and models. Decorators register implementations:
from official.core import exp_factory
@exp_factory.register_config_factory('resnet_imagenet')
def resnet_imagenet() -> cfg.ExperimentConfig:
return cfg.ExperimentConfig(
task=ResNetImageNetConfig(),
trainer=TrainerConfig(train_steps=90000))
task_factory.get_task(params.task) looks up the registered task class and instantiates it. This pattern allows adding new experiments without modifying framework code.
Orbit Controller Internals
The Controller class (orbit/controller.py) implements four outer loop patterns:
train(steps)— Callstrainer.train(steps_per_loop)in a loop, running train actions after each inner loop, saving checkpoints at intervalsevaluate(steps)— Runsevaluator.evaluate(steps)once, runs eval actionstrain_and_evaluate(train_steps, eval_steps, eval_interval)— Interleaves training and evaluationevaluate_continuously(timeout)— Monitors a checkpoint directory, evaluates each new checkpoint
The Action type is Callable[[runner.Output], None] — any callable that accepts training/eval output. Built-in actions include:
PruningAction— Updates pruning step counters and logs pruning summariesEMACheckpointing— Swaps model weights with EMA averages and saves checkpoints
Configuration System Internals
ParamsDict (official/modeling/hyperparams/params_dict.py):
- Hierarchical dictionary with dot-notation access
- Supports
override()with strict mode (key must exist) or relaxed mode validate()checks parameter restrictions (e.g., mutually exclusive options)lock()makes the config immutable after validation- Used by legacy detection models
ExperimentConfig (official/core/config_definitions.py):
- Dataclass-based config with type annotations
- Includes
RuntimeConfig,TrainerConfig, and task-specific sub-configs - YAML serializable/deserializable
- Used by all modern
official/models
Data Pipeline Architecture
official/core/input_reader.py— Unified input reader supporting TFRecord and TFDSofficial/common/dataset_fn.py—pick_dataset_fn()returns the appropriatetf.data.Datasetconstructor based on file type- Task-specific dataloaders in
official/vision/dataloaders/andofficial/nlp/data/ - Research models use their own data loading (e.g.,
research/object_detection/inputs/)
NLP Optimization
official/nlp/optimization.py provides:
WarmUp— Linear warmup learning rate schedule wrapping any base schedule- Optimizer factory supporting Adam, AdamW, LAMB, and SGD with configurable weight decay, warmup, and polynomial/cosine decay
class WarmUp(tf_keras.optimizers.schedules.LearningRateSchedule):
def __init__(self, initial_learning_rate, decay_schedule_fn,
warmup_steps, power=1.0):
# Linear warmup from 0 to initial_learning_rate over warmup_steps
# Then follows decay_schedule_fn
Module Reference
official/core (27 files, 213K chars)
| Module | Purpose |
|---|---|
config_definitions.py |
ExperimentConfig, RuntimeConfig, TrainerConfig dataclasses |
train_lib.py |
run_experiment() — main orchestrator for training with Orbit |
train_utils.py |
Config serialization, strategy utilities, write_json_summary |
base_task.py |
Abstract Task base class defining build_model, build_losses, train_step, validation_step |
base_trainer.py |
BaseTrainer integrating Task with Orbit's AbstractTrainer |
task_factory.py |
get_task() — instantiate task from config using registry |
exp_factory.py |
get_exp_config() — instantiate experiment config from registry |
registry.py |
Decorator-based global registry for experiments, tasks, models |
input_reader.py |
Unified InputReader for TFRecord/TFDS data pipelines |
export_base.py |
SavedModel export base classes and utilities |
actions.py |
PruningAction, EMACheckpointing — Orbit train/eval actions |
savedmodel_checkpoint_manager.py |
CheckpointManager that also exports SavedModel at each save |
tf_example_builder.py |
Helpers for constructing tf.train.Example protos |
tf_example_feature_key.py |
Standard feature key constants for TFExample |
file_writers.py |
File output utilities |
orbit/ (6 core files + 8 actions + 9 utils, 155K chars total)
| Module | Purpose |
|---|---|
controller.py |
Controller class — outer training/eval loop management |
runner.py |
AbstractTrainer, AbstractEvaluator — interfaces for inner loops |
standard_runner.py |
StandardTrainer, StandardEvaluator — default implementations with tf.function tracing |
actions/ |
Built-in actions: export, metric tracking, conditional execution |
utils/ |
SummaryManager, SummaryManagerInterface, epoch helpers |
official/modeling (6 files, 28K chars)
| Module | Purpose |
|---|---|
grad_utils.py |
Gradient filtering, distributed all-reduce with precision control |
hyperparams/params_dict.py |
Hierarchical config with validation, overrides, and locking |
optimization/ |
Learning rate schedules (warmup, cosine, step, polynomial), EMA optimizer |
tf_utils.py |
TensorFlow utility functions |
performance.py |
Mixed precision and XLA configuration helpers |
official/common (7 files, 24K chars)
| Module | Purpose |
|---|---|
distribute_utils.py |
get_distribution_strategy() factory, configure_cluster(), strategy helpers |
dataset_fn.py |
pick_dataset_fn() — returns TFRecordDataset or compressed variant |
flags.py |
Common flag registration and TFM-specific flag definitions |
research/object_detection (44 core + 62 utils + 81 models + 34 protos)
| Component | Files | Purpose |
|---|---|---|
core/ |
44 files, 1.2M chars | Core abstractions: box lists, target assigners, preprocessor, post-processing, losses |
utils/ |
62 files, 1M chars | Visualization, evaluation, ops, config utils |
models/ |
81 files, 736K chars | SSD, Faster R-CNN, CenterNet, and Keras model implementations |
protos/ |
34 files, 150K chars | Protocol Buffer definitions for detection pipeline configs |
meta_architectures/ |
— | SSD, Faster R-CNN, CenterNet meta-architectures |
builders/ |
— | Builder pattern for constructing models from protobuf configs |
dataset_tools/ |
— | Data conversion (COCO, PASCAL VOC, DensePose, Context R-CNN) |
research/deeplab (12 core + 18 core files, 402K chars)
| Component | Purpose |
|---|---|
core/ |
Xception backbone (xception.py), ResNet-v1-beta, dense prediction cell, preprocessing |
core/conv2d_ws.py |
Weight-standardized Conv2D layer |
core/dense_prediction_cell.py |
Neural architecture search cell for dense prediction |
utils/ |
Training utilities, evaluation helpers |
datasets/ |
Dataset registration (Cityscapes, PASCAL VOC, ADE20K) |
Code Patterns and Conventions
Import Pattern
import tensorflow as tf, tf_keras # Dual import for TF 2.16+ compatibility
All files use Apache License 2.0 with Google copyright headers.
Registry Pattern
# Registration
@exp_factory.register_config_factory('my_experiment')
def my_experiment():
return ExperimentConfig(...)
# Usage
config = exp_factory.get_exp_config('my_experiment')
Config Override Chain
Default Config → YAML File → Gin Bindings → CLI --params_override → params.lock()
Error Handling Pattern
The codebase uses explicit ValueError for configuration errors, NotImplementedError for abstract interfaces, and OverflowError for numerical instability (NaN loss). Of the 694 error messages extracted, the majority (>500) are ValueError for invalid parameter combinations.
Testing Pattern
Tests use tf.test.TestCase and parameterized.TestCase (from absl-py). The test files (*_test.py) are excluded from the pip package but present in the source tree.
Testing Strategy
| Test Type | Location | Framework |
|---|---|---|
| Unit tests | Co-located with source (*_test.py) |
tf.test.TestCase, absl.testing |
| Integration tests | Per-project test directories | tf.test.TestCase |
| Config tests | configs/*_test.py |
Validates config roundtrip |
# Run all tests for a module
python -m pytest official/core/ -v
# Run a specific test
python -m pytest official/common/distribute_utils_test.py -v
Test utilities in official/utils/testing/ include mock_task.py for creating lightweight task mocks during testing.
Potential Improvements
Based on source analysis:
-
Legacy code removal — The
official/legacy/directory contains deprecated implementations (BERT, ALBERT, image classification, detection) that duplicate functionality inofficial/nlp/andofficial/vision/. Consider archiving or removing once all benchmarks migrate. -
Research model maintenance — Several research models depend on outdated TF APIs and may not work with the latest TensorFlow (e.g.,
seq_flow_litebuild issues, GitHub issue #10737). -
Prediction API hardening — The waste identification FastAPI server lacks authentication, rate limiting, input size validation, and health check endpoints. Production deployment needs a reverse proxy and request throttling.
-
Config system unification — Two config systems coexist:
ParamsDict(legacy detection) andExperimentConfig(modern). Migrating legacy detection toExperimentConfigwould reduce maintenance burden. -
Protobuf compilation step — The object detection API requires manual protobuf compilation (
protoc object_detection/protos/*.proto --python_out=.). Pre-compiled Python files or build automation would improve onboarding. -
Checkpoint URL freshness — Multiple GitHub issues report 403/AccessDenied errors for hosted checkpoints. A CI job validating checkpoint URL accessibility would catch these proactively.
-
Python 3.13 compatibility — GitHub issue #13587 reports installation issues on Python 3.13. Dependency resolution and wheel availability need tracking.
Contributing
- Fork the repository on GitHub
- Set up development environment:
git clone https://github.com/YOUR_USER/models.git cd models pip install -r official/requirements.txt export PYTHONPATH="$PYTHONPATH:$(pwd)" - Create a feature branch
- Follow the existing code style: Apache 2.0 headers,
tf_kerasimports,tf.test.TestCasefor tests - Run relevant tests:
python -m pytest official/core/ -v - Submit a pull request against the
masterbranch
Important
All code contributions must include the Apache License 2.0 header. Test files should follow the naming convention
*_test.pyand usetf.test.TestCaseas the base class.
9. Integration Points
TensorFlow Hub
Models can be loaded from TF Hub instead of raw checkpoints:
import tensorflow_hub as hub
# BERT models
bert = hub.load("https://tfhub.dev/tensorflow/bert_en_uncased_L-12_H-768_A-12/4")
# Use with training scripts
python run_classifier.py \
--hub_module_url=https://tfhub.dev/tensorflow/bert_en_uncased_L-24_H-1024_A-16/1
Available BERT hub modules:
bert_en_uncased_L-12_H-768_A-12— BERT-Base Uncased (110M params)bert_en_uncased_L-24_H-1024_A-16— BERT-Large Uncased (340M params)bert_en_cased_L-12_H-768_A-12— BERT-Base Cased (110M params)bert_en_cased_L-24_H-1024_A-16— BERT-Large Cased (340M params)bert_en_wwm_uncased_L-24_H-1024_A-16— BERT-Large WWM Uncased (340M params)bert_en_wwm_cased_L-24_H-1024_A-16— BERT-Large WWM Cased (340M params)bert_multi_cased_L-12_H-768_A-12— Multilingual BERT (104 languages, 110M params)bert_zh_L-12_H-768_A-12— Chinese BERT (110M params)
TensorFlow Datasets (TFDS)
The classifier_trainer.py supports TFDS for ImageNet and other datasets:
task:
train_data:
tfds_name: 'imagenet2012'
tfds_split: 'train'
TensorFlow Model Optimization Toolkit
Pruning and quantization-aware training (QAT) are integrated via official/projects/qat/ and official/projects/pruning/:
import tensorflow_model_optimization as tfmot
# PruningAction updates pruning step after each training loop
pruning_action = PruningAction(
export_dir='/tmp/pruning_summaries',
model=model,
optimizer=optimizer)
TensorFlow Lite
Models can be converted to TFLite for on-device inference:
converter = tf.lite.TFLiteConverter.from_saved_model('/tmp/saved_model')
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()
The ai-edge-litert package (required dependency) provides the runtime. Research projects like seq_flow_lite include custom TFLite ops (research/seq_flow_lite/tflite_ops/, research/seq_flow_lite/tf_ops/).
Gin-Config
Many experiments support Gin for fine-grained parameterization:
python official/vision/train.py \
--experiment=resnet_imagenet \
--gin_file=custom_overrides.gin \
--gin_params="TrainerConfig.train_steps=50000"
Google Cloud Integration
- Cloud TPU: Native support via
tf.distribute.TPUStrategy - Cloud Storage: All data/checkpoint paths support
gs://URIs - AI Platform: Research object detection includes Docker configs for AI Platform training (
research/object_detection/dockerfiles/tf2_ai_platform/)