🎤 PRESENTATION SCRIPT
🔷 1. Project Title
Hello sir/madam, my project is titled:
"Facial Emotion Detection Using CNN (Convolutional Neural Network)"
The aim is to build a model that can predict emotions like Happy, Sad, Angry, etc., just by
looking at a face image.
🔷 2. Dataset Used
I used the FER-2013 dataset available on Kaggle.
It contains around 35,000 grayscale facial images, each of size 48x48 pixels, classified into
7 emotions:
Angry, Disgust, Fear, Happy, Sad, Surprise, and Neutral.
I used the kagglehub library to download the dataset.
✅ If they ask:
Why grayscale? → "Color isn’t needed to understand expressions; grayscale also
speeds up training."
Why 48x48? → "It’s the original size from the dataset, and smaller images train
faster."
🔷 3. Preprocessing
I used ImageDataGenerator to load and prepare the dataset:
Images were resized to 48x48
Pixel values were scaled to a 0–1 range
Training data was shuffled, test data was not (to maintain order)
✅ Keywords to mention if asked:
Normalization helps training faster.
One-hot encoding is used for multiple output classes.
🔷 4. CNN Model Architecture
I built a CNN model with 3 main blocks.
Each block contains:
Convolution layer – extracts features like eyes, mouth, etc.
Batch Normalization – stabilizes and speeds up training.
MaxPooling – reduces the size of the image for easier processing.
Dropout – prevents the model from overfitting.
After these blocks, I added:
A Flatten layer to convert features into a list
A Dense layer with 256 neurons
A final output layer with 7 neurons and softmax activation to predict emotion
✅ If asked:
What is CNN? → "CNN is a model that detects patterns in images — it's like the
brain for image data."
Dropout? → "A method to turn off some neurons during training to avoid
memorization."
Softmax? → "It converts the final output into probabilities — so it tells us which
emotion is most likely."
🔷 5. Model Compilation
I compiled the model using:
Adam optimizer (used for fast and stable learning)
Categorical Crossentropy (used when we have more than two classes)
Accuracy as the metric
🔷 6. Model Training
I trained the model for 15 epochs, using both training and validation data.
✅ Epoch meaning?
One epoch means the model goes through the entire dataset once.
✅ How to improve?
Training for more epochs, using more layers, or bigger datasets can improve performance.
🔷 7. Model Accuracy
After training:
Training Accuracy: ~60%
Test Accuracy: ~53%
✅ Why test accuracy is low?
Images are small and grayscale
Some expressions like Fear and Sad look similar
Data might be unbalanced
✅ How to improve?
Use more training data
Use pre-trained models like VGG, ResNet
Apply image augmentation
🔷 8. Model Evaluation
I used .evaluate() function to test the model performance and print both training and test
accuracy.
🔷 9. Accuracy & Loss Graphs
I plotted graphs for:
Training and Validation Accuracy
Training and Validation Loss
These help understand if the model is learning properly or overfitting.
🔷 10. Prediction Function
I created a custom function predict_emotion() to test any face image.
This function:
Loads the image
Resizes and converts it to grayscale
Passes it to the model
Prints the predicted emotion label
✅ Why wrong prediction from internet image?
Internet images may be:
Side faces, poor lighting, multiple faces, or with background
Our model was trained on clean, front-facing, cropped faces.
🔷 11. What I Learned
From this project, I learned:
How to use a real image dataset
How to build and train a CNN model
How to evaluate performance
How to test with external images
🔷 12. Conclusion
This project helped me apply deep learning concepts practically.
Even though the accuracy can be improved, it gave me a strong foundation in:
CNNs
Image preprocessing
Real-world emotion recognition
🔷 13. Thank You