About

I'm an Edge AI engineer at VinRobotics in Hanoi, where I do research with Dr. An Thai Le, and a founding member of the core team at VoriaSolutions. I study machine learning on the hardware it actually runs on: small sensors, embedded processors, and analog and neuromorphic accelerators. Two questions run through the work: how to keep a model accurate when its hardware is noisy or drifting, and how to measure it so the result holds outside the lab.

The engineering asks the same of real devices. I write firmware for bedside monitors and battery-powered sensors, real-time control over EtherCAT, and inference on embedded Linux, and I check the result on the board itself: timing, power draw, and recovery when something breaks.

If you work on learning with unconventional hardware, embedded systems or evaluating robot perception, I'd be glad to hear from you.

The path so far

Each stage moved one layer closer to where a model runs.

  1. Undergraduate research

    One sensor, small models

    Can one ECG lead and a tiny model screen for sleep apnea?

    With Dr. Cuong Do and Dr. Hieu Pham, I worked on sleep-apnea detection from a single ECG lead, published in IEEE JBHI. Giving small models the whole waveform instead of just its R-peaks made them more accurate without making them bigger: on small hardware, a better input beats a bigger model.

  2. Robot builds

    Robots, from the wiring up

    What does real hardware do to an algorithm?

    I then built robots end to end: a Stewart-platform neck, a vision-guided arm, a life-sized humanoid, and, as an intern, firmware for a 24-DOF animatronic head. Power, timing and electrical noise decided whether an algorithm worked at all.

  3. Engineering, now

    Models and firmware on real boards

    What does it take for a device to run on its own?

    At VinRobotics I brought up embedded Linux on NXP i.MX93 and Qualcomm RB8 boards and ran a robot's control policy on them. At VoriaSolutions I write firmware for devices that have to work unattended: a gateway for ICU monitors, a battery-powered sensor node, and an EtherCAT master for real-time control.

  4. Research, now

    Learning on imperfect hardware

    Can learning survive the chip, and can we trust the score?

    Deployed analog accelerators drift and usually run forward passes only, so I study how to recover them without gradients and what choosing the step size costs. Event cameras suit fast collision warning, so I test whether its benchmarks reward detecting a collision or shortcuts such as clip length.

News

Research

Current work

Method diagram: noise scale and radius measured on donor devices are pooled into a step scale, which selects the largest eligible learning rate from a grid before two-point zeroth-order updates recover the target device with noisy keep-or-revert validation

Under review

Budget-Aware Step Selection for Forward-Only Recovery of Analog Accelerators

Duong V. Nguyen and An T. Le

Analog accelerators drift. Recovering one with forward-only optimization spends device queries twice: on the parameter updates, and on choosing those updates. In a controlled testbed, single-step descent boundaries exceed whole-run failure boundaries by 27.2× in geometric mean, so early progress is a poor guide to a full recovery run. We derive a finite-horizon bound on noise-driven displacement and use its step scale to pick a rate from donor devices without searching on the target. On 36 held-out simulated crossbar targets, a selector with a fine rate grid and condition-matched donors uses 93.62% fewer operational forward evaluations than target search at a 0.399 percentage-point accuracy cost, and a transferred fixed setting is more accurate at lower cost still. The case is for reporting accuracy and configuration cost together.

Paper, code and project page will be linked after review.

Scenario overview (1:20, no sound): collision and near-miss encounters across nine scenario types, with the event camera beside the overhead view.

Under review

Beyond Collision AUC: A Paired CARLA Benchmark for Event-Based Collision Warning

Duong V. Nguyen*, Minh Vu*, and An T. Le *equal contribution

Collision-warning detectors are usually scored by collision AUC, yet on an existing event-camera corpus, episode duration alone reaches AUC 0.980. We build 440 collision/near-miss pairs in CARLA, covering stationary and moving vehicles and pedestrians, in which each pair shares scene and camera conditions, so a detector must separate contact from a matched non-contact encounter. Spiking and temporal convolutional networks reach test AUCs of 0.60 and 0.57 but matched-pair concordance of 69.8% and 78.6%, so the two measures rank them in opposite orders. Thresholds set for at least 90% collision recall still raise frequent near-miss alarms.

Paper, benchmark and code will be linked after review.

Earlier work

MPCNN overview: the ECG signal is filtered, segmented and denoised; subsequences starting at each P peak are compared by Euclidean distance, and the minimum, maximum and mean of each distance column feed lightweight CNNs (SE-MSCNN, modified LeNet-5, BAFNet) for per-segment and per-recording classification

Published 2024

MPCNN: A Novel Matrix Profile Approach for CNN-Based Single Lead Sleep Apnea in Classification Problem

Hieu X. Nguyen, Duong V. Nguyen, Hieu H. Pham, and Cuong D. Do

IEEE Journal of Biomedical and Health Informatics, vol. 28, no. 8, 2024

Single-lead ECG detectors for sleep apnea usually work from R-peaks and RR intervals, which leave out most of the PQRST waveform. MPCNN borrows from Matrix Profile algorithms: it builds Euclidean distance profiles between fixed-length subsequences of the signal and feeds their minimum, maximum and mean (MinDP, MaxDP, MeanDP) to lightweight CNNs. Per-segment accuracy reaches 92.11% on PhysioNet Apnea-ECG (70 overnight recordings) and 81.25% on UCDDB (25). On PhysioNet, per-recording accuracy is 100% with a correlation of 0.989, which points toward home sleep apnea testing on IoT devices.

Each subsequence starts at a P peak, and windows that span the whole beat, from the P peak to the end of the ST segment, work best. The profiles also slot into existing lightweight detectors, BAFNet (0.29 MB) and SE-MSCNN (0.16 MB), in place of their R-peak and RR-interval inputs, and improve them with the architectures unchanged: the gain comes from what the model sees, not from a bigger model.

Experience

Work

VinRobotics Edge AI Engineer

Research

  • Research end to end, from question and protocol to experiments, statistics and writing; first author of both papers under review.
  • Experiment software for simulated analog, photonic and spiking accelerators (AIHWKit, pytorch-onn, Rockpool), and an event-camera data pipeline built on CARLA.
  • Evaluation built to be audited: paired tests, grouped bootstrap and multiple-comparison correction, pinned environments, and provenance that traces every reported number to its configuration, data and script.

Edge AI on NXP i.MX93

  • Board bring-up on embedded Linux: device trees, a MIPI camera driver ported into NXP's kernel, and a real-time image built with Yocto.
  • A path from PyTorch to the board: NCNN packaged with a cross-compilation SDK, and a robot control policy that runs in about a third of a millisecond on one Cortex-A55 core.

Edge AI on Qualcomm RB8

  • Brought up the board with Qualcomm Linux, built with Yocto, and with Ubuntu; set up cross-compilation and deployment; and benchmarked a humanoid robot's control policy on its CPU for inference time, CPU load and latency.

VoriaSolutions Founding member, core team

Bedside-monitor gateway in Rust

  • Embedded Rust firmware that connects ICU devices to a central dashboard for a public hospital's Smart-ICU pilot.
  • Medical-device protocols (Philips IntelliVue, HL7 v2 over MLLP, Prismaflex), BLE provisioning and over-the-air updates.

Low-power LoRaWAN sensor node

  • Zephyr firmware for a battery-powered environmental sensor: deep sleep, wake-on-motion, remote commands and firmware updates over LoRaWAN.
  • Power profiling that traced a wake-up current spike to the sensor board, fixed in firmware.

EtherCAT master in Rust

  • A no_std Rust EtherCAT master for Zephyr on STM32: slave state management, CoE mailbox transfers, and a hardware-independent core tested on the host. It brings slaves to the Operational state on hardware.

Networking on microcontrollers

  • TCP/IP from the wire up: W5500 Ethernet bring-up in no_std Rust, TCP and UDP servers on Zephyr, and MQTT over TLS to AWS IoT Core.

Internships and research

VinRobotics Intern

Real-time firmware for a humanoid robot head; see the 24-DOF animatronic head.

Augmented Reality Interactive Solution (ARIS)

Augmented reality for medical education; see AR anatomy.

VinUni-Illinois Smart Health Center Undergraduate researcher

Single-lead ECG methods for sleep apnea and cardiovascular screening, supervised by Dr. Cuong Do and Dr. Hieu Pham; co-authored MPCNN.

Education

VinUniversity B.Sc. Electrical and Computer Engineering

College of Engineering & Computer Science. English-medium program validated by Cornell University.

Phan Boi Chau High School for the Gifted Physics specialized class

Awards

  • Top 15, Qualcomm Vietnam Innovation Challenge, with the VoriaSolutions team
  • Dean's List, VinUniversity
  • Finalist, Eureka Scientific Research Student Award
  • Third Prize, provincial Physics merit competition

Projects

Embedded and edge AI

Model diagram: beat intervals, motion and heart-rate variability from a wrist sensor pass through four depthwise-separable convolution blocks, global average pooling and dense layers to a risk score; a recurrent head was removed because it could not be exported to INT8.

Wearable rhythm-risk model

A small model that flags risky heart-rhythm patterns from a wrist sensor, built at VoriaSolutions for an edge health hub. When the recurrent head would not survive INT8 export, I replaced it with convolutions, and the smaller model also did better on a held-out day. It taught me to design a model around the toolchain that has to compile it.

Read more

Driver diagram: pixels go from an LVGL frame through GDMA and a 40 MHz QSPI bus to the CO5300 AMOLED panel; the driver moved from bit-banged GPIO to hardware QSPI to QSPI with DMA.

AMOLED watch display driver

Part of porting the open-source ZSWatch to an ESP32-S3 AMOLED board at VoriaSolutions. I took the panel driver from bit-banged GPIO to hardware QSPI with DMA and interrupt completion, which made redraws more than twice as fast and left the CPU free during transfers. I also added the board and its production test.

Read more

Robots and interactive systems

Stewart platform neck

A six-servo Stewart platform built as a neck for the Unitree G1 humanoid. It turns the head to follow a face at 30 FPS with 48.6 ms end-to-end latency. In a team of three, I designed the electrical system, a 6 V, 10 A servo supply with PCA9685 PWM from an Arduino Uno, and co-developed the tracking and control code. Decoupling, separate power and signal wiring and split grounds cut PWM jitter from ±8 µs to ±1.5 µs and stopped resets under 7 A current peaks.

4-DOF arm with computer vision

A pick-and-place arm that sorts red, blue and white blocks seen by a 1080p, 60 FPS camera, with all vision running on an NVIDIA Jetson Nano and an Arduino Uno driving the servos. In a team of three, I built the camera calibration and the pixel-to-world transform. Detection IoU reached 0.92–0.96, and pick-and-place succeeded in 77–84% of trials.

24-DOF animatronic head

Real-time firmware on Teensy 4.1 and Zephyr RTOS that drives 24 degrees of freedom for lip sync, eye motion and facial expressions, commanded from ROS 2. I also tracked down motion conflicts and latency and noise problems with signal-level testing.

InMoovXtra

A life-sized humanoid robot built on the open-source InMoov platform, extended with vision sensing and LLM-based interaction.

AR anatomy for medical training

A Unity/Vuforia augmented-reality app that places 3D anatomical models, such as a colour-coded skull and facial muscle layers, in front of medical students.