# jwyang/fpn.pytorch architecture

> Architecture diagram of the GitHub repository jwyang/fpn.pytorch, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/jwyang/fpn.pytorch
- Repository: https://github.com/jwyang/fpn.pytorch

## Overview

This repository implements PyTorch Feature Pyramid Network object detection, with training and image-directory inference as user workflows. Training selects a dataset, builds region-of-interest training batches, and passes them through an FPN detector; the detector uses a region proposal network and one of three documented ROI pooling methods. Dataset-specific evaluation and COCO evaluation are additional capabilities. The excerpts confirm parts of these flows, but omit substantial model and demo code, so uncertain internal wiring is not expanded.

Main entry points: [`lib/model/fpn/fpn.py`](https://github.com/jwyang/fpn.pytorch/blob/master/lib/model/fpn/fpn.py) (FPN detector), [`lib/datasets/factory.py`](https://github.com/jwyang/fpn.pytorch/blob/master/lib/datasets/factory.py) (Dataset factory), [`trainval_net.py`](https://github.com/jwyang/fpn.pytorch/blob/master/trainval_net.py) (Training entry), [`demo.py`](https://github.com/jwyang/fpn.pytorch/blob/master/demo.py) (Inference demo)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Datasets and batches"]
  node_registry["Dataset factory<br/>[factory.py]"]
  node_imdb["Dataset base<br/>[imdb.py]"]
  node_voc["PASCAL VOC<br/>[pascal_voc.py]"]
  node_coco["COCO dataset<br/>[coco.py]"]
  node_imagenet["ImageNet dataset<br/>[imagenet.py]"]
  node_vg["Visual Genome<br/>[vg.py]"]
  node_roidb["ROI database<br/>[roidb.py]"]
  node_loader["Batch loader<br/>[roibatchLoader.py]"]
  node_minibatch["Image preprocessing<br/>[minibatch.py]"]
end

subgraph group_detector["FPN detector"]
  node_fpn["FPN detector<br/>[fpn.py]"]
  node_backbone["ResNet backbone<br/>[resnet.py]"]
  node_rpn["Proposals and anchors<br/>[rpn_fpn.py]"]
  node_targets["ROI targets"]
  node_pooling["ROI pooling options<br/>[roi_pool.py]"]
  node_align["ROI Align<br/>[roi_align.py]"]
  node_crop["ROI Crop<br/>[roi_crop.py]"]
end

subgraph group_runtime["Training and inference"]
  node_training["Training entry<br/>[trainval_net.py]"]
  node_demo["Inference demo<br/>[demo.py]"]
  node_results["Detection results"]
end

subgraph group_evaluation["Evaluation"]
  node_voc_eval["VOC evaluation<br/>[voc_eval.py]"]
  node_coco_eval["COCO evaluation<br/>[cocoeval.py]"]
end

node_user(("Engineer"))
node_images["Image directory"]

node_user -->|"starts training"| node_training
node_user -->|"runs inference"| node_demo
node_training -->|"selects dataset"| node_registry
node_registry -->|"creates"| node_voc
node_registry -->|"creates"| node_coco
node_registry -->|"creates"| node_imagenet
node_registry -->|"creates"| node_vg
node_voc -->|"uses base"| node_imdb
node_coco -->|"uses base"| node_imdb
node_imagenet -->|"uses base"| node_imdb
node_vg -->|"uses base"| node_imdb
node_training -->|"builds database"| node_roidb
node_roidb -->|"queries dataset"| node_registry
node_training -->|"constructs"| node_loader
node_loader -->|"prepares images"| node_minibatch
node_training -->|"trains model"| node_fpn
node_demo -->|"runs detection"| node_fpn
node_demo -->|"reads images"| node_images
node_fpn -->|"extracts features"| node_backbone
node_fpn -->|"generates proposals"| node_rpn
node_fpn -->|"samples training ROIs"| node_targets
node_fpn -->|"pools ROI features"| node_pooling
node_fpn -->|"aligns ROI features"| node_align
node_fpn -->|"crops ROI features"| node_crop
node_fpn -->|"produces detections"| node_results
node_demo -->|"renders detections"| node_results
node_voc -.->|"evaluates detections"| node_voc_eval
node_coco -.->|"evaluates detections"| node_coco_eval

click node_training "https://github.com/jwyang/fpn.pytorch/blob/master/trainval_net.py"
click node_demo "https://github.com/jwyang/fpn.pytorch/blob/master/demo.py"
click node_registry "https://github.com/jwyang/fpn.pytorch/blob/master/lib/datasets/factory.py"
click node_imdb "https://github.com/jwyang/fpn.pytorch/blob/master/lib/datasets/imdb.py"
click node_voc "https://github.com/jwyang/fpn.pytorch/blob/master/lib/datasets/pascal_voc.py"
click node_coco "https://github.com/jwyang/fpn.pytorch/blob/master/lib/datasets/coco.py"
click node_imagenet "https://github.com/jwyang/fpn.pytorch/blob/master/lib/datasets/imagenet.py"
click node_vg "https://github.com/jwyang/fpn.pytorch/blob/master/lib/datasets/vg.py"
click node_roidb "https://github.com/jwyang/fpn.pytorch/blob/master/lib/roi_data_layer/roidb.py"
click node_loader "https://github.com/jwyang/fpn.pytorch/blob/master/lib/roi_data_layer/roibatchLoader.py"
click node_minibatch "https://github.com/jwyang/fpn.pytorch/blob/master/lib/roi_data_layer/minibatch.py"
click node_fpn "https://github.com/jwyang/fpn.pytorch/blob/master/lib/model/fpn/fpn.py"
click node_backbone "https://github.com/jwyang/fpn.pytorch/blob/master/lib/model/fpn/resnet.py"
click node_rpn "https://github.com/jwyang/fpn.pytorch/blob/master/lib/model/rpn/rpn_fpn.py"
click node_targets "https://github.com/jwyang/fpn.pytorch/blob/master/lib/model/rpn/proposal_target_layer.py"
click node_pooling "https://github.com/jwyang/fpn.pytorch/blob/master/lib/model/roi_pooling/modules/roi_pool.py"
click node_align "https://github.com/jwyang/fpn.pytorch/blob/master/lib/model/roi_align/modules/roi_align.py"
click node_crop "https://github.com/jwyang/fpn.pytorch/blob/master/lib/model/roi_crop/modules/roi_crop.py"
click node_voc_eval "https://github.com/jwyang/fpn.pytorch/blob/master/lib/datasets/voc_eval.py"
click node_coco_eval "https://github.com/jwyang/fpn.pytorch/blob/master/lib/pycocotools/cocoeval.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_registry,node_imdb,node_voc,node_coco,node_imagenet,node_vg,node_roidb,node_loader,node_minibatch toneBlue
class node_fpn,node_backbone,node_rpn,node_targets,node_pooling,node_align,node_crop toneAmber
class node_training,node_demo,node_results toneMint
class node_voc_eval,node_coco_eval toneRose
class node_user,node_images toneIndigo
```

## Components

### Datasets and batches

- [Dataset factory](https://github.com/jwyang/fpn.pytorch/blob/master/lib/datasets/factory.py): `lib/datasets/factory.py`
- [Dataset base](https://github.com/jwyang/fpn.pytorch/blob/master/lib/datasets/imdb.py): `lib/datasets/imdb.py`
- [PASCAL VOC](https://github.com/jwyang/fpn.pytorch/blob/master/lib/datasets/pascal_voc.py): `lib/datasets/pascal_voc.py`
- [COCO dataset](https://github.com/jwyang/fpn.pytorch/blob/master/lib/datasets/coco.py): `lib/datasets/coco.py`
- [ImageNet dataset](https://github.com/jwyang/fpn.pytorch/blob/master/lib/datasets/imagenet.py): `lib/datasets/imagenet.py`
- [Visual Genome](https://github.com/jwyang/fpn.pytorch/blob/master/lib/datasets/vg.py): `lib/datasets/vg.py`
- [ROI database](https://github.com/jwyang/fpn.pytorch/blob/master/lib/roi_data_layer/roidb.py): `lib/roi_data_layer/roidb.py`
- [Batch loader](https://github.com/jwyang/fpn.pytorch/blob/master/lib/roi_data_layer/roibatchLoader.py): `lib/roi_data_layer/roibatchLoader.py`
- [Image preprocessing](https://github.com/jwyang/fpn.pytorch/blob/master/lib/roi_data_layer/minibatch.py): `lib/roi_data_layer/minibatch.py`

### FPN detector

- [FPN detector](https://github.com/jwyang/fpn.pytorch/blob/master/lib/model/fpn/fpn.py): `lib/model/fpn/fpn.py`
- [ResNet backbone](https://github.com/jwyang/fpn.pytorch/blob/master/lib/model/fpn/resnet.py): `lib/model/fpn/resnet.py`
- [Proposals and anchors](https://github.com/jwyang/fpn.pytorch/blob/master/lib/model/rpn/rpn_fpn.py): `lib/model/rpn/rpn_fpn.py`
- [ROI targets](https://github.com/jwyang/fpn.pytorch/blob/master/lib/model/rpn/proposal_target_layer.py): `lib/model/rpn/proposal_target_layer.py`
- [ROI pooling options](https://github.com/jwyang/fpn.pytorch/blob/master/lib/model/roi_pooling/modules/roi_pool.py): `lib/model/roi_pooling/modules/roi_pool.py`
- [ROI Align](https://github.com/jwyang/fpn.pytorch/blob/master/lib/model/roi_align/modules/roi_align.py): `lib/model/roi_align/modules/roi_align.py`
- [ROI Crop](https://github.com/jwyang/fpn.pytorch/blob/master/lib/model/roi_crop/modules/roi_crop.py): `lib/model/roi_crop/modules/roi_crop.py`

### Training and inference

- [Training entry](https://github.com/jwyang/fpn.pytorch/blob/master/trainval_net.py): `trainval_net.py`
- [Inference demo](https://github.com/jwyang/fpn.pytorch/blob/master/demo.py): `demo.py`
- **Detection results**

### Evaluation

- [VOC evaluation](https://github.com/jwyang/fpn.pytorch/blob/master/lib/datasets/voc_eval.py): `lib/datasets/voc_eval.py`
- [COCO evaluation](https://github.com/jwyang/fpn.pytorch/blob/master/lib/pycocotools/cocoeval.py): `lib/pycocotools/cocoeval.py`

### Other components

- **Engineer**
- **Image directory**

## Connections

- Engineer → Training entry: starts training
- Engineer → Inference demo: runs inference
- Training entry → Dataset factory: selects dataset
- Dataset factory → PASCAL VOC: creates
- Dataset factory → COCO dataset: creates
- Dataset factory → ImageNet dataset: creates
- Dataset factory → Visual Genome: creates
- PASCAL VOC → Dataset base: uses base
- COCO dataset → Dataset base: uses base
- ImageNet dataset → Dataset base: uses base
- Visual Genome → Dataset base: uses base
- Training entry → ROI database: builds database
- ROI database → Dataset factory: queries dataset
- Training entry → Batch loader: constructs
- Batch loader → Image preprocessing: prepares images
- Training entry → FPN detector: trains model
- Inference demo → FPN detector: runs detection
- Inference demo → Image directory: reads images
- FPN detector → ResNet backbone: extracts features
- FPN detector → Proposals and anchors: generates proposals
- FPN detector → ROI targets: samples training ROIs
- FPN detector → ROI pooling options: pools ROI features
- FPN detector → ROI Align: aligns ROI features
- FPN detector → ROI Crop: crops ROI features
- FPN detector → Detection results: produces detections
- Inference demo → Detection results: renders detections
- PASCAL VOC → VOC evaluation: evaluates detections
- COCO dataset → COCO evaluation: evaluates detections
