# AI Final Project - Báo cáo
###### tags: `COTAI LHP`
Họ và Tên:
Trần Công Thịnh - 11CT2
Vũ Thị Quỳnh Nga - 11CA3
### Mục tiêu của Project
* Phân biệt mặt người thật và mặt người được tạo bởi GANs.
* AI sẽ giải quyết vấn đề trên như thế nào: Các model AI sẽ được train và ensemble để phân biệt mặt người thật/giả một cách chính xác nhất
* Scope of work: Cố gắng đạt độ chính xác cao nhất có thể, tổng kết được các kĩ thuật đã học và tổng hợp được những kĩ thuật mới.
### Chi tiết quá trình thực hiện
- Load và phân tích data:
- Tập train: *8000* tấm, kích thước *256x256*; 2 class: 1 (*fake*) và 0 (*real*), mỗi class *4000* tấm => Balanced dataset
- Tập test: *12000* tấm, kích thước *256x256*
- Chia train/val tỉ lệ 80/20 (*6400 ảnh/1600 ảnh*) (*random_state=42*)
- Tùy chỉnh ảnh để tạo thêm dữ liệu (data augmentation):
- Horizontal/Vertical Shift (dịch chuyển ảnh ngang/dọc): không xuất hiện lỗi
- Rotation (xoay): xoay ảnh xuất hiện lỗi (xem trong file FakeorRealImage.ipynb)
- Brightness (tùy chỉnh độ sáng): với brightness_range = [0.8, 1.1], những tấm hình tối nhất vẫn có thể nhìn được
- Zoom (phóng to, thu nhỏ, ép hình ngang/dọc): xuất hiện lỗi (xem trong file FakeorRealImage.ipynb)
- Preprocessing image: rescale: 1/.255 (SAI. Cần sử dụng hàm preprocessing image riêng cho từng pretrained model)
- Các pretrained model đã thử nghiệm: ResNet152, Xception (bị overfit vì dùng sai phương pháp preprocessing image), EfficientNetB7, InceptionResNetV2 (bị overfit vì dùng sai phương pháp preprocessing image).
- Metrics: accuracy
- Optimizer: Adam
- Learning rate: 1e-5
- EarlyStopping: patience = 10
- ModelCheckpoint: save_best_only = True, save_weights_only = False
- Max Epoch = 50
- Batchsize: 16 (96 nếu sử dụng TPU)
- Thử nghiệm algorithm mới để tùy chỉnh learning_rate: ReduceLROnPlatue để giảm lr mỗi khi val_loss không giảm
- Submit predictions trên tập test, sử dụng các model đúng trên 99% để ensemble (Resnet152, EfficientNetB7)
- Ensemble:
- Strategy: Clipping(0.04, 0.96), Blending(*ensemble_pred* = 0.5*Resnet_pred* + 0.5*EfficientNet_pred*)
- Để tìm ra strategy hiệu quả, chúng em đã thử trên tập val và chọn strategies có log_loss thấp nhất
- Demo: sử dụng thư viện gradio
- Final Result trên tập test: 99,77%
### Implepment Plan
1/5 - 8/5: Load dữ liệu và thử các cách augmentation
8/5 - 15/5: Train các Model và Ensemble
15/5 - 17/5: Viết báo cáo, soạn Powerpoint.
### Kết quả đạt được

### Link các thành phần liên quan
* [Link weight (.hdf5)](https://drive.google.com/drive/folders/1BHIh8p08TQvfreLLZnWOaA_RL8nWNTVa?usp=sharing)
* [Link dataset](https://drive.google.com/drive/folders/1zE4g0rGf27Sjzz3-RTwQ4K4O0khzglxe?usp=sharing)
* [Link Presentation](https://docs.google.com/presentation/d/12o2xQ4W0sg7fAQ4GHayeycuZOKQu6MArjVX_nGfaGbA/edit?usp=sharing)