The dataset contains pictures from 7 different 3D printers.

Each 3D printer has 6-20 prints. A print contains a series of snapshots that are taken from the nozzle camera at a quick succession (about 0.5s apart).

Each print is either a good print, or purposefully set to produce under extrusion. So **all labels for snapshots in the same print will be the same.**

## Risk of overfitting

Because there are very limited number of 3D printers in the data set, it's very easy to build a ML model that overfits: it performs really well on the snapshots produced by one these printers, but fails miserably when we put it in production to make predictions on other printers that were not part of the dataset.

In order to prove the ML model doesn't overfit to the printers in the training set, we withheld 2 printers for test only:

```
021
023
```

Even within the same printer, there is still the risk of overfitting: the model performs well for all the prints in the existing data set, but when a printer does a new print, the model will perform a lot worse. For this reason, we withheld several prints for test only:

```
101/1678343246
101/1678578332
102/1678744931
102/1678764144
103/1678831256
103/1679011090
104/1678452362
104/1679222113
```

## A few ideas to counter overfitting

*Note: This is by no means a definite guide to overcome the overfitting problem that we mentioned earlier. The ideas we listed here may not help at all. Instead of counting on them, you should use them as your inspiration.*

https://papers.nips.cc/paper/2018/file/717d8b3d60d9eea997b35b02b6a4e867-Paper.pdf
https://arxiv.org/abs/2208.07422
https://towardsdatascience.com/deep-domain-adaptation-in-computer-vision-8da398d3167f

## Files

*   **train.csv** - The training data set
*   **test.csv** - The test data set
*   **sample_submission.csv** - A sample submission file in the correct format
*   **images** - Folders for the images. The names of the folders are the printer ids.

## Columns

*   `img_path` - the path of the snapshot
*   `printer_id` - the id of the 3D printer. The data with the same printer_id are guaranteed to be produced by the same printer. You may use this info **in your training** if the ML model you create tend to overfit one or some particular printers. However, since `printer_id` is highly correlated to the ground truth, **you are not allowed to use this info in testing**.
*   `print_id` - the id of the print (see above for the definition of a "print"). The data with the same print_id are guaranteed to be from the same print. You may use this info **in your training** if the ML model you create tend to overfit one or some particular prints. However, since `print_id` is highly correlated to the ground truth, **you are not allowed to use this info in testing**.
*    `has_under_extrusion`
    * 1 - Under extrusion is present in this image.
    * 0 - Under extrusion is **NOT** present in this image. This means this image shows a good print.