Skip to main content

Configuration

This document describes all configuration options available in the Spectrum Analyzer codebase.

Repository: GitHub

Dataset Configuration

Dataset configuration is specified in YAML files in the data/ directory.

Dataset YAML Structure

# Dataset root directory
path: /path/to/dataset

# Train, validation, and test paths (relative to path)
train: images/train
val: images/val
test: images/test

# Number of classes
nc: 11

# Class names
names: ['Rect', 'Barker', 'Frank', 'P1', 'P2', 'P3', 'P4', 'Px', 'ZadoffChu', 'LFM', 'FMCW']

Example: RadDet Configuration

# data/raddet.yaml
path: /home/ubuntu/RadDet/RadDet40k512HW009Tv2
train: images/train
val: images/val
test: images/test
nc: 11
names: ['Rect', 'Barker', 'Frank', 'P1', 'P2', 'P3', 'P4', 'Px', 'ZadoffChu', 'LFM', 'FMCW']

Model Configuration

Model architectures are defined in YAML files in the models/ directory.

Model YAML Structure

# Number of classes
nc: 11

# Depth and width multipliers
depth_multiple: 1.0
width_multiple: 1.0

# Anchor boxes for each detection layer
anchors:
- [10,14, 23,27, 37,58] # P4/16
- [81,82, 135,169, 344,319] # P5/32

# Backbone layers
backbone:
[[-1, 1, Conv_1, [64, 7, 2]],
[-1, 1, BasicBlock_2, [64, 3, 2]],
# ... more layers
]

# Detection head
head:
[[-1, 1, Detect, [nc, anchors]],]

Available Model Configurations

  • resnet10.yaml: Lightweight ResNet-10 backbone
  • resnet18.yaml: ResNet-18 backbone (default)
  • resnet34.yaml: Deeper ResNet-34 backbone
  • resnet34-cat.yaml: ResNet-34 with concatenation
  • Custom architectures can be created

Hyperparameters Configuration

Training hyperparameters are defined in data/hyps/hyp.scratch.yaml.

Hyperparameters Structure

# Learning rate
lr0: 0.01 # initial learning rate
lrf: 0.1 # final learning rate (lr0 * lrf)

# Optimizer
momentum: 0.937 # SGD momentum
weight_decay: 0.0005 # weight decay

# Learning rate schedule
warmup_epochs: 3.0
warmup_momentum: 0.8
warmup_bias_lr: 0.1

# Loss weights
box: 0.05 # box loss gain
cls: 0.5 # classification loss gain
obj: 1.0 # objectness loss gain

# Data augmentation
hsv_h: 0.015 # HSV-Hue augmentation
hsv_s: 0.7 # HSV-Saturation augmentation
hsv_v: 0.4 # HSV-Value augmentation
degrees: 0.0 # rotation (+/- deg)
translate: 0.1 # translation (+/- fraction)
scale: 0.5 # scale (+/- gain)
shear: 0.0 # shear (+/- deg)
flipud: 0.0 # flip up-down probability
fliplr: 0.5 # flip left-right probability
mosaic: 1.0 # mosaic augmentation probability
mixup: 0.0 # mixup augmentation probability

Training Configuration

Training is configured via command-line arguments in train.py.

Training Parameters

ParameterTypeDefaultDescription
--weightsstrNoneInitial weights path
--cfgstrmodels/resnet10.yamlModel configuration file
--datastrdata/coco.yamlDataset configuration file
--hypstrdata/hyps/hyp.scratch.yamlHyperparameters file
--epochsint300Number of training epochs
--batch-sizeint16Batch size
--imgszint640Image size (pixels)
--rectflagFalseRectangular training
--resumestr/boolFalseResume training from checkpoint
--devicestr4,5,6,7CUDA device(s) or 'cpu'
--workersint4DataLoader workers
--projectstrruns/trainProject directory
--namestrexpExperiment name
--cachestrNoneCache images in 'ram' or 'disk'
--multi-scaleflagFalseVary image size +/- 50%
--single-clsflagFalseTrain as single-class
--adamflagFalseUse Adam optimizer
--freezeint0Number of layers to freeze
--save-periodint-1Save checkpoint every N epochs

