An Unintuitive Take on Data Augmentation for Self-Driving Cars
towardsdatascience.com
towardsdatascience.com
Discriminate "car", "bike", "pedestrian", and "bus", sure. Recognize signs and traffic lights, fine. But "obstruction"? No. That's a geometry problem. If it's not flat road, it's an obstacle. Deep learning is for deciding what kind of obstacle. Because deep learning just isn't that good. It's going to be badly wrong a few percent of the time.
"The car will almost never be on the left side of the road, and the cameras will never flip angles, so training on flipped data forces the network to overgeneralize to situations it will never see." What could possibly go wrong?
If it's a car, you will NOT do whatever is necessary to avoid it (I'm speaking about low speed crashes here). You will prefer a "soft" crash that doing certain super dangerous maneuvers. Like, you will brake and "accept" a soft crash instead of doing a ultra heavy turn to the sidewalk.
That quote jumped off the page for me as well. This sounds like the start of a new blog post: Falsehoods Programmers Believe About Driving
You can throw a few more in there.
- "Pedestrians will use crosswalks"
- "Pedestrians will be walking"
- "Traffic signals will always illuminate one of the three lamps"
- "Traffic signals have three lamps"
- "Lane markings are either white or yellow"
- "Lane markings exist"
- "There are lanes"
Your other comment is right on I think. Relying on DNNs to get near-100%
coverage on possible scenarios is a fool's errand. There's a very long tail of
possible circumstances on the road that no amount of training data is going to
cover. When you're trying to classify your photo library, this is okay. When
making real-time decisions on live input, it's not going to be okay. A more
structured and scrutible system is needed.Until there's a breakthrough in our ability to understand what a NN "thinks", I don't think we should place too much trust in them.
Or, I guess, we can wait and see if the imperfect NNs are doing better than humans in the long run. From what I read, that may be true today only in ideal circumstances (sunny, dry, maintained roads, etc.)
We've already been down this road with Uber; apparently that's not an issue.
https://www.regit.cars/car-news/how-to-pass-horses-on-the-ro...
The field is in flux - alchemic approaches "what if we try something unrelated" might work for unrelated reasons etc.; practical applications that don't spontaneously combust are still some way out there.
Specifically I mean pre-determined saved/downloaded knowledge about the current route being driven, or your specific instantaneous location. Anything from annotated maps, to LIDAR scans.
It seems like the paradox is that stateful algorithms can dramatically improve performance by factoring in data that real drivers benefit from tremendously, namely, familiarity with the road.
However detecting when known state is violated due to some temporal change (road work, accident, natural disaster), and being able to shift back into “general flight” rules, seems in some ways to be even trickier than not using historical state in the first place.
So you need an algorithm that can learn to drive better than a human, without having basically any contextual knowledge of the road it’s driving on. In other words the algorithm needs to be a better driver the first time it ever goes down a road than a human who has driven the road for years.
As a human, familiarity with the road makes a tremendous difference for how I drive it. I generally drive the same roads 80% of the time (I.e. commuting) and knowing what to expect around each bend absolutely changes how I drive the road, even down to where the speed traps will be.
Any ML driving solution that depends on super-fancy stateful pre-scans of the environment seem fundamentally flawed. If you can’t drive a road safely that isn’t pre-scanned in hidef LIDAR for instance, I don’t suppose you can safely drive that road on an arbitrary Monday. Maybe solutions like this were never even attempted, but certainly some amount of statefulness is inherent in some of the commercial solutions out there (Supercruise?)
So what kind of state can you use safely? First thought was basics like speed limit, number of lanes, type of road surface, and your algorithm may have predictions of upcoming changes being constantly weighted against the current assessment of the present state.
So maybe the fundamental rule is no hard-coded state that can’t be reliably detected in real-time to the point where at some point a real-time signal is able to over-ride the programmed state?
But then it seems that inevitably you get to the point where your real-time classifiers are basically running the show anyway so are you back to - what good is a Map anyway?
Would love interested but accessible readings on the subject, or maybe it’s so off base that it’s not really part of the discussion?
Yep, pretty much. Robust real-time perception, for a wide variety of tasks that happen very rarely is one of the key bottlenecks.
Can this be modeled somehow?
You can waste a lot of time thinking about optimizations like that, but at some point it'll occur to you that it's a giant waste of time to optimize for anything but the worst case, where visibility information computed during one frame is completely unusable in the next frame for whatever reason. Otherwise all that your clever frame-coherence hacks can ever do is speed up the rendering of the sorts of frames that weren't going to dominate the player's perception of the game's performance anyway. An engine that renders 95% of frames at 60 FPS and 5% at 43 FPS is going to look pretty terrible, so you're usually better off putting work into the slowest frames rather than wasting time looking for hacks and shortcuts that make the fast frames even faster.
Likewise, yes, you can assume that the car will almost never be traveling backwards on the left side of the road or whatever, so the temptation to take advantage of that is going to be high. But the cases where that assumption breaks down will hurt the user's experience badly, possibly disastrously. So you're better off without relying too much on assumptions that contain phrases like "hardly ever" or "most of the time" or "typically."
My favorite example is a humorous image that went around several years ago, a photo that depicted someone driving in a Miata or similar convertible with the top down. The convertible was driving behind a sewage truck, the kind that has a large tank with a hose attachment to clean out septic tanks.
The sewage truck, in turn, was heading straight for an overpass that obviously had nowhere near enough clearance. An alert human driver would have no problem anticipating what was about to happen, but the oblivious one in the Miata was clearly about to find out the hard way.
Every time I find myself idly wondering if would be fun to work on self-driving cars, I flash back to that image. Then I get back to work on whatever I'm actually supposed to be doing.
Or are these augmentations default-on options in deep learning frameworks?
nobody’s quite sure why anything works, though. hence comparisons to alchemy — we have lots of cool empirical results, and a highly elaborated set of theories and ideas trying to explain what works and what doesn’t, but in fact these theories often fail to make correct predictions. So the only way to make progress is constant blind experimentation.
He improved the performance in normal conditions, but he might have made the performance outside normal catastrophic.
When you can't kill anyone more often than once in 100 million miles, this might not be the right tradeoff.
No comment on why this is the case?