Category: Data Science

  • เบญเปˆเบฒเบ™เบˆเบปเบš 5 เบ™เบฒเบ—เบตเบฎเบนเป‰เป€เบฅเบทเปˆเบญเบ‡ เป€เบšเบทเป‰เบญเบ‡เบซเบผเบฑเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡ Model  เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบญเบฒเบเบฒเบ™เป€เบซเบ‡เบปเบฒเบ™เบญเบ™

    เบญเปˆเบฒเบ™เบˆเบปเบš 5 เบ™เบฒเบ—เบตเบฎเบนเป‰เป€เบฅเบทเปˆเบญเบ‡ เป€เบšเบทเป‰เบญเบ‡เบซเบผเบฑเบ‡เบเบฒเบ™เบชเป‰เบฒเบ‡ Model เบเบฒเบ™เปเบˆเป‰เบ‡เป€เบ•เบทเบญเบ™เบญเบฒเบเบฒเบ™เป€เบซเบ‡เบปเบฒเบ™เบญเบ™

    เบขเบฒเบเบชเป‰เบฒเบ‡ Deep Learning Model เป€เบ›เบฑเบ™ Final Year Projects for Computer Science เป„เบงเป‰เบ•เบปเบเปเบ•เปˆเบ‡ CV เบ‡เบฒเบกเป† เปเบ•เปˆเบเบฑเบ‡เบšเปเปˆเบฎเบนเป‰เบˆเบฐเป€เบฅเบตเปˆเบกเปเบ™เบงเปƒเบ”เบ”เบต

    เบšเบฑเบ‡เป€เบญเบตเบ™เปเบญเบ”เบซเบฒเบเปเป€เบฎเบฑเบ” Final Year Projects 2024

    เบŠเบทเปˆเบซเบปเบงเบ‚เปเป‰ “Automatic Driver Drowsiness Warning “เป€เบฎเบฑเบ” score เป„เบงเป‰เบ—เบต 95+

    เบญเบฒเบ”เป€เบ›เบฑเบ™ Projects เบ—เบตเปˆเบเบฑเบ‡เบšเปเปˆ perfect เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™เปเบ™เบงเบ—เบฒเบ‡เปƒเบซเป‰เบกเบทเปƒเปเปˆเบ—เบตเปˆเบขเบฒเบเป€เบเบดเบเบชเป‰เบฒเบ‡เปเบšเบšเบˆเบณเบฅเบญเบ‡ (Model) Deep Learning

    เปเบญเบ”เบˆเบฐเบกเบฒเปเบ™เบฐเบ™เบณเบงเบดเบ—เบตเบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เปเบ•เปˆเป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบˆเบปเบ™เบฎเบญเบ”เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ›เบฐเป€เบกเบตเบ™เปเบšเบšเบˆเบณเบฅเบญเบ‡

    Data Collection

    เบเบฒเบ™เป€เบเบฑเบšเบเปเบฒเบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เปเบฒเบญเบดเบ”เป€เบŠเบดเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เป€เบžเบทเปˆเบญเบ™เปเบฒเป„เบ›เปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบ‚เบฝเบ™ เบ•เบญเบ™เบ•เปเปˆเป„เบ› เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เบ‚เปเป‰เบกเบนเบ™เบˆเบฐเบ–เบทเบเป€เบเบฑเบšเบเปเบฒ เปเบฅเบฐ เบฎเบงเบšเบฎเบงเบกเบกเบฒเป„เบงเบšเปˆเบญเบ™เบ”เบฝเบงเบเบฑเบ™เบˆเบฒเบเปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบญเบทเปˆเบ™.

    • เบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเปเบŸเบฑเบ”เบŸเบญเบกเบฎเบงเบšเบฎเบงเบกเป„เบ”เป‰ 2 เบšเปˆเบญเบ™
      1. Kaggle
      2. Roboflow
    • เบ‚เปเป‰เบกเบนเบ™เป€เบเบฑเบšเบเบณเบ•เบปเบงเบˆเบดเบ‡

    เปเบฒเบเป€เบซเบ”: เปเบ™เบฐเบ™เบณ Data เบกเบฒเปƒเบŠเป‰ Trian Model โ‰ฅ 1, 000 เบซเบผเบท 5, 000 Up เบเบณเบฅเบฑเบ‡เบžเปเบ”เบต เบเบดเปˆเบ‡เบซเบผเบฒเบเบเบดเปˆเบ‡เบ”เบต

    picture: Data Collection

    Data Preparation

    เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบเบฐเบเบฝเบกเบ‚เปเป‰เบกเบนเบ™เปเบกเปˆเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเบเปเบฒเบ™เบปเบ”เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เบ‚เปเป‰เบกเบนเบ™เปƒเบซเป‰เบ–เบทเบเบ•เป‰เบญเบ‡ เปเบฅเบฐ เบชเบฒเบกเบฒเบ”เบ™เปเบฒเป„เบ›เบ›เบฐเบกเบงเบ™เบœเบปเบ™เป„เบ”เป‰. เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบšเปเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบˆเบฐเบ–เบทเบเบฅเบปเบš เบซเบผเบท เปเบเป‰เป„เบ‚เปƒเบซเป‰เบ–เบทเบเบ•เป‰เบญเบ‡เป€เบŠเบดเปˆเบ‡เบกเบตเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเปˆเบญเบเบ”เบฑเปˆเบ‡เบ™เบตเป‰:

    • Data Cleaning

    เปเบญเบ”เปเบ™เบฐเบ™เบณเบ„เบฑเบ”เป€เบฅเบทเบญเบเบ‚เปเป‰เบกเบนเบ™เบฎเบนเบšเบ—เบตเปˆเบˆเบฐเปเบˆเป‰เบ‡เบ—เบตเปˆเบชเบธเบ” เป€เบžเบทเปˆเบญเบ™เบณเป„เบ›เปƒเบŠเป‰เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ–เบฑเบ”เป„เบ›เปƒเบซเป‰เป„เบ”เป‰เบ„เบธเบ™เบ™เบฐเบžเบฒเบš

    picture: Data Cleaning
    • Face Cropping

    1 เบ™เปเบฒเปƒเบŠเป‰เป€เบ•เบฑเบเบ™เบดเบ MTCNN (Multi-task Cascaded Convolutional Networks) เป€เบ›เบฑเบ™เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ‚เบญเบ‡ Deep learning

    2 Microsoft Photos เบ™เบณเปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™ โ€œCropโ€ (manual)

    picture: Face Cropping
    • Labeling

    เปเบšเบšเบˆเบณเบฅเบญเบ‡เบ™เบตเป‰เป€เบ›เบฑเบ™เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰เปเบšเบš Supervised Learning เป€เบžเบฒเบฐเปƒเบŠเป‰เบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™เบฎเบนเบšเปƒเบšเปœเป‰เบฒ เบžเป‰เบญเบกเบเบฑเบšเบ›เป‰เบฒเบเบเปเบฒเบเบฑเบš (Label) เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ‚เบญเบ‡เปƒเบšเปœเป‰เบฒเบ•เบฒเบกเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ—เบตเปˆเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™

    picture: Labeling

    Data Pre Processing

    เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เปเบกเปˆเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ‚เปเป‰เบกเบนเบ™เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเบ™เปเบฒเป€เบญเบปเบฒเบ‚เปเป‰เบกเบนเบ™เป„เบ›เบเบทเบเบชเบญเบ™เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡. เบ‚เปเป‰เบกเบนเบ™เบฎเบนเบšเบˆเบฐเบ–เบทเบเบ•เบฑเป‰เบ‡เบ„เปˆเบฒเบ•เปˆเบฒเบ‡เป† เป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆเบ„เบธเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ•เปˆเบฒเบ‡เป†

    เบ•เบปเบงเบขเปˆเบฒเบ‡: เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบฎเบนเบšเปเบ›เบ‡เบ‚เบฐเปœเบฒเบ”เปƒเบซเป‰เป€เบ—เบปเปˆเบฒเบเบฑเบ™, เบเบฒเบ™เบžเบดเบเบฎเบนเบšเปเบ™เบงเบ™เบญเบ™, เบเบฒเบ™เปเบธเบ™เบฎเบนเบš เปเบฅเบฐ เบญเบทเปˆเบ™เป†. เป€เบžเบทเปˆเบญเบ™เปเบฒเป„เบ›เปƒเบŠเป‰เปƒเบ™เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบขเปˆเบฒเบ‡เป€เปเบฒเบฐเบชเบปเบกเบกเบตเบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ”เบฑเปˆเบ‡เบ™เบตเป‰:

    • Data Split
      • Simple Random Sampling เป€เบฅเบทเบญเบเบชเบธเปˆเบกเบ•เบปเบงเบขเปˆเบฒเบ‡เบˆเบฒเบเบ‚เปเป‰เบกเบนเบ™เบ—เบฑเป‰เบ‡เปเบปเบ” (Population)
      • Hold-out Validation เป€เบžเบทเปˆเบญเปเบšเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบญเบญเบเป€เบ›เบฑเบ™ 2 เบชเปˆเบงเบ™เบ„เบท: เบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™เบเบถเบเบชเบญเบ™ (Training Set) เปเบฅเบฐ เบŠเบธเบ”เบ‚เปเป‰เบกเบนเบ™เบ—เบปเบ”เบชเบญเบš (Test Set) เปƒเบ™เบญเบฑเบ”เบ•เบฒเบชเปˆเบงเบ™ 80% เปเบฅเบฐ 20%. เป€เบžเบทเปˆเบญเปƒเบซเป‰เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบฎเบฝเบ™เบฎเบนเป‰เป„เบ”เป‰เบซเบผเบฒเบเบซเบผเบฒเบ

    table: Data Split

    Source Code:

    import os
    import shutil
    from sklearn.model_selection import train_test_split
    #dataset
    root_dir = r'Path\Dataset\All data'
    classes = ['Awake', 'Drowsy', 'Distracted']
    train_dir = r'Path\Dataset\Datasplit\train'
    test_dir = r'Path\Dataset\Datasplit\test'
    # train/test
    for c in classes:
    os.makedirs(os.path.join(train_dir, c), exist_ok=True)
    os.makedirs(os.path.join(test_dir, c), exist_ok=True)
    # Split
    for c in classes:
    class_path = os.path.join(root_dir, c)
    images = os.listdir(class_path)
    train_imgs, test_imgs = train_test_split(images, test_size=0.2, random_state=42)
    for img in train_imgs:
    shutil.copy(os.path.join(class_path, img), os.path.join(train_dir, c, img))
    for img in test_imgs:
    shutil.copy(os.path.join(class_path, img), os.path.join(test_dir, c, img))
    def count_images(directory):
    print(f"\n๐Ÿ“ เบ‚เปเป‰เบกเบนเบ™เปƒเบ™: {directory}")
    total = 0
    for c in classes:
    path = os.path.join(directory, c)
    num_images = len(os.listdir(path))
    print(f" – {c}: {num_images} เบฎเบนเบš")
    total += num_images
    print(f"เบฅเบงเบก: {total} เบฎเบนเบš")
    # Show data split
    count_images(train_dir)
    count_images(test_dir)
    print("โœ… เปเบšเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบฎเบฝเบšเบฎเป‰เบญเบเปเบฅเป‰เบง: Train 80% / Test 20%")
    view raw datasplit.py hosted with ❤ by GitHub

    output:

    ๐Ÿ“ เบ‚เปเป‰เบกเบนเบ™เปƒเบ™: Path\Dataset\Datasplit\train
    – Awake: 5272 เบฎเบนเบš
    – Drowsy: 5239 เบฎเบนเบš
    – Distracted: 5232 เบฎเบนเบš
    เบฎเบงเบก: 15743 เบฎเบนเบš
    ๐Ÿ“ เบ‚เปเป‰เบกเบนเบ™เปƒเบ™: Path\Dataset\Datasplit\test
    – Awake: 1318 เบฎเบนเบš
    – Drowsy: 1310 เบฎเบนเบš
    – Distracted: 1308 เบฎเบนเบš
    เบฎเบงเบก: 3936 เบฎเบนเบš
    โœ… เปเบšเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบฎเบฝเบšเบฎเป‰เบญเบเปเบฅเป‰เบง: Train 80% / Test 20%
    view raw output.text hosted with ❤ by GitHub
    • Data Augmentation
    picture: Data Augmentation

    source code:

    # Transform for train and validation
    train_transform = transforms.Compose([
    transforms.Resize((IMG_SIZE, IMG_SIZE)),
    transforms.RandomHorizontalFlip(),
    transforms.RandomRotation(10),
    transforms.ColorJitter(brightness=0.3, contrast=0.3),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406],
    [0.229, 0.224, 0.225])
    ])
    val_transform = transforms.Compose([
    transforms.Resize((IMG_SIZE, IMG_SIZE)),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406],
    [0.229, 0.224, 0.225])
    ])

    Modeling

    เบเบฒเบ™เบชเป‰เบฒเบ‡เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เปเบกเปˆเบ™เบเบฒเบ™เบ™เปเบฒเป€เบญเบปเบฒเบ‚เปเป‰เบกเบนเบ™เป„เบ›เบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ”เป‰เบงเบเบงเบตเบ—เบตเบเบฒเบ™ (Algorithm ) เบ‚เบญเบ‡เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡.

    เปเบญเบ”เป€เบฅเบทเบญเบเปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ‚เบญเบ‡ Convolutional Neural Network (CNN) เป€เบฅเบทเบญเบเปƒเบŠเป‰ Architecture: ResNet50 & MobileNetV3-large

    เปเบญเบ”เบˆเบฐเปเบ™เบฐเบ™เบณเบชเป‰เบฒเบ‡เปเบšเบšเบˆเบณเบฅเบญเบ‡ Architecture: ResNet50 เบ”เบฑเปˆเบ‡เบ•เปเปˆเบ™เบตเป‰:

    • Load Model

    source code:

    # Model (ResNet50)
    model = models.resnet50(pretrained=True)
    num_features = model.fc.in_features
    # MODIFY CLASSIFIER for 3 CLASS
    model.fc = nn.Linear(num_features, 3)
    model.to(device)
    view raw ResNet50.py hosted with ❤ by GitHub
    • Training Process

    เบเปˆเบญเบ™เบ™เบณเปเบšเบšเบˆเบณเบฅเบญเบ‡เป„เบ›เบเบทเบเปเบญเบš เบ•เป‰เบญเบ‡เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Hyper parameters เบเปˆเบญเบ™ เป€เบžเบทเปˆเบญเบŠเปˆเบงเบเปƒเบซเป‰เปเบšเบšเบˆเบณเบฅเบญเบ‡เบเบถเบเปเบญเบšเป„เบ”เป‰เป„เบงเบ‚เบถเป‰เบ™, เปเปเป‰เบ™เบเปเบฒเบ‚เบถเป‰เบ™, เบชเบฐเบ–เบฝเบ™ เปเบฅเบฐ เบ›เป‰เบญเบ‡เบเบฑเบ™ Over fitting

    เบเบฒเบ™เบ•เบฑเป‰เบ‡เบ„เปˆเบฒ Hyper parameters

    Hyperparametersเบ„เปˆเบฒเบ„เบณเบญเบฐเบ—เบดเบšเบฒเบ
    BATCH_SIZE64เบˆเปเบฒเบ™เบงเบ™เบฎเบนเบšเบ•เปเปˆเบŠเบธเบ”เปƒเบ™เบเบฒเบ™เบเบถเบเบชเบญเบ™
    LR (Learning Rate)3e-5เบ„เบงเบฒเบกเป„เบงเปƒเบ™เบเบฒเบ™เบฎเบฝเบ™เบฎเบนเป‰
    NUM_EPOCHS40เบˆเปเบฒเบ™เบงเบ™เบฎเบญเบšเบเบฒเบ™เบเบถเบเบชเบญเบ™เบชเบนเบ‡เบชเบธเบ”
    PATIENCE_EARLYSTOP7เบขเบธเบ”เบเบถเบเบชเบญเบ™เบซเบฒเบเบšเปเปˆเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ•เบดเบ”เบ•เปเปˆ 7 เบฎเบญเบš
    criterionCrossEntropylossเบŸเบฑเบ‡เบŠเบฑเบ™เบงเบฑเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”
    optimizerAdamเบงเบดเบ—เบตเบ›เบฑเบšเบ„เปˆเบฒ Parameter
    schedulerReduceLROnPlateauเบฅเบปเบ” Learning rate เป€เบกเบทเปˆเบญ val loss เบšเปเปˆเบฅเบปเบ”เบฅเบปเบ‡
    table: Hyperparameters

    source code:

    # CONFIG
    BATCH_SIZE = 64
    LR = 3e-5
    NUM_EPOCHS = 40
    PATIENCE_EARLYSTOP = 7
    IMG_SIZE = 224
    # Optimizer, Loss, Scheduler
    optimizer = torch.optim.Adam(model.parameters(), lr=LR)
    criterion = nn.CrossEntropyLoss()
    scheduler = ReduceLROnPlateau(optimizer, mode='min', factor=0.5, patience=2, verbose=True)
    view raw CONFIG.py hosted with ❤ by GitHub
    • Training
    # Training Loop
    best_model_wts = copy.deepcopy(model.state_dict())
    best_acc = 0.0
    train_loss_history, val_loss_history = [], []
    train_acc_history, val_acc_history = [], []
    early_stop_counter = 0
    for epoch in range(NUM_EPOCHS):
    print(f"\n๐ŸŒŸ Epoch {epoch+1}/{NUM_EPOCHS}")
    model.train()
    train_loss, train_correct, total = 0.0, 0, 0
    for inputs, labels in tqdm(train_loader, desc=f"Training {epoch+1}"):
    inputs, labels = inputs.to(device), labels.to(device)
    optimizer.zero_grad()
    outputs = model(inputs)
    loss = criterion(outputs, labels)
    loss.backward()
    optimizer.step()
    train_loss += loss.item() * inputs.size(0)
    _, preds = torch.max(outputs, 1)
    train_correct += torch.sum(preds == labels.data).item()
    total += labels.size(0)
    epoch_train_loss = train_loss / total
    epoch_train_acc = train_correct / total
    # Validation
    model.eval()
    val_loss, val_correct, val_total = 0.0, 0, 0
    with torch.no_grad():
    for inputs, labels in val_loader:
    inputs, labels = inputs.to(device), labels.to(device)
    outputs = model(inputs)
    loss = criterion(outputs, labels)
    val_loss += loss.item() * inputs.size(0)
    _, preds = torch.max(outputs, 1)
    val_correct += torch.sum(preds == labels.data).item()
    val_total += labels.size(0)
    epoch_val_loss = val_loss / val_total
    epoch_val_acc = val_correct / val_total
    # Logs
    train_loss_history.append(epoch_train_loss)
    val_loss_history.append(epoch_val_loss)
    train_acc_history.append(epoch_train_acc)
    val_acc_history.append(epoch_val_acc)
    scheduler.step(epoch_val_loss)
    print(f"โœ… Train Loss: {epoch_train_loss:.4f} | Acc: {epoch_train_acc:.4f}")
    print(f"๐Ÿงช Val Loss: {epoch_val_loss:.4f} | Acc: {epoch_val_acc:.4f}")
    # Early stopping
    if epoch_val_acc > best_acc:
    best_acc = epoch_val_acc
    best_model_wts = copy.deepcopy(model.state_dict())
    print("๐Ÿ’พ Best model updated.")
    early_stop_counter = 0
    else:
    early_stop_counter += 1
    print(f"โš ๏ธ EarlyStopping Trigger: {early_stop_counter}/{PATIENCE_EARLYSTOP}")
    if early_stop_counter >= PATIENCE_EARLYSTOP:
    print("โ›” EarlyStopping activated.")
    break
    # Save Best Model
    model.load_state_dict(best_model_wts)
    torch.save(model.state_dict(), "ResNet50.pth")
    print("๐ŸŽ‰ Model saved successfully: ResNet50.pth")
    view raw Training.py hosted with ❤ by GitHub

    Evaluation

    Accuracy: เบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ—เบตเปˆเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เปƒเบ™เบเบฒเบ™เบเบทเบเบชเบญเบ™เบ„เบฑเป‰เบ‡เบ—เบณเบญเบดเบ”เปเบกเปˆเบ™ 0.958 เบ„เบดเบ”เป€เบ›เบฑเบ™ 95.8%  เปเบฅเบฐ เบฎเบญเบ”เบ„เบฑเป‰เบ‡เบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™ 0.999 เบ„เบดเบ”เป€เบ›เบฑเบ™ 99.9%. เปเบฅเบฐ เบเบฒเบ™เบเบงเบ”เบชเบญเบšเปƒเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™ 0.989 เบ„เบดเบ”เป€เบ›เบฑเบ™ 98.9%  เปเบฅเบฐ เบ„เบฑเป‰เบ‡เบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™ 0.992เบ„เบดเบ”เป€เบ›เบฑเบ™ 99.2%.

    Loss: เบ„เปˆเบฒเบเบฒเบ™เบชเบนเบ™เป€เบชเบเบ‚เบญเบ‡เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เปƒเบ™เบเบฒเบ™เบเบถเบเบชเบญเบ™ เปเบฅเบฐ เบเบงเบ”เบชเบญเบšเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เปเบšเบšเบˆเบณเบฅเบญเบ‡ เบ„เปˆเบฒเบ„เบงเบฒเบกเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡เปเบšเบšเบˆเปเบฒเบฅเบญเบ‡เบ—เบตเปˆเป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เปƒเบ™เบเบฒเบ™เบเบทเบเบชเบญเบ™เบ„เบฑเป‰เบ‡เบ—เบณเบญเบดเบ”เปเบกเปˆเบ™ 0.123 เบ„เบดเบ”เป€เบ›เบฑเบ™ 12.3% เปเบฅเบฐ เบฎเบญเบ”เบ„เบฑเป‰เบ‡เบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™ 0.004 เบ„เบดเบ”เป€เบ›เบฑเบ™ 0.04% เปเบฅเบฐ เบ„เปˆเบฒเบชเบนเบ™เป€เบชเบเบเบฒเบ™เบเบงเบ”เบชเบญเบšเปƒเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™ 0.04 เบ„เบดเบ”เป€เบ›เบฑเบ™ 0.4% เปเบฅเบฐ เบ„เบฑเป‰เบ‡เบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™ 0.043 เบ„เบดเบ”เป€เบ›เบฑเบ™ 0.43%

    • Confusion Matrix

    เบ™เปเบฒเปƒเบŠเป‰เบ‚เปเป‰เบกเบนเบ™เบŠเบธเบ”เบ—เบปเบ”เบชเบญเบš 20% เบˆเปเบฒเบ™เบงเบ™ 3, 936 เบฎเบนเบš เปเบฅเบฐ เบชเบฐเปเบ”เบ‡เบœเบปเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ—เบปเบ”เบชเบญเบšเบ”เป‰เบงเบ Confusion Matrix

    เป€เบŠเบดเปˆเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ Confusion Matrix เบˆเบฐเป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒ Model เบกเบตเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เปเบเบเปเบเบฐเปเบ•เปˆเบฅเบฐ Class เป„เบ”เป‰เบขเปˆเบฒเบ‡เปเปเป‰เบ™เบเบณ

    เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบชเปˆเบงเบ™เปƒเบซเบเปˆเป€เบเบตเบ”เบฅเบฐเบซเบงเปˆเบฒเบ‡ Class Awake เปเบฅเบฐ Drowsy เป€เบŠเบดเปˆเบ‡เบญเบฒเบ”เป€เบเบตเบ”เบˆเบฒเบเบ„เบงเบฒเบกเปƒเบเป‰เบ„เบฝเบ‡เบ‚เบญเบ‡เบฅเบฑเบเบชเบฐเบ™เบฐเบฎเบนเบšเปƒเบ™เบšเบฒเบ‡เบเปเบฅเบฐเบ™เบตเบฅเบฐเบซเบงเปˆเบฒเบ‡ Class Distracted เปเบšเบšเบˆเบณเบฅเบญเบ‡เบชเบฒเบกเบฒเบ”เปเบเบเปเบเบฐเป„เบ”เป‰เบ–เบทเบถเบเบ•เป‰เบญเบ‡ 100% เบšเปเปˆเบกเบตเบเบฒเบ™เบ„เบฒเบ”เบ„เบฐเป€เบ™เบœเบดเบ”เบžเบฒเบ”

    picture: Confusion Matrix

    เบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบซเบฑเบ™เบงเปˆเบฒเบ„เปˆเบฒเปเบ•เปˆเบฅเบฐ Class เบกเบตเบ„เบงเบฒเบกเปเปเป‰เบ™เบเบณเบชเบนเบ‡

    เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ Distracted เป„เบ”เป‰ F1-Score เป€เบ•เบฑเบก 1.00

    เบชเปˆเบงเบ™ Awake เปเบฅเบฐ Drowsy เป„เบ”เป‰เบฎเบญเบ” 0.99

    เบชเบฐเบซเบผเบธเบšเป‚เบ”เบเบฅเบงเบก เบ„เปˆเบฒMacro เปเบฅเบฐ Weighted F1-Score เป„เบ”เป‰ 0.99 เบชเบฐเปเบ”เบ‡เบงเปˆเบฒเปเบšเบšเบˆเบณเบฅเบญเบ‡เบชเบฒเบกเบฒเบ”เบˆเบณเปเบ™เบเบ—เบธเบ Class เป„เบ”เป‰เบขเปˆเบฒเบ‡เปเปเป‰เบ™เบเบณเบซเบผเบฒเบ

    picture: Classification Report

    Source code full: Final-Year-Projects-for-Computer-Science

    Reference

    Prof.Nandish A C, 2Aayusha Kumari, 3Amisha Rashminath, 4Likhith R J(May,2024) Driver Drowsiness Detection Using Deep Learning,

    เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบฒ: https://www.jetir.org/papers/JETIRGG06093.pdf

    Wirth, R., & Hipp, J. (2000, April). CRISP-DM: Towards a standard process model for data mining. In Proceedings of the 4th international conference on the practical applications of knowledge discovery and data mining (Vol. 1, pp. 29-39).

     เปเบซเบผเปˆเบ‡เบ—เบตเปˆเบกเบฒ:  

    John Wiley & Sons. (2019). Python for data science for dummies.

    Cochran, W. G. (1977). Sampling Techniques (3rd ed.). New York: John Wiley & Sons.

    Lohr, S. L. (2019). Sampling: Design and Analysis (2nd ed.).Boca Raton, FL:Chapman & Hall/CRC.

    Thompson, S. K. (2012). Sampling(3rd ed.). Hoboken, NJ: Wiley.

    Chollet, F. (2018). Deep Learning with Python (Single-label classification). Manning Publications.

    Giuseppe G. A. Celano. (2021). A ResNet-50-based Convolutional Neural Network Model for Language ID Identification from Speech Recordings.

    Gรฉron, A. (2019). Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow(2nd ed.). Oโ€™Reilly Media

    Harikrishnan N B (2019) Confusion Matrix, Accuracy, Precision, Recall, F1 Score