A comprehensive computer vision framework for training, evaluation, and visualization with support for multiple architectures and GradCAM analysis
Project description
VisFlow
A comprehensive computer vision framework for training, evaluation, and visualization
English | 中文
🚀 Features
- 🎯 Easy Training: Simple YAML configuration for model training
- 🔥 GradCAM Visualization: Built-in support for model interpretability
- 🏗️ Multiple Architectures: Support for 50+ pre-trained models from torchvision
- 🎨 Extensible: Easy to add custom models with the registration system
- ⚡ CLI & Programmatic: Use via command line or Python API
- 📊 Rich Logging: Beautiful terminal output with progress tracking
📦 Installation
pip install visflow
🎯 Quick Start
Training a Model
- Create a configuration file (
config.yml):
model:
architecture: resnet18
pretrained: true
num_classes: 2
training:
device: cuda
batch_size: 32
epochs: 10
learning_rate: 0.001
optimizer: adam
data:
train_dir: ./data/train
val_dir: ./data/val
test_dir: ./data/test
output:
output_dir: ./output
experiment_name: my-experiment
- Train via CLI:
visflow train --config config.yml
- Or train via Python API:
from visflow.resources.configs import TrainConfig
from visflow.pipelines.train import TrainPipeline
pipeline = TrainPipeline(TrainConfig.from_yaml('config.yml'))
pipeline()
GradCAM Visualization
visflow gradcam \
--ckpt-path model.pth \
--image-path image.jpg \
--output-dir ./output \
--target-layer layer4 \
--colormap jet
🏗️ Supported Architectures
Visflow supports 50+ architectures from torchvision:
- ResNet: resnet18, resnet34, resnet50, resnet101, resnet152, resnext50_32x4d, etc.
- EfficientNet: efficientnet_b0 through efficientnet_b7, efficientnet_v2_s/m/l
- Vision Transformers: vit_b_16, vit_b_32, vit_l_16, swin_t, swin_s, swin_b
- MobileNet: mobilenet_v2, mobilenet_v3_small, mobilenet_v3_large
- DenseNet: densenet121, densenet169, densenet201, densenet161
- And many more: VGG, ConvNeXt, RegNet, MaxViT, etc.
🎨 Custom Models
Easily add your own models:
from visflow.resources.models import BaseClassifier, register_model
@register_model('my_custom_model')
class MyCustomModel(BaseClassifier):
def __init__(self, num_classes: int):
super().__init__(num_classes=num_classes)
# Your model implementation
def forward(self, x):
# Forward pass implementation
pass
def gradcam_layer(self):
# Return the last convolutional layer for GradCAM
return self.conv_layer
📖 CLI Reference
Training Command
visflow train [OPTIONS]
Options:
-c, --config PATH Path to training configuration file [required]
-v, --verbose Enable verbose logging
--help Show this message and exit
GradCAM Command
visflow gradcam [OPTIONS]
Options:
-k, --ckpt-path PATH Path to model checkpoint [required]
-i, --image-path PATH Path to input image [required]
-o, --output-dir PATH Output directory [default: ./output]
-l, --target-layer TEXT Target layer name
-t, --target-class TEXT Target class (index or name)
-c, --colormap TEXT Colormap [default: jet]
--heatmap-only Save only heatmap
--eigen-smooth Apply eigen smoothing
--aug-smooth Apply augmented smoothing
-d, --device TEXT Device (cpu/cuda)
-v, --verbose Enable verbose logging
📋 Configuration Reference
Complete configuration example
logging:
backend: native # Options: native, loguru
loglevel: info # Options: debug, info, warning, error, critical
seed: 42
model:
architecture: resnet18
pretrained: true
num_classes: 2
weights_path: ~ # Optional custom weights
training:
device: cuda
shuffle: true
batch_size: 32
weighted_sampling: false
drop_last: false
epochs: 10
learning_rate: 0.001
momentum: 0.9
weight_decay: 0.0001
optimizer: adam # Options: sgd, adam, adamw
lr_scheduler: ~ # Options: step, cosine, plateau
early_stopping: true
early_stopping_patience: 5
label_smoothing: 0.0
testing:
batch_size: 32
data:
train_dir: ./data/train
val_dir: ./data/val
test_dir: ./data/test
num_workers: 4
pin_memory: false
resize:
size: 224
interpolation: bicubic
antialias: true
normalization:
enabled: true
mean: [0.485, 0.456, 0.406]
std: [0.229, 0.224, 0.225]
augmentation:
horizontal_flip:
enabled: true
p: 0.5
rotation:
enabled: false
degrees: 30
color_jitter:
enabled: false
brightness: 0.2
contrast: 0.2
saturation: 0.2
hue: 0.1
# ... more augmentation options
output:
output_dir: ./output
experiment_name: vision-research
checkpoint_frequency: 10
See the example config file for more details.
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file visflow-1.0.5.tar.gz.
File metadata
- Download URL: visflow-1.0.5.tar.gz
- Upload date:
- Size: 52.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.11.13 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d805ee939748330be42542cb7383ee32f549f2a7185e04a323f8f41f91ccfd37
|
|
| MD5 |
63c36a05b31d24416c61aee0c2313500
|
|
| BLAKE2b-256 |
e17df39386216b2a9f27bfa160fad032b27ae55f19ac30345b599895ce3baee2
|
File details
Details for the file visflow-1.0.5-py3-none-any.whl.
File metadata
- Download URL: visflow-1.0.5-py3-none-any.whl
- Upload date:
- Size: 67.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.1 CPython/3.11.13 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4e0133911b23feed7889072152315b3f8c6f6f5955899394aafdcbeac1c4b0ba
|
|
| MD5 |
cb0f629fc8a64b13b7a175387564cf0a
|
|
| BLAKE2b-256 |
93105620d0e694d54fca546208b16fe3e37db634d59367efede1068c8667106b
|