<ol>
<li><p>Well, the first choice that you mentioned corresponds to a very challenging task in computer vision community: fine-grained image classification, where you want to classify the subordinates of a base class, say Car! To get more info on <a href="http://arxiv.org/pdf/1411.6447" rel="nofollow">this</a>, you may see this paper. 
According to the literature on image classification, classifying the high-level classes such as car/trucks would be much simpler for CNNs to learn since there may exist more discriminative features. I suggest to follow the second approach, that is classifying all types of cars vs. truck and so on.</p></li>
<li><p>Number of training samples is mainly proportional to the number of parameters, that is if you want to train a shallow model, much less samples are required. That also depends on your decision to fine-tune a pre-trained model or train a network from scratch. When sufficient samples are not available, you have to fine-tune a model on your task. </p></li>
<li><p>Wrestling with over-fitting has been always a problematic issue in machine learning and even CNNs are not free of them. Within the literature, some practical suggestions have been introduced to reduce the occurrence of over-fitting such as dropout layers and data-augmentation procedures.</p></li>
</ol>

<p>May not included in your questions, but it seems that you should follow the fine-tuning procedure, that is initializing the network with pre-computed weights of a model on another task (say ILSVRC 201X) and adapt the weights according to your new task. This procedure is known as transfer learning (and sometimes domain adaptation) in community.</p>
Deep learning Training dataset with Caffe
<p>I am a deep-learning newbie and working on creating a vehicle classifier for images using Caffe  and have a 3-part question:</p>

<ol>
<li><p>Are there any best practices in organizing classes for training a
CNN? i.e. number of classes and number of samples for each class?
For example, would I be better off this way:</p>

<ul>
<li>(a) Vehicles - Car-Sedans/Car-Hatchback/Car-SUV/Truck-18-wheeler/....    (note this could mean several thousand classes), or  </li>
<li>(b) have a    higher level
model that classifies between car/truck/2-wheeler and so    on...
and if car type then query the Car Model to get the car type<br>
(sedan/hatchback etc)</li>
</ul></li>
<li><p>How many training images per class is a typical best practice? I know there are several other variables that affect the accuracy of
the CNN, but what rough number is good to shoot for in each class?
Should it be a function of the number of classes in the model? For
example, if I have many classes in my model, should I provide more
samples per class?</p></li>
<li><p>How do we ensure we are not overfitting to class? Is there way to measure heterogeneity in training samples for a class?</p></li>
</ol>

<p>Thanks in advance.</p>