- The insight. A VLM that explains its score leaks the decision path — mine enough traces and the latent tree is recoverable.
- A pipeline over 299K traces. Group into 30 buckets (5 categories × 6 scores), a small LLM extracts the decisive signals, another synthesizes them into a yes/no tree (YAML) injected back into the prompt.
- Engineered the trees. Merged equivalent signals into single axes, pulled exceptions to the front as early gates, and collapsed the fuzzy 2-vs-3 / 4-vs-5 bands into a stable 0 / 1 / 3 / 5 scale.
Product
Product
Three systems I owned end to end — content-safety auto-labeling at Pyler, defect synthesis and steel-plate OCR at Aiv. Each reads the same way: the problem, what was mine, and what moved. One of them started as research and I carried it onto the line myself rather than handing it over.
My contribution
Macro F1 +0.080Throughput 4×+Precision +0.103Recall +0.050299K tracesYAML trees
My contribution
- Disentangled defect from background. Diffusion with masked cross-attention and separate defect/background context vectors, trained with a disentanglement loss so a synthetic defect respects its surroundings.
- Controlled placement at inference. DDIM inversion on a normal image, then sample the defect onto a refined mask region.
- Made it affordable on one GPU. Flash-Attention + DeepSpeed + FP16, wrapped in an MLOps pipeline.
PyTorchDiffusersFlash-AttentionDeepSpeedFP16
My contribution
- Two-stage pipeline on NVIDIA Triton. Detection crops the region of interest; a recognition model reads it and matches the DB.
- Profiled, then cut runtime. Triton logs showed model runtime was the bottleneck, not pre/post — so ONNX → TensorRT, warmup, and CUDA graphs.
- Made it weather-proof. Test-time augmentation (rotation, padding) baked into the pipeline.
TritonTensorRTONNXCUDA GraphsDetection + Recognition