A car mask can pass review and still teach the model to keep the wrong pixels.
The outline looks clean.
The bumper is inside.
The wheels are inside.
Then the trained network holds onto the dark patch under the tires, because the label treated that patch as part of the vehicle's visual neighborhood.
Training stays quiet.
Production gets loud the first time a listing photo drags a strip of the old lot onto a new backdrop.
AutoLensAI turns dealer photography into listing-ready vehicle media.
This installment follows the earlier pieces on segmentation and image provenance, then narrows to one question: how do I teach a matting model that the shadow touching a tire is evidence against foreground rather than a faint version of it?
1.
The failure arrives without an error message Vehicle matting estimates which pixels belong to the vehicle, at finer boundary resolution than segmentation gives.
Tires, rocker panels, glossy showroom floors, and the halo under a lowered front lip are where a pretty binary mask does its damage.
Two cases cause most of it.
A cast shadow can touch rubber and still sit outside the object.
A reflection can match paint color exactly and still belong to the floor.
Both look like they belong to the car in a thumbnail.
Neither belongs to it in geometry.
A binary target has no vocabulary for that distinction.
Every pixel is in or out, so the annotator's only lever is where to put the line.
Push the line outward and shadow becomes vehicle.
Pull it inward and the wheel arch loses its edge.
Neither answer says the thing that matters, which is that some exterior pixels are ordinary background and some are adversarial background sitting one pixel from the object.
The model learns the difference anyway.
It learns it wrong, because nothing in the supervision ever separated the two.
2.
Three states, not two The supervision contract uses three: state meaning training treatment vehicle body, glass, wheels, trim, and visible geometry foreground loss hard negative attached cast shadow, floor reflection, rejected candidates, confirmed exterior background loss unknown unresolved boundary or ambiguous exterior excluded from loss Each state has one producer, which is what makes the target reproducible instead of negotiated.
The commit note that started this was blunt: "Hard negatives by construction: the render alpha separates a car from its own shadow." That is the whole idea.
The renderer already knows which pixels came from vehicle geometry and which came from scene lighting, because it computed both.
Flattening those two facts into a single soft matte discards the most useful contrast in the frame, then asks a network to rediscover it from RGB.
Hard negative mining normally means sweeping a dataset for examples the model gets wrong, scoring them, and resampling.
Here there is nothing to sweep.
The difficulty is a byproduct of how the image was made, so the negatives arrive addressed instead of found.
3.
What counts as negative Shadow and reflection are the obvious members.
The interesting ones are the other cars.
Dealer photography happens on lots.
A frame usually holds more than one vehicle, and a segmentation model asked for vehicles returns all of them, correctly.
Concept segmentation is not wrong when it hands back four masks.
It answered the question it was asked.
AutoLensAI settles that with a small arbitration layer before matting runs.
Candidate masks are ranked by a weighted combination of normalized mask area, monocular depth proximity, and image centrality.
The winner is the hero.
That ranking encodes the rule a photographer follows without ever stating it: the subject is the large, near, centered one.
The arbitration has a second job that is easy to miss.
Once the hero is chosen, every losing candidate becomes known exterior.
Not unknown.
Not skipped.
A sedan parked two spaces over is a vehicle-shaped, vehicle-colored, vehicle-textured region that is definitively not this vehicle, which makes it some of the strongest negative evidence available.
A dataset that marks only shadow as negative leaves that signal on the floor.
The negative region therefore comes from three sources with three derivations: source derived from what it teaches cast shadow separated lighting pass darkness attached to the object is not the object floor reflection separated lighting pass matching paint color is not membership rejected candidates hero arbitration output correct class, wrong instance The unknown band is the only place the pipeline admits it does not know.
4.
Encoding, and why a label has to name its parent The exporter writes one label image plus the identity of the artifact that produced it.
Pixel values carry the training meaning directly: value zone loss mask 255 vehicle foreground target 0 hard negative background target 128 unknown ignored Generation is mechanical: Threshold rendered vehicle alpha into the positive region.
Dilate the alpha boundary by a small radius and mark that band unknown.
Rasterize separated shadow and reflection pixels as negative, except where vehicle alpha already owns the pixel.
Mark rejected hero candidates and confirmed exterior as negative.
Store the result with the matte identifier, the source render, and the review decision.
Step five came from a second commit note: "The label tool could not have told you which matte it labelled, and now it cannot avoid saying." That reads like housekeeping and is not.
A reviewer approving a boundary is approving a specific artifact from a specific render at a specific moment.
Store the approval against a filename and the next re-render silently inherits a judgment made about different pixels.
The decision binds to the matte, or it is a guess wearing a timestamp.
5.
The ignore band is a contract, not a hedge Training reads the three values literally.
Foreground loss applies where the label is
255.
Background loss applies where it is 0, including every hard negative beside tires and lower panels.
Pixels at 128 leave both the numerator and the denominator, in loss and in evaluation.
Unknown is absence with a defined meaning.
It is not a weak vote for background, and treating it as one is the exact bug this design exists to prevent.
The cost is friction, and it lands on every stage that touches the file.
A binary mask previews anywhere, compresses well, and drops into any loader.
A three-zone target asks for more.
The exporter, the review tool, the manifest, the dataset reader, the metric code, and the visualization layer all have to hold the same definition of
128.
Six places, one number.
Two failures show what happens when one of them forgets.
A preview tool that remaps 128 to black shows the reviewer a boundary that does not exist in the file.
Approval then gets recorded against an image nobody looked at.
An evaluator that counts ignored pixels as correct background improves every number while supervision quietly degrades.
Consider what sits in that band.
Mostly boundary, and boundary is mostly hard.
Folding it into background buys a free win on the dashboard and pays for it in the product.
That failure is the worse of the two, because it looks like progress.
6.
The band that hides at training time is the band that acts at inference CarSegNet's refinement stage, NeuralSegJet, uses the same geometry from the other direction.
A learned alpha refiner may modify pixels only inside an explicit uncertainty band.
Outside it, the semantic prior is frozen.
Inside it, a learned gate mixes the prior with the neural decoder's output.
The refiner never holds authority over the whole frame.
The symmetry is the part worth keeping.
At training time the band says do not grade me here, because membership could not be proven.
At inference time the same band says you may edit here, because this is where proof was unavailable.
One region, two roles, both descending from the same admission of uncertainty.
The constraint buys a specific safety property.
An unconstrained refiner asked to sharpen a wheel