Example Training Command

python train.py \
--data data/raddet.yaml \
--cfg models/resnet18.yaml \
--imgsz 512 \
--epochs 300 \
--batch-size 64 \
--workers 20 \
--device 0 \
--cache ram

Validation Configuration

Validation is configured via command-line arguments in val.py.

Validation Parameters

ParameterTypeDefaultDescription
--weightsstrRequiredModel weights path
--datastrdata/coco.yamlDataset configuration
--batch-sizeint32Batch size
--imgszint640Image size (pixels)
--conf-thresfloat0.001Confidence threshold
--iou-thresfloat0.6NMS IoU threshold
--taskstrvalTask: train/val/test
--devicestr''CUDA device or 'cpu'
--augmentflagFalseAugmented inference
--verboseflagFalseReport mAP by class
--save-txtflagFalseSave results to *.txt
--save-jsonflagFalseSave COCO-JSON results

Example Validation Command

python val.py \
--weights runs/train/exp28/weights/best.pt \
--data data/raddet.yaml \
--task test \
--imgsz 512 \
--conf-thres 0.001

Detection/Inference Configuration

Detection is configured via command-line arguments in detect.py.

Detection Parameters

ParameterTypeDefaultDescription
--weightsstrRequiredModel weights path
--sourcestrdata/imagesSource: file/dir/URL
--imgszint640Inference image size
--conf-thresfloat0.25Confidence threshold
--iou-thresfloat0.45NMS IoU threshold
--max-detint1000Maximum detections per image
--devicestr''CUDA device or 'cpu'
--save-txtflagFalseSave results to *.txt
--save-imgflagFalseSave inference images
--save-confflagFalseSave confidences in labels
--classeslistNoneFilter by class IDs
--agnostic-nmsflagFalseClass-agnostic NMS
--augmentflagFalseAugmented inference
--halfflagFalseFP16 half-precision
--line-thicknessint3Bounding box thickness
--hide-labelsflagFalseHide labels
--hide-confflagFalseHide confidences

Example Detection Command

python detect.py \
--weights runs/train/exp28/weights/best.pt \
--source path/to/images \
--imgsz 512 \
--conf-thres 0.25

Detection Parameters

ParameterTypeDefaultDescription
--weightsstrRequiredModel weights path
--sourcestrdata/imagesSource: file/dir/URL
--imgszint640Inference image size
--conf-thresfloat0.25Confidence threshold
--iou-thresfloat0.45NMS IoU threshold
--max-detint1000Maximum detections per image
--devicestr''CUDA device or 'cpu'
--save-txtflagFalseSave results to *.txt
--save-imgflagFalseSave inference images
--save-confflagFalseSave confidences in labels
--classeslistNoneFilter by class IDs
--agnostic-nmsflagFalseClass-agnostic NMS
--augmentflagFalseAugmented inference
--halfflagFalseFP16 half-precision
--line-thicknessint3Bounding box thickness
--hide-labelsflagFalseHide labels
--hide-confflagFalseHide confidences

Example Detection Command

python detect.py \
--weights runs/train/exp28/weights/best.pt \
--source path/to/images \
--imgsz 512 \
--conf-thres 0.25 \
--save-img true

Model Conversion Configuration

Model conversion from SiLU to binary spiking is configured in convert_to_binary_spiking.py.

Conversion Parameters

ParameterTypeDefaultDescription
--weightsstrRequiredPath to trained model weights (.pt file)
--outputstr*_binary.ptOutput path for converted model (adds _binary suffix if not specified)
--diagramstrmodel_architecture.txtOutput file for architecture diagram
--devicestrcudaDevice to load model on (cpu or cuda)
--datastrNonePath to dataset YAML file for forward pass tracing (recommended for accurate diagram)
--img-sizeint640Input image size for forward pass tracing (used as fallback if --data not provided)
--no-traceflagFalseDisable forward pass tracing (show all modules, including unused ones)

Conversion Behavior

