---
# System prepended metadata

title: AI Final Project - Báo cáo
tags: [COTAI LHP]

---

# 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
![](https://i.imgur.com/eZZrfkG.png)


### 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)


