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");
println!("Using 'Balanced' optimization profile...");
let _pipeline = OptimizationPipeline::from_profile(OptimizationProfile::Balanced);
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");
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(())
}