Default (without --data):

  • Uses dummy data for forward pass
  • Shows all layers including unused shortcuts and conditional layers
  • May not accurately represent actual execution paths

With --data (Recommended):

  • Uses real test data from dataset
  • Performs actual forward pass
  • Only shows layers and operations actually executed
  • Provides accurate architecture representation

Example Conversion Commands

Basic conversion:

python convert_to_binary_spiking.py \
--weights runs/train/exp28/weights/best.pt

With forward pass tracing (accurate diagram):

python convert_to_binary_spiking.py \
--weights runs/train/exp28/weights/best.pt \
--output arch/model_binary.pt \
--diagram arch/architecture_diagram.txt \
--data data/raddet.yaml \
--img-size 512 \
--device cuda

Show all layers (disable tracing):

python convert_to_binary_spiking.py \
--weights runs/train/exp28/weights/best.pt \
--no-trace

Model Quantization Configuration

Quantization is configured in quantize_model.py. For detailed quantization guide, see Quantization Documentation.

Quantization Parameters

ParameterTypeDefaultDescription
--weightsstrRequiredPath to model weights (.pt file)
--quant-typestrRequiredQuantization type: fp16, dynamic_int8, static_int8, or per_channel_int8
--outputstrquantized_modelsOutput directory for quantized models
--datastrNoneDataset YAML file (required for static/per-channel INT8)
--devicestrcpuDevice to use (cpu or cuda)
--imgszint640Image size for calibration
--batch-sizeint16Batch size for calibration data
--num-calib-batchesint100Number of batches for calibration (static quantization)
--workersint4Number of dataloader workers

Quantization Types

FP16 (Half Precision):

  • ~2x compression
  • No calibration needed
  • Best for GPU deployment

Dynamic INT8:

  • ~4x compression
  • No calibration needed
  • Weights quantized, activations FP32

Static INT8:

  • ~4x compression
  • Requires calibration data
  • Best for production deployment

Per-Channel INT8:

  • ~4x compression
  • Requires calibration data
  • Best accuracy among INT8 methods

Example Quantization Commands

FP16 Quantization:

python quantize_model.py \
--weights arch/model_binary.pt \
--quant-type fp16 \
--output quantized_models/ \
--device cuda

Static INT8 Quantization:

python quantize_model.py \
--weights arch/model_binary.pt \
--quant-type static_int8 \
--data data/raddet.yaml \
--num-calib-batches 50 \
--batch-size 16 \
--imgsz 512 \
--output quantized_models/

Per-Channel INT8 Quantization:

python quantize_model.py \
--weights arch/model_binary.pt \
--quant-type per_channel_int8 \
--data data/raddet.yaml \
--num-calib-batches 50 \
--batch-size 16 \
--imgsz 512 \
--output quantized_models/

Image Size Configuration

Image size is configurable and affects:

  • Model Input: All images are resized to this size
  • Detection Resolution: Higher resolution = better detection but slower
  • Memory Usage: Larger images require more GPU memory

Common Sizes:

  • 320×320: Fast, lower accuracy
  • 512×512: Balanced (default for RadDet)
  • 640×640: Higher accuracy, slower
  • Custom: Any size divisible by 32 (YOLO requirement)

Set via --imgsz parameter in training, validation, and detection.

Device Configuration

Single GPU:

--device 0

Multiple GPUs:

--device 0,1,2,3

CPU:

--device cpu

Output Configuration

Training Output:

  • runs/train/{name}/weights/: Model checkpoints
  • runs/train/{name}/results.png: Training curves
  • runs/train/{name}/PR_curve.png: Precision-Recall curve
  • runs/train/{name}/P_curve.png: Precision-Confidence curve
  • runs/train/{name}/R_curve.png: Recall-Confidence curve

Detection Output:

  • runs/detect/{name}/: Detection result images
  • runs/detect/{name}/labels/: Detection labels (if --save-txt)

Model Conversion Output:

  • *_binary.pt: Converted model with binary spiking activations
  • *_binary_state_dict.pt: Model state dictionary
  • model_architecture.txt: Detailed architecture diagram

Configure via --project and --name parameters.