OK, so...
Inference
You can think of 'inference' as the execution of the 'program' you created by training your neural network. In effect, it is almost the same process as training, without the feedback part. In inference, you show the neural net some data, just like in training, but you don't feed the result back to the network (indeed, you usually can't, since you don't have a label for the data). In effect, you are trusting the neural networks conclusion. This is different from how our brains work, in that we learn dynamically, from our mistakes and successes, but the neural net is static - it only learns via training (there is a lot of research here, and some day we'll have dynamic learning, but it'll require a lot more processing than our AP2 computers are capable of).
Inference is a lot less compute-intensive than training, so it can easily run on our cars.
I suspect our cars are doing a bit 'inference' when we engage autopilot - there *may* be a trained neural net identifying objects such as lane markings and other cars. What we can't know is if a neural net is controlling the car based on that, or if some more traditional system is doing so. I suspect the following, however:
- TACC is not based on a neural network. The acceleration/braking behavior feels much smoother. I suspect TACC is currently based on traditional programming.
- Sign recognition is also not based on a neural network. They're probably running something trivial like OpenCV object detection (traffic signs only come in a small variety, and always tend to face the driver).
- The FSD videos Tesla published bear all the earmarks of neural network object detection, but I can't really draw any conclusions about what is actually doing the car control.
- The autosteer speed limitation is probably based on some framerate limitation - trained neural networks operate at a maximum speed. From what I know about the AP2 computer, it isn't a hardware limitation, so we'll see improvements as the Tesla folks optimize their software.
source: I stayed at a Holiday Inn Express last night.
Those were two excellent entries, but I just want to clarify a couple of things that people get hung up as it relates to Tesla.
For an AP2 car the Tesla Vision software is running on NVidia Hardware, but it's completely separate software from what NVidia demonstrates. Now it might share some fundamentals or various software libraries, but what's valid for one can't be assumed for the other. Tesla might use parts of it or they might not at all. Tesla is also trying to stay away from being so dependent on a specific type of hardware because they eventually plan on making their own chips for it. Similar to what Google did for their TensorFlow chip.
There are also different kinds of Neural Network types to use depending on what you're trying to accomplish. What you described is typical for a deep convolution network where you use forward and backward propagation during the training phase of the network, and then when you deploy the network it only uses forwards propagation. An AP car is doing inference to detect lanes, pedestrians, and to determine whether that's a truck in front of you or a car.
It can't learn from any mistakes by itself, but this is where the fleet learning comes into play. Let's say your driving down the road with AP on, and then it screws up so you take over. This action gets recorded, and if enough people correct it in the same place then the fleet learning can take place. I would call this supervised learning as it likely relies on a human to deal with how to fix what portion of the autopilot that needs to get fixed to not screw up.
Most of what fleet learning isn't about AI, or about deep neural networks. It's really about getting really highly detailed maps. Where you can get it to a point where the car can deal with areas where the lines are covered with snow. In order to do that it needs maps that were learned from the fleet.
The problem with using Fleet learning to correct the Vision software is the lack of feedback. The car doesn't know if it read the speed limit incorrectly, and the driver doesn't have time to tell Tesla if it did.
Self learning neural networks work really well for things like pinball where they know "Hey, I lost". Where they can play the game over and over to the point where they're better than a human.
What I find really awesome is most of this stuff is possible with todays graphics cards. So if you have the right hardware, and a lot of time you can play with this stuff on your own. You don't really need a supercomputer to play around with it. I play around with it using a Ubuntu workstation with an NVidia TitanX for the training, and then I use an NVidia TX1 to do inference. The TX1 can be thought of as the car computer, but it's a lot less powerful than what's in HW2 Tesla. But, I'm just trying to make a rover robot and it's perfect for that.
For training I use NVidia Digits. Lots of people like Caffe, but I like Digits which is essentially a front end to Caffe. It comes with a lot of tutorials and solid support base so I like it.
NVIDIA DIGITS
For inference deployment I've borrowed heavily from this project.
GitHub - dusty-nv/jetson-inference: Guide to deploying deep-learning inference networks and deep vision primitives with TensorRT and Jetson TX1.
For Reinforcement learning I'm trying to wrap my head around this to reuse it for stuff I want my robot to do. Basically this is a self learning type network.
GitHub - dusty-nv/jetson-reinforcement: Deep reinforcement learning libraries for Jetson and online training