| | ---
|
| | language: vi
|
| | license: mit
|
| | tags:
|
| | - image-captioning
|
| | - vision
|
| | - nlp
|
| | - multimodal
|
| | datasets:
|
| | - uit-viic
|
| | metrics:
|
| | - bleu
|
| | - rouge
|
| | - meteor
|
| | - cider
|
| | pipeline_tag: image-to-text
|
| | ---
|
| | # 🇻🇳 Vietnamese Image Captioning Model
|
| |
|
| | > **EfficientNet-B0 × BARTPho** | *Trained on UIT-ViIC dataset*
|
| |
|
| | ## 📌 Giới thiệu
|
| |
|
| | Mô hình Sinh chú thích ảnh tiếng Việt (Vietnamese Image Captioning) huấn luyện trên bộ dữ liệu UIT-ViIC, cho phép tạo mô tả ảnh tự nhiên và chính xác bằng tiếng Việt.
|
| |
|
| | ### Ứng dụng:
|
| |
|
| | * 🔍 **Tìm kiếm ảnh** theo ngôn ngữ tự nhiên
|
| | * 🦯 **Hỗ trợ người khiếm thị** tiếp cận nội dung hình ảnh
|
| | * 🤖 **Tích hợp** vào hệ thống AI đa phương thức (Multimodal AI)
|
| |
|
| | ## 🧠 Kiến trúc mô hình
|
| |
|
| | | Thành phần | Mô tả |
|
| | |------------|-------|
|
| | | **Encoder** | EfficientNet-B0 (pretrained từ NVIDIA TorchHub) → Trích xuất đặc trưng ảnh thành vector embedding |
|
| | | **Decoder** | BARTPho-Syllable → Sinh câu mô tả dựa trên đặc trưng ảnh |
|
| |
|
| | ### Pipeline:
|
| |
|
| | ```
|
| | Ảnh → EncoderCNN (EfficientNet-B0) → vector đặc trưng (embed size = 768)
|
| | → Linear projection → encoder BARTPho
|
| | → BARTPho decoder → sinh chú thích tiếng Việt
|
| | ```
|
| |
|
| | ## ⚙️ Thông số huấn luyện
|
| |
|
| | | Tham số | Giá trị |
|
| | |---------|---------|
|
| | | **Dataset** | UIT-ViIC (train/val/test) |
|
| | | **Loss** | CrossEntropyLoss (ignore pad tokens) |
|
| | | **Optimizer** | Adam (lr = 5e-5) |
|
| | | **Batch size** | 32 |
|
| | | **Epochs** | 30 |
|
| | | **Gradient clipping** | 1.0 |
|
| | | **Mixed Precision** | torch.cuda.amp |
|
| | | **Image augmentation** | Resize(256) → RandomCrop(224) → Normalize(Imagenet) |
|
| |
|
| | ## 📊 Metrics hỗ trợ
|
| |
|
| | - **BLEU**
|
| | - **ROUGE-L**
|
| | - **METEOR**
|
| | - **CIDEr**
|
| | - **F1 trung bình token-level**
|
| | - **Recall trung bình token-level**
|
| |
|
| | > *Điểm số cụ thể phụ thuộc vào checkpoint được tải.*
|
| |
|
| | ## 🚀 Cách sử dụng
|
| |
|
| | ```python
|
| | import torch
|
| | from PIL import Image
|
| | from torchvision import transforms
|
| | from image_caption import ImageCaptioningModel, Vocabulary
|
| | from huggingface_hub import hf_hub_download
|
| |
|
| | DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
| | model_name = "vinai/bartpho-syllable"
|
| |
|
| | # Load vocab & model
|
| | vocab = Vocabulary(model_name=model_name)
|
| | model = ImageCaptioningModel(embed_size=768, bartpho_model_name=model_name,
|
| | train_CNN=False, freeze_bartpho=False).to(DEVICE)
|
| |
|
| | # Download checkpoint từ Hugging Face
|
| | ckpt_path = hf_hub_download(repo_id="username/vietnamese-image-captioning",
|
| | filename="best_image_captioning_model_vietnamese.pth.tar")
|
| | model.load_state_dict(torch.load(ckpt_path, map_location=DEVICE)["state_dict"])
|
| | model.eval()
|
| |
|
| | # Transform ảnh
|
| | tfm = transforms.Compose([
|
| | transforms.Resize((256, 256)),
|
| | transforms.CenterCrop((224, 224)),
|
| | transforms.ToTensor(),
|
| | transforms.Normalize(mean=[0.485, 0.456, 0.406],
|
| | std=[0.229, 0.224, 0.225]),
|
| | ])
|
| |
|
| | img = Image.open("your_image.jpg").convert("RGB")
|
| | img = tfm(img).to(DEVICE)
|
| |
|
| | with torch.no_grad():
|
| | caption = model.predict(img, vocab, max_length=50)
|
| |
|
| | print("Caption:", caption)
|
| | ```
|
| |
|
| | ## 📜 Giấy phép
|
| |
|
| | - **Model**: Tuân theo giấy phép của BARTPho và EfficientNet
|
| | - **Dataset**: UIT-ViIC (chỉ sử dụng cho nghiên cứu & học tập)
|
| |
|
| | ## 👤 Tác giả
|
| |
|
| | **Nguyễn Thành Đạt**
|
| |
|