2
$\begingroup$

I'm trying to train an object detection model to detect some of playing cards for example it will detect 1,2,3, king, queen and jack

and i'm making a class of not and i have put examples of other cards such as 4,5,6,7,8,9 but for me it doesn't make sense to make this additional class.

so how to solve the problem of detecting othr kind of cards as an objects should i make this class or remove it and keep only the required classes ?

$\endgroup$
2
$\begingroup$

In your case you have 3 options for training your model:

  1. Make a class for each card number, so 13 classes.
  2. Make a class for 1, 2, 3, king, queen, jack and one bucket class for "other", so 7 classes.
  3. Make a class for 1, 2, 3, king, queen, and jack, so 6 classes. And whenever the model is not confident of any, assume it is "other".

Best would be option 1.

Option 1 would be the more difficult to get data for because you need labelled data for more classes, but that should not be a problem because it seems you already have it.

Option 1 allows your model to classify all classes, and let's you achieve the same as option 2 with post processing (i.e. if predicted_class in [4,5,6,7,8,9] then "other").

Option 2 could work, but the numbers in the "other" class are just as different from each other as to 1, 2 and 3. To be able to make this distinction, the first intuition is that a "larger" model would be needed in comparison to option 1. This approach would be handy if the "other" class is not similar to the other classes. For example, a model that classifies sports cars, family cars, clown cars and "other vehicles" (i.e. tractors, bikes and trucks).

Option 3 is best left for tasks that the "other" class is not defined, or too large to model. For example, a model that classifies if the playing cards are Uno, or Poker, or Blitz, or "any other game" card. In this case, there are too many "other" types of game cards for you to label and model.

$\endgroup$
6
  • $\begingroup$ thank you for the answer, my problem is similar to the cards playing but the first number is not available, so by doing option 2, do i need the same number of data for class 'other ' or it should contain more examples than other classes ? for example 200 images for each class and 400 for other class ? $\endgroup$ – Mustafa Azzurri Oct 23 '20 at 7:05
  • $\begingroup$ @MustafaAzzurri do you know how many classes you are grouping into the "other" class? $\endgroup$ – Bruno Lubascher Oct 27 '20 at 6:43
  • $\begingroup$ It's more similar to option 3 when there are too much other types of cards $\endgroup$ – Mustafa Azzurri Oct 27 '20 at 7:19
  • $\begingroup$ If it like option 3, then do not create an "other" class. When ever your model is not confident of any class, then assume it is the other class. Do not use softmax in the end of your model. Softmax ensures that the class probabilities add up to 1, even if all the individual class probabilities are small. E.g. model output = [0.1, 0.05, 0.05] you can assume that it is the other class because of low probs. If you take softmax, this turns into output=[0.4, 0.2, 0.2] then the 0.4 seems high, so do not do this. $\endgroup$ – Bruno Lubascher Oct 27 '20 at 9:44
  • $\begingroup$ Yes that's true, in this case could I use sigmoid instead ? $\endgroup$ – Mustafa Azzurri Oct 27 '20 at 10:24

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.