<p>The document <a href="https://github.com/commaai/research/blob/3429b061cf2a15dc37661552775aa983206f7561/DriveSim.md" rel="nofollow noreferrer">DriveSim.md</a> in the repository links to a paper titled <a href="https://arxiv.org/pdf/1608.01230.pdf" rel="nofollow noreferrer">Learning a Driving Simulator</a>. In the paper, they state:</p>

<blockquote>
  <p>Due to the problem complexity we decided to learn video prediction with separable networks. </p>
</blockquote>

<p>They also mention the frame rate they used is 5 Hz.</p>

<p>While that sentence is the only one that addresses your question, and it isn't exactly crystal clear, let's break down the task in question:</p>

<ul>
<li>Grab an image from a camera </li>
<li>Preprocess/downsample/normalize the image pixels</li>
<li>Pass the image through an autoencoder to extract representative feature vector</li>
<li>Pass the output of the autoencoder on to an RNN that will predict proper steering angle</li>
</ul>

<p>The "problem complexity" refers to the fact that they're dealing with a long sequence of large images that are (as they say in the paper) "highly uncorrelated." There are lots of different tasks that are going on, so the network approach is more modular - in addition to allowing them to work in parallel, it also allows scaling up the components without getting bottlenecked by a single piece of hardware reaching its threshold computational abilities. (And just think: this is only the <em>steering</em> aspect. The <a href="https://github.com/commaai/research/blob/master/Logs.md" rel="nofollow noreferrer">Logs.md</a> file lists other components of the vehicle to worry about that aren't addressed by this neural network - gas, brakes, blinkers, acceleration, etc.).</p>

<p>Now let's fast forward to the practical implementation in a self-driving vehicle. There will definitely be more than one neural network operating onboard the vehicle, and each will need to be limited in size - microcomputers or embedded hardware, with limited computational power. So, there's a natural ceiling to how much work one component can do.</p>

<p>Tying all of this together is the fact that cars <em>already</em> operate using a network architecture - a <a href="https://en.wikipedia.org/wiki/CAN_bus" rel="nofollow noreferrer">CAN bus</a> is literally a computer network inside of a vehicle. So, this work simply plans to farm out pieces of an enormously complex task to a number of distributed components (which will be limited in capability) using a network that's already in place.</p>
Comma.ai self-driving car neural network using client/server architecture in TensorFlow, why?
<p>In comma.ai's <a href="https://github.com/commaai/research" rel="nofollow noreferrer">self-driving car software</a> they use a client/server architecture. Two processes are started separately, <code>server.py</code> and <code>train_steering_model.py.</code> </p>

<p><code>server.py</code> sends data to <code>train_steering_model.py</code> via http and sockets. </p>

<p>Why do they use this technique? Isn't this a complicated way of sending data? Isn't this easier to make <code>train_steering_model.py</code> load the data set by it self?</p>