YAML Metadata Warning:empty or missing yaml metadata in repo card

Check out the documentation for more information.

Nhận diện chữ số viết tay (MNIST) với PyTorch

Dự án này được xây dựng dựa trên bộ khung nạp dữ liệu của fashion-mnist, nhưng đã được tùy biến lại hoàn toàn để tải, huấn luyện và sử dụng tập dữ liệu chữ số viết tay MNIST gốc.

🛠️ Cấu trúc thư mục

Sau khi đã lược bỏ các thành phần không cần thiết của fashion-mnist, dự án hiện bao gồm các tập tin cốt lõi:

  • data/mnist/: Thư mục chứa tập dữ liệu MNIST gốc (tự động tạo ra khi chạy tải dữ liệu).
  • utils/mnist_reader.py: Script dùng để nạp các file nén .gz của dữ liệu vào mảng Numpy. Đây là hàm gốc giữ lại từ repo fashion-mnist.
  • download_mnist.py: Script Python hỗ trợ tải thẳng 4 file dataset của MNIST từ Google Storage.
  • train_mnist.py: Script huấn luyện mô hình Mạng nơ-ron đa tầng (MLP) đơn giản bằng PyTorch.
  • predict.py: Script chạy ứng dụng Web (nhờ thư viện Gradio) cho phép người dùng dùng chuột vẽ số và AI sẽ phỏng đoán theo thời gian thực.
  • mnist_model.pth: File chứa trọng số (weights) của mô hình sau khi huấn luyện.

🚀 Hướng dẫn cài đặt và chạy máy học

1. Cài đặt các thư viện cần thiết

Dự án không yêu cầu cấu hình rườm rà. Bạn chỉ cần cài đặt các thư viện cơ bản cho Deep Learning và Xử lý ảnh (cài trực tiếp trên Python hoặc Cài qua Virtual Environment):

pip install torch numpy scipy Pillow gradio

2. Tải tập dữ liệu gốc (MNIST Dataset)

Chạy script tự động tải 4 tệp tin dữ liệu nén gốc của Yann LeCun từ hệ thống máy chủ lưu trữ (Google Storage mirror) thay vì tự tải tay.

python download_mnist.py

Dữ liệu sẽ được lưu tự động thành các file .gz trong folder data/mnist.

3. Huấn luyện mô hình (Training)

Sau khi có dữ liệu, chạy script huấn luyện.

python train_mnist.py

Quá trình phía sau:

  • Dữ liệu được nạp lên bằng utils/mnist_reader.py, chuyển kích cỡ lưới numpy array thành tensor (Batch_size, 1, 28, 28).
  • Mô hình kiến trúc MLP đơn giản gồm các lớp (28*28 -> 512 -> 128 -> 10) được xây dựng.
  • Quá trình huấn luyện chạy trong 10 vòng (Epochs) với hàm tối ưu Adam, tốc độ học 0.001. Hệ thống tự động đẩy dữ liệu lên GPU xử lý nếu máy có Card đồ họa (CUDA), giúp thời gian huấn luyện cực nhanh (Chưa tới 30 giây).
  • Mô hình đạt độ chính xác thường trên 98% ở tập test và sinh ra file lưu trữ thành quả: mnist_model.pth.

4. Kiểm thử giao diện Web tương tác (Inference)

Chạy script để bắt đầu một giao diện Web cho phép bạn tự trực tiếp vẽ số vào:

6. Nhận diện Tiếng Việt viết tay (CRNN)

Để chuyển sang dự án nhận diện tiếng Việt (bao cả chữ cái có dấu và câu dài), bạn thực hiện:

  1. Tải dữ liệu thật: python download_vietnamese_real.py
  2. Huấn luyện: python train_vn.py
  3. Chạy App: python predict_vn.py

Mô hình này sử dụng kiến trúc CRNN (CNN + LSTM) chuyên dụng cho văn bản dài, thay vì chỉ nhận diện từng số đơn lẻ như MNIST. Hệ thống sẽ cung cấp một đường link Localhost (vd: http://127.0.0.1:7860/).


🧠 Áp dụng Tiền xử lý cấu trúc nét vẽ (Pre-processing)

Một trong những điểm nhấn quan trọng đã được xử lý ở file predict.py là chống nhiễu loạn nét vẽ.

Vấn đề thường gặp: Dữ liệu MNIST khi huấn luyện vốn không phải là những nét vẽ "thô". Chữ dùng để huấn luyện đã được cắt bỏ hết viền thừa, căn chỉnh tỷ lệ 20x20 nằm vừa vặn trong cái hộp 28x28. Nghiêm trọng nhất là chúng được "Dời trọng tâm" (Center of Mass shift). Do đó, khi bạn tự dùng chuột vẽ một nét vào bảng vẽ Gradio (thường là nét mỏng, lệch góc), mô hình sẽ dự đoán hoàn toàn sai lầm.

Cách khắc phục đã được tích hợp: Khi nhận thông tin từ bảng vẽ, file predict.py làm phẳng mảng hình ảnh và lần lượt thực thi các thuật toán thị giác máy tính:

  1. Bounding Box: Tìm tọa độ biên ngoài cùng của các điểm ảnh bạn đã vẽ để "cắt" sát chữ số ra.
  2. Căn lại tỷ lệ lưới ảnh về chính xác mốc chuẩn 20x20 pixel của MNIST gốc.
  3. Đệm biên viền thêm (Padding) để bơm kích thước ngược lại lấp đầy hộp 28x28 pixel.
  4. Center of Mass Shift (Quan trọng nhất): Dùng tính năng toán học ma trận của scipy để tìm Trọng tâm phân bố khối lượng pixel nét vẽ của bạn và bù trừ sao cho cái rốn của chữ số lúc nào cũng nằm chính xác ở tọa độ trung tâm tuyệt đối [14, 14] của ảnh.

Nhờ tiền xử lý như vậy, khả năng dự đoán nét bút tự vẽ của bạn có thể nhảy vọt từ những lỗi ngớ ngẩn thành chính xác 99% cho mọi số từ 0 - 9 giống đúng như lúc Test Model!

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support