Pipeline AI phân loại nhóm thực phẩm và đánh giá độ tươi.
ảnh → router → nhóm thực phẩm → freshness expert → FRESH / HALF-FRESH / SPOILED
Router hiện có các nhóm:
cu, gia_suc, qua, rau
gia_cam chỉ hoạt động sau khi có data/train/gia_cam, data/valid/gia_cam và checkpoint expert tương ứng.
PowerShell tại thư mục vnecheck:
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txtKiểm tra CUDA:
python -c "import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'CPU')"data/
train/
cu/
FRESH/
HALF-FRESH/
SPOILED/
gia_suc/
gia_cam/
qua/
rau/
valid/
... cùng cấu trúc với train ...
Mỗi ảnh chỉ xuất hiện trong một split. Không để ảnh gốc hoặc augmentation của cùng ảnh trong cả train và valid.
Train router:
python train.py --epochs 15 --batch-size 8 --workers 0 routerTrain freshness expert:
python train.py --epochs 15 --batch-size 8 --workers 0 freshness --category cu
python train.py --epochs 15 --batch-size 8 --workers 0 freshness --category gia_suc
python train.py --epochs 15 --batch-size 8 --workers 0 freshness --category qua
python train.py --epochs 15 --batch-size 8 --workers 0 freshness --category rau--epochs là tổng số epoch mục tiêu. --workers 0 ổn định hơn trên Windows; tăng lên khi data loading không còn là nút thắt.
Mỗi run nằm trong runs/<run>/:
last_checkpoint.pth # trạng thái mới nhất
best_model.pth # model có validation loss tốt nhất
metrics.csv # metrics từng epoch
summary.json # kết quả test cuối
config.json # cấu hình run
last_checkpoint.pth được tạo trước epoch đầu và cập nhật sau mỗi epoch. Nó lưu:
- Model weights
- Optimizer
- Scheduler
- AMP scaler
- Epoch hiện tại
- Best metrics và early-stopping state
- Random state CPU/GPU
Resume từ trạng thái mới nhất:
python train.py --epochs 15 --resume runs\20260722_071335_router_resume_epoch1_6\last_checkpoint.pth routerResume từ best_model.pth cũ vẫn chạy được, nhưng checkpoint cũ chỉ có weights nên không khôi phục được optimizer/scheduler chính xác. Checkpoint mới thì khôi phục đầy đủ.
Nếu process bị kill giữa epoch, mất tối đa epoch đang chạy; checkpoint trước đó không bị ghi hỏng.
python predict.py path\to\image.jpgPipeline đầy đủ cần router và freshness expert tương ứng trong models/.
Export router và các expert hiện có:
python export_onnx.pySinh ra:
models/router.onnx
models/freshness/cu.onnx
models/freshness/gia_suc.onnx
models/freshness/qua.onnx
models/freshness/rau.onnx
Các file ONNX được copy vào:
../VnGrocery/assets/models/
Flutter dùng preprocessing giống Python: RGB, resize cạnh ngắn 232, center crop 224x224, rồi normalize ImageNet.
Router tốt nhất đã đạt khoảng 99.70% test accuracy. Kết quả không thay thế kiểm nghiệm an toàn thực phẩm.