oxigdal-ml 0.1.7

Machine learning capabilities for OxiGDAL - ONNX Runtime integration for geospatial ML workflows
Documentation
//! Model optimization example showing quantization and pruning

use oxigdal_ml::error::Result;
use oxigdal_ml::optimization::{
    OptimizationPipeline, OptimizationProfile, PruningConfig, PruningStrategy, QuantizationConfig,
    QuantizationType,
};
use std::path::PathBuf;

fn main() -> Result<()> {
    tracing_subscriber::fmt::init();

    println!("Model Optimization Example");
    println!("=========================\n");

    let _input_model = PathBuf::from("resnet50_landcover.onnx");
    let _output_model = PathBuf::from("resnet50_landcover_optimized.onnx");

    // Option 1: Use predefined optimization profile
    println!("Using 'Balanced' optimization profile...");
    let _pipeline = OptimizationPipeline::from_profile(OptimizationProfile::Balanced);

    // Option 2: Custom optimization pipeline
    println!("Or configure custom optimization...");
    let _custom_pipeline = OptimizationPipeline {
        quantization: Some(
            QuantizationConfig::builder()
                .quantization_type(QuantizationType::Int8)
                .per_channel(true)
                .build(),
        ),
        pruning: Some(
            PruningConfig::builder()
                .strategy(PruningStrategy::Magnitude)
                .sparsity_target(0.4)
                .build(),
        ),
        weight_sharing: true,
        operator_fusion: true,
        graph_opt_config: None,
    };

    println!("\nOptimization Configuration:");
    println!("  Quantization: INT8 per-channel");
    println!("  Pruning: Magnitude-based (40% sparsity)");
    println!("  Weight sharing: Enabled");
    println!("  Operator fusion: Enabled");

    // Run optimization (simulated)
    // let stats = pipeline.optimize(&input_model, &output_model)?;

    println!("\nOptimization Results (simulated):");
    println!("  Original size: 98.0 MB");
    println!("  Optimized size: 25.4 MB");
    println!("  Compression: 3.9x");
    println!("  Speedup: 2.3x");
    println!("  Accuracy delta: -0.8%");

    Ok(())
}