Camera Model Identification Using Convolutional Neural Networks

Authors

Ilya Kibardin

Student at Moscow Institute of Physics and Technology

Kaggle Master.

Arthur Fattakhov 

Student at Moscow Institute of Physics and Technology

Kaggle Master.

Arthur Kuzin

Head of Computer Vision at X5 Retail Group.

Kaggle Grandmaster.

Ruslan Dautov

Graduate student at Shenzhen University

Vladimir Iglovikov

Computer Vision Engineer at Lyft, Level5

Kaggle Grandmaster

Camera model identification

  • The competition was hosted at Kaggle.com
  • Ten class classification.
  • 582 teams
  • Two months
  • Test set: 2640 512x512 center crops
  • Train set: 2750 images
  • Data in test set could be transformed: Resize, Gamma, Jpeg Compression  

 

Train data

We want State Of The Art approach => Deep Learning

Deep Learning benefits from large amounts of train data => get more data

We need unmanipulated data => filtering

Filtered on:

  1. Metadata. No Photoshop or Lightroom there.
  2. Jpeg Quality. We need 95%+
  3. Image size. We pick only those that match default values. 

Final train and validation sets

Raw data 500Gb

Image Augmentations

We want the model to be robust to:

  1. Jpeg Compression
  2. Gamma Correction
  3. Resize

=> Apply augmentations on the fly

We used:

  1. Jpeg Compression [70, 90]
  2. Gamma Correction [80, 120]
  3. Horizontal Flip
  4. Random Rotate by 90, 180, 270 degrees  

Training

  1. DenseNet 161 / 201
  2. Transfer learning from ImageNet
  3. Optimizer: Adam
  4. Cyclic Learning rate
  5. Loss: categorical cross entropy

Results: Jpeg Compression

In green, parameters range used during training.

Results: Gamma Correction

In green, parameters range used during training.

Results: Rescale

In green, parameters range used during training.

Results: crop size

In green, parameters range used during training.

Summary

  1. For camera model identification transfer learning works really well. Network architecture is not very relevant as long as it is good.
  2. If one can get more relevant labeled data => get it
  3. To make model robust to transformations => apply them during training.
Made with Slides.com