Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Phân loại hình ảnh đồ ăn bằng mô hình pretrained MobileNet
Hướng Dẫn Đồ ÁnLập Trình AI

Phân loại hình ảnh đồ ăn bằng mô hình pretrained MobileNet

Chia sẻ
Chia sẻ

Phân loại hình ảnh đồ ăn là một bài toán thú vị trong thị giác máy tính, đặc biệt khi dữ liệu có nhiều lớp và hình ảnh có độ đa dạng cao. Với sự hỗ trợ của các mô hình học sâu pretrained như MobileNet, việc xây dựng một hệ thống phân loại ảnh trở nên đơn giản và hiệu quả hơn.

Nếu bạn đã từng xem bài Tạo mô hình phân loại ảnh chó mèo với TensorFlow, bạn sẽ thấy mô hình pretrained giúp tiết kiệm thời gian huấn luyện và đạt độ chính xác cao ngay cả khi dữ liệu không lớn. Trong bài này, chúng ta sẽ thực hành phân loại các món ăn Việt Nam bằng mô hình MobileNet, dựa trên dataset thực tế từ Kaggle.

Mô tả bài toán

Bài toán đặt ra là: Xây dựng một mô hình phân loại hình ảnh đồ ăn Việt Nam thành các danh mục cụ thể (phở, bánh mì, bún bò,…) dựa trên bộ dữ liệu Vietnamese Foods từ Kaggle.

Bộ dữ liệu chứa 10.000 ảnh thuộc nhiều loại món ăn Việt Nam, được phân loại thành các thư mục theo nhãn. Mục tiêu là sử dụng MobileNetV2 đã được huấn luyện trên ImageNet để trích xuất đặc trưng, sau đó tinh chỉnh (fine-tune) để mô hình nhận diện chính xác các món ăn Việt.

Cài đặt và chuẩn bị môi trường

Cài đặt thư viện

pip install tensorflow matplotlib seaborn

Import các thư viện cần thiết

import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.applications import MobileNetV2
from tensorflow.keras import layers, models
import matplotlib.pyplot as plt
import seaborn as sns

Tải dữ liệu

Tải dataset từ Kaggle (sau khi bạn đã tải file từ link):
📥 Vietnamese Foods Dataset

Giải nén thành thư mục có cấu trúc:

vietnamese_foods/
    train/
        pho/
        banh_mi/
        bun_bo/
    validation/
        pho/
        banh_mi/
        bun_bo/

Tiền xử lý dữ liệu

Thiết lập generator để augment dữ liệu

Tạo các generator để đọc ảnh từ thư mục:

train_datagen = ImageDataGenerator(
    rescale=1./255,
    rotation_range=40,
    width_shift_range=0.2,
    height_shift_range=0.2,
    shear_range=0.2,
    zoom_range=0.2,
    horizontal_flip=True
)

val_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
    'vietnamese_foods/train',
    target_size=(224, 224),
    batch_size=32,
    class_mode='categorical'
)

val_generator = val_datagen.flow_from_directory(
    'vietnamese_foods/validation',
    target_size=(224, 224),
    batch_size=32,
    class_mode='categorical'
)

Xây dựng mô hình với MobileNetV2

Tải mô hình pretrained

MobileNetV2 là một kiến trúc mạng nơ-ron được thiết kế tối ưu cho thiết bị di động với số lượng tham số ít nhưng hiệu suất cao. Khi sử dụng pretrained model, chúng ta chỉ cần lấy phần feature extractor (bỏ phần classifier gốc) và xây dựng classifier mới phù hợp với dữ liệu món ăn.

base_model = MobileNetV2(weights='imagenet', include_top=False, input_shape=(224, 224, 3))
base_model.trainable = False  # Freeze các layer gốc

Thêm các lớp phân loại phía trên

Thêm các lớp phân loại phía trên để huấn luyện, sử dụng cho việc phân loại chi tiết cho bài toán món ăn của chúng ta đang xử lý.

model = models.Sequential([
    base_model,
    layers.GlobalAveragePooling2D(),
    layers.Dense(128, activation='relu'),
    layers.Dropout(0.5),
    layers.Dense(train_generator.num_classes, activation='softmax')
])

Compile mô hình

Biên dịch mô hình với trình tối ưu hóa Adam, hàm loss categorical crossentropy và metric accuracy.

model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

Huấn luyện mô hình

Việc huấn luyện mô hình với phần feature extractor frozen giúp tận dụng đặc trưng đã học từ ImageNet mà không làm hỏng các trọng số ban đầu.

history = model.fit(
    train_generator,
    epochs=10,
    validation_data=val_generator
)

Đánh giá mô hình

Sau khi huấn luyện, đánh giá mô hình trên tập validation để xem độ chính xác.

loss, accuracy = model.evaluate(val_generator)
print(f'Độ chính xác trên tập validation: {accuracy:.2f}')

Trực quan hóa kết quả huấn luyện

Biểu đồ giúp quan sát quá trình học của mô hình qua từng epoch.

plt.plot(history.history['accuracy'], label='Training Accuracy')
plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
plt.title('Training and Validation Accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend()
plt.show()

Fine-tuning (tinh chỉnh mô hình)

Sau khi huấn luyện phần classifier, có thể mở khóa các layer của MobileNetV2 để tinh chỉnh với learning rate thấp.

base_model.trainable = True
model.compile(optimizer=tf.keras.optimizers.Adam(1e-5),
              loss='categorical_crossentropy',
              metrics=['accuracy'])

Huấn luyện lại:

history_finetune = model.fit(
    train_generator,
    epochs=5,
    validation_data=val_generator
)

Kết luận

Bài viết đã hướng dẫn chi tiết cách sử dụng mô hình pretrained MobileNetV2 để phân loại hình ảnh các món ăn Việt Nam. Với kỹ thuật transfer learning và fine-tuning, chúng ta có thể đạt độ chính xác cao mà không cần huấn luyện một mạng từ đầu. Phương pháp này không chỉ tiết kiệm thời gian mà còn mang lại kết quả ấn tượng trên các dataset nhỏ.

Bạn có thể mở rộng ứng dụng này để nhận diện món ăn trong thực đơn nhà hàng, hoặc tích hợp vào các app sức khỏe để gợi ý khẩu phần ăn.

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!