Ambient Barks, IMU Vetoes, and a Fusion Layer: Where the Classifier Is Now
Our IMU bark classifier now has 11 training generations behind it. This post covers what changed between v8 (our last reported state) and v11 (live as of August 5), introduces a real ambient audio clip where the audio classifier was completely fooled but the IMU was not, and explains the fusion strategy that sits on top of both.
Where the IMU Model Stands Now
v11 is trained on 235 clips: 141 confirmed barks and 94 verified negatives, one dog across three collar devices, 17 recording sessions. The same 28 IMU features and RandomForest as before, threshold set at 0.30.
Cross-day LOSO across all 15 held-out sessions:
Model Training set LOSO precision LOSO recall LOSO F1
v8 75 barks, 192 neg 0.36 0.88 0.49
v11 141 barks, 94 neg 0.642 0.929 0.759 (best to date)Precision almost doubled, recall improved, F1 went from 0.49 to 0.759. The dominant driver was bark count: going from 75 to 141 confirmed barks gave the model enough examples to learn what real dog barks look like across different sessions, times of day, and collar fits. The verified-negative pool stayed at 94 because those were already clean; adding noisier negatives would have hurt more than helped.

Forward Validation
Forward validation is the honest number: score v11 on sessions it never saw before it was trained, and record the result before those sessions enter training. First two days after v11 was finalized:
Session Barks Caught Missed Notes
Aug 5 4 3 1 all 4 barks scoreable
Aug 6 5 4 0 1 bark had zero IMU delivered (firmware loss, unscoreable by any model)
7 out of 8 scoreable barks caught on the first two unseen sessions, 87.5% recall. The one missed bark on Aug 5 is a genuine model miss. The one unscoreable bark on Aug 6 is a firmware delivery gap, not a model decision.
The Open Axis: Ambient Attribution
Recall on our dog's own barks is now strong. The harder problem is attribution: when another dog barks nearby, does the system correctly recognize that our dog is not the source?
On the held-out Jul 31 ambient test, the IMU alone correctly rejected 1 of 3 ambient clips. On the Aug 5 ambient session (where we played bark sounds from a phone near the dog to simulate ambient barking), the IMU correctly rejected 11 of 33 clips and wrongly attributed the remaining 22. That is roughly 33% rejection on a controlled ambient test, and it is the known open axis for a single-stage IMU model.
This is the expected behavior given what the IMU can see. When a bark plays nearby, the dog may react: it may look up, shift position, or turn toward the sound. Some of those reactions produce motion patterns that resemble a bark window. The IMU alone cannot distinguish between the dog barking and the dog reacting to a recorded bark played from a phone.

A Real Clip: Audio Said 100%, IMU Said No
Here is an actual clip from the Aug 5 ambient session. We played a bark recording from a phone positioned near the dog. The dog did not bark. This is what the system saw:
Timestamp : 2026-08-05 08:57:26
Audio classifier : label=bark, confidence=0.9992
Audio bark-family probability : 0.3948
IMU model P(bark) : 0.2067 (threshold 0.30)
IMU verdict : is_bark=False
Fusion verdict : fused_is_bark=FalseThe audio classifier was 99.9% confident it was hearing a bark. It was right. There was a bark. It just was not our dog. Our dog was sitting still: the IMU saw almost no motion, P(bark)=0.207 against a threshold of 0.30, and correctly rejected the clip. The fusion layer confirmed that rejection.
Play the clip below. You will hear a clear bark. The system correctly attributed it as not coming from the wearer.
Audio clip cid=1785920246625 — Aug 5 08:57 IST. Phone played a bark recording near the dog. Audio classifier: bark 99.9%. IMU: p_bark=0.207, correctly rejected.
The Fusion Strategy
Audio and IMU fail on different inputs. Audio is precise when sounds are distinctive but cannot see which body is making them. IMU sees the wearer's motion clearly but misses barks made while standing still. Combining them:
fused_is_bark = audio_bark_family_prob >= 0.03
AND imu_p_bark >= 0.30Both signals must agree. An early OR-shaped rule was tested and discarded: it passed ambient barks straight through because the audio floor alone was too easy to cross. The AND-gate requires the audio to detect a bark-family sound (probability >= 0.03) and the IMU to confirm the wearer's body is in a bark-like state (p_bark >= 0.30). For the ambient clip above, audio_bark_family_prob=0.395 cleared the audio floor, but imu_p=0.207 fell below the IMU floor, so the AND condition failed and the clip was correctly marked fused_is_bark=False.
On the Jul 31 forward validation (6 of 6 barks): the fusion layer caught all 6 with no barks lost through the gate.
What Is Next
The ambient attribution problem has a cleaner solution in development: a veto-stage model trained specifically to distinguish our dog's own bark motion from the reaction motion of hearing another dog bark. The two have different IMU signatures if you look at the right features. That work is underway.
The bigger opportunity is breadth: more devices, more dogs, and more environments. All current data comes from one dog. A model trained on one dog will have blind spots it does not know about. Expanding collection to additional dogs and household setups is the next meaningful step for both recall and ambient robustness.
Previous posts in this series
Counting Dog Steps: Offline, One Unified Pipeline for a Collar Pedometer — https://tech.hoomanely.com/counting-dog-steps-offline-one-unified-pipeline-for-a-collar-pedometer/
Is That Our Dog? Using IMU to Verify What the Collar Microphone Hears — https://tech.hoomanely.com/is-that-our-dog-using-imu-to-verify-what-the-collar-microphone-hears/
Beyond Thresholds: Training an ML Bark Classifier on Dog Collar IMU Data — https://tech.hoomanely.com/beyond-thresholds-ml-bark-classifier/
What the Training Runs Taught Us About IMU Bark Detection — https://tech.hoomanely.com/ml-training-audio-imu/