As per your requirements, I would suggest that you start with any [simple CNN](https://www.tensorflow.org/tutorials/images/cnn) network.

> CNNs take advantage of the hierarchical pattern in data and assemble
> more complex patterns using smaller and simpler patterns. Therefore,
> on the scale of connectedness and complexity, CNNs are on the lower
> extreme.


Here is a Keras example:

    model = models.Sequential()
    model.add(layers.Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=image_shape))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(64, kernel_size=(3, 3), activation='relu'))
    model.add(layers.MaxPooling2D((2, 2)))
    model.add(layers.Conv2D(64, kernel_size=(3, 3), activation='relu'))
    model.add(layers.Flatten())
    model.add(layers.Dense(64, activation='relu'))
    # output layer
    model.add(layers.Dense(1))

where `image_shape` is the resolution and number of channels of images (e.g. 128x128x3 for RGB images). I also suggest you downscaling the image to a lower resolution. You will also have to crop the images as they must all be the same `image_shape`.

Also take a look at the [MaxPooling2D](https://www.tensorflow.org/api_docs/python/tf/keras/layers/MaxPool2D)  and [BatchNormalization](https://www.tensorflow.org/api_docs/python/tf/keras/layers/BatchNormalization) layers

Since you only have real and CGI images, this becomes a binary classification problem. Therefore you can have a single output (0 - CGI, 1 - real). Such problems can be solved with [BinaryCrossentropy](https://www.tensorflow.org/api_docs/python/tf/keras/losses/BinaryCrossentropy) loss.

    model.compile(loss=losses.BinaryCrossentropy(from_loits=True), optimizer='adam')

Finally, you can fit your model

    history = model.fit(train_images, train_labels, epochs=1000, validation_data=(test_images, test_labels))

Please note that depending on your data, the model can become biased if your dataset is unbalanced. That is, if all of your CGI images have text, and only a small fraction of the real images also have text, they might be misclassified. Therefore, I recommend that you [visualize](https://cs231n.github.io/understanding-cnn/) your model to better understand what it has learned. Here is an [example](https://arxiv.org/pdf/1902.10178.pdf) of such a problem we faced at our university.

There are also more advanced CNN architectures such as [ResNet](https://en.wikipedia.org/wiki/Residual_neural_network), [VGG](https://arxiv.org/abs/1409.1556) or [YOLO](https://arxiv.org/abs/1506.02640). You can also extend your model with time series (i.e. video) using [LSTM](https://en.wikipedia.org/wiki/Long_short-term_memory) or [GRU](https://en.wikipedia.org/wiki/Gated_recurrent_unit) architecture.