{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "name": "Neural_Image_Captioning_(NIC)_Using_ResNet_101.ipynb", "provenance": [], "collapsed_sections": [ "PmugZ_i_IIcD" ], "include_colab_link": true }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "accelerator": "GPU", "widgets": { "application/vnd.jupyter.widget-state+json": { "76bcb0b8b30441a6ab877079972777dc": { "model_module": "@jupyter-widgets/controls", "model_name": "HBoxModel", "state": { "_view_name": "HBoxView", "_dom_classes": [], "_model_name": "HBoxModel", "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.5.0", "box_style": "", "layout": "IPY_MODEL_ff222096f65c44a3b4711ba65d64a98d", "_model_module": "@jupyter-widgets/controls", "children": [ "IPY_MODEL_ca22585fe3c149a4af9f95bf112a9d37", "IPY_MODEL_5c148ae2261942bcbf1273c3b3e3d578" ] } }, "ff222096f65c44a3b4711ba65d64a98d": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "ca22585fe3c149a4af9f95bf112a9d37": { "model_module": "@jupyter-widgets/controls", "model_name": "FloatProgressModel", "state": { "_view_name": "ProgressView", "style": "IPY_MODEL_e20cdc01f6474e589c76b89fedbfb7b8", "_dom_classes": [], "description": "100%", "_model_name": "FloatProgressModel", "bar_style": "success", "max": 178728960, "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "value": 178728960, "_view_count": null, "_view_module_version": "1.5.0", "orientation": "horizontal", "min": 0, "description_tooltip": null, "_model_module": "@jupyter-widgets/controls", "layout": "IPY_MODEL_fc17cf7c122d436c828141c324cbc7e1" } }, "5c148ae2261942bcbf1273c3b3e3d578": { "model_module": "@jupyter-widgets/controls", "model_name": "HTMLModel", "state": { "_view_name": "HTMLView", "style": "IPY_MODEL_55ced85796e341fbb9bbb15b50a23918", "_dom_classes": [], "description": "", "_model_name": "HTMLModel", "placeholder": "​", "_view_module": "@jupyter-widgets/controls", "_model_module_version": "1.5.0", "value": " 170M/170M [00:11<00:00, 14.9MB/s]", "_view_count": null, "_view_module_version": "1.5.0", "description_tooltip": null, "_model_module": "@jupyter-widgets/controls", "layout": "IPY_MODEL_e0255a99320242d5bfbdf3a228a7f70f" } }, "e20cdc01f6474e589c76b89fedbfb7b8": { "model_module": "@jupyter-widgets/controls", "model_name": "ProgressStyleModel", "state": { "_view_name": "StyleView", "_model_name": "ProgressStyleModel", "description_width": "initial", "_view_module": "@jupyter-widgets/base", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.2.0", "bar_color": null, "_model_module": "@jupyter-widgets/controls" } }, "fc17cf7c122d436c828141c324cbc7e1": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } }, "55ced85796e341fbb9bbb15b50a23918": { "model_module": "@jupyter-widgets/controls", "model_name": "DescriptionStyleModel", "state": { "_view_name": "StyleView", "_model_name": "DescriptionStyleModel", "description_width": "", "_view_module": "@jupyter-widgets/base", "_model_module_version": "1.5.0", "_view_count": null, "_view_module_version": "1.2.0", "_model_module": "@jupyter-widgets/controls" } }, "e0255a99320242d5bfbdf3a228a7f70f": { "model_module": "@jupyter-widgets/base", "model_name": "LayoutModel", "state": { "_view_name": "LayoutView", "grid_template_rows": null, "right": null, "justify_content": null, "_view_module": "@jupyter-widgets/base", "overflow": null, "_model_module_version": "1.2.0", "_view_count": null, "flex_flow": null, "width": null, "min_width": null, "border": null, "align_items": null, "bottom": null, "_model_module": "@jupyter-widgets/base", "top": null, "grid_column": null, "overflow_y": null, "overflow_x": null, "grid_auto_flow": null, "grid_area": null, "grid_template_columns": null, "flex": null, "_model_name": "LayoutModel", "justify_items": null, "grid_row": null, "max_height": null, "align_content": null, "visibility": null, "align_self": null, "height": null, "min_height": null, "padding": null, "grid_auto_rows": null, "grid_gap": null, "max_width": null, "order": null, "_view_module_version": "1.2.0", "grid_template_areas": null, "object_position": null, "object_fit": null, "grid_auto_columns": null, "margin": null, "display": null, "left": null } } } } }, "cells": [ { "cell_type": "markdown", "metadata": { "id": "view-in-github", "colab_type": "text" }, "source": [ "\"Open" ] }, { "cell_type": "markdown", "metadata": { "id": "PmugZ_i_IIcD" }, "source": [ "#### [코드 구현] Show and Tell: A Neural Image Caption Generator (CVPR 2015)\n", "* 본 소스코드는 원본 논문에서 제안한 아키텍처를 최대한 따르고 있습니다.\n", "* CNN 아키텍처로 ResNet-101을 사용합니다.\n", "* 학습용 데이터셋: Flickr8k\n", "* 참고한 소스코드: [yunjey](https://github.com/yunjey/pytorch-tutorial/tree/master/tutorials/03-advanced/image_captioning)" ] }, { "cell_type": "markdown", "metadata": { "id": "GBjl7hG9cSp8" }, "source": [ "#### Flickr8k 데이터셋 다운로드\n", "\n", "* Flickr8k 데이터셋 다운로드 및 압축 해제" ] }, { "cell_type": "code", "metadata": { "id": "kS2lBamDqI7F", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "611bb195-0c7b-4759-e62c-9119cf641f35" }, "source": [ "!wget https://postechackr-my.sharepoint.com/:u:/g/personal/dongbinna_postech_ac_kr/EXVy7_7pF5FIsPp6WfXXfWgBNfUKx8N1VrTisN8FbGYG9w?download=1 -O Flickr8k_dataset.zip" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "--2020-12-04 08:31:23-- https://postechackr-my.sharepoint.com/:u:/g/personal/dongbinna_postech_ac_kr/EXVy7_7pF5FIsPp6WfXXfWgBNfUKx8N1VrTisN8FbGYG9w?download=1\n", "Resolving postechackr-my.sharepoint.com (postechackr-my.sharepoint.com)... 13.107.136.9\n", "Connecting to postechackr-my.sharepoint.com (postechackr-my.sharepoint.com)|13.107.136.9|:443... connected.\n", "HTTP request sent, awaiting response... 302 Found\n", "Location: /personal/dongbinna_postech_ac_kr/Documents/Research/datasets/Flickr8k_dataset.zip?originalPath=aHR0cHM6Ly9wb3N0ZWNoYWNrci1teS5zaGFyZXBvaW50LmNvbS86dTovZy9wZXJzb25hbC9kb25nYmlubmFfcG9zdGVjaF9hY19rci9FWFZ5N183cEY1RklzUHA2V2ZYWGZXZ0JOZlVLeDhOMVZyVGlzTjhGYkdZRzl3P3J0aW1lPVJSVlBfQzZZMkVn [following]\n", "--2020-12-04 08:31:24-- https://postechackr-my.sharepoint.com/personal/dongbinna_postech_ac_kr/Documents/Research/datasets/Flickr8k_dataset.zip?originalPath=aHR0cHM6Ly9wb3N0ZWNoYWNrci1teS5zaGFyZXBvaW50LmNvbS86dTovZy9wZXJzb25hbC9kb25nYmlubmFfcG9zdGVjaF9hY19rci9FWFZ5N183cEY1RklzUHA2V2ZYWGZXZ0JOZlVLeDhOMVZyVGlzTjhGYkdZRzl3P3J0aW1lPVJSVlBfQzZZMkVn\n", "Reusing existing connection to postechackr-my.sharepoint.com:443.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 1112971163 (1.0G) [application/x-zip-compressed]\n", "Saving to: ‘Flickr8k_dataset.zip’\n", "\n", "Flickr8k_dataset.zi 100%[===================>] 1.04G 53.2MB/s in 23s \n", "\n", "2020-12-04 08:31:48 (46.0 MB/s) - ‘Flickr8k_dataset.zip’ saved [1112971163/1112971163]\n", "\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "V6fzkhRPrU8Q" }, "source": [ "%%capture\n", "!unzip Flickr8k_dataset.zip -d ./Flickr8k_dataset" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "NS6O9OiHgJNP" }, "source": [ "#### 필요한 버전의 라이브러리 설치\n", "\n", "* BLEU Score 계산을 위해 라이브러리 재설치" ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "Fyo5IeXwgMkh", "outputId": "7198c312-9de6-4f37-e8c1-7b2b7e82d01d" }, "source": [ "!pip install torchtext==0.6.0" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "Collecting torchtext==0.6.0\n", "\u001b[?25l Downloading https://files.pythonhosted.org/packages/f2/17/e7c588245aece7aa93f360894179374830daf60d7ed0bbb59332de3b3b61/torchtext-0.6.0-py3-none-any.whl (64kB)\n", "\r\u001b[K |█████ | 10kB 24.8MB/s eta 0:00:01\r\u001b[K |██████████▏ | 20kB 30.6MB/s eta 0:00:01\r\u001b[K |███████████████▎ | 30kB 16.5MB/s eta 0:00:01\r\u001b[K |████████████████████▍ | 40kB 13.1MB/s eta 0:00:01\r\u001b[K |█████████████████████████▌ | 51kB 12.0MB/s eta 0:00:01\r\u001b[K |██████████████████████████████▋ | 61kB 12.7MB/s eta 0:00:01\r\u001b[K |████████████████████████████████| 71kB 6.5MB/s \n", "\u001b[?25hRequirement already satisfied: numpy in /usr/local/lib/python3.6/dist-packages (from torchtext==0.6.0) (1.18.5)\n", "Requirement already satisfied: six in /usr/local/lib/python3.6/dist-packages (from torchtext==0.6.0) (1.15.0)\n", "Collecting sentencepiece\n", "\u001b[?25l Downloading https://files.pythonhosted.org/packages/e5/2d/6d4ca4bef9a67070fa1cac508606328329152b1df10bdf31fb6e4e727894/sentencepiece-0.1.94-cp36-cp36m-manylinux2014_x86_64.whl (1.1MB)\n", "\u001b[K |████████████████████████████████| 1.1MB 23.6MB/s \n", "\u001b[?25hRequirement already satisfied: requests in /usr/local/lib/python3.6/dist-packages (from torchtext==0.6.0) (2.23.0)\n", "Requirement already satisfied: tqdm in /usr/local/lib/python3.6/dist-packages (from torchtext==0.6.0) (4.41.1)\n", "Requirement already satisfied: torch in /usr/local/lib/python3.6/dist-packages (from torchtext==0.6.0) (1.7.0+cu101)\n", "Requirement already satisfied: idna<3,>=2.5 in /usr/local/lib/python3.6/dist-packages (from requests->torchtext==0.6.0) (2.10)\n", "Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /usr/local/lib/python3.6/dist-packages (from requests->torchtext==0.6.0) (1.24.3)\n", "Requirement already satisfied: chardet<4,>=3.0.2 in /usr/local/lib/python3.6/dist-packages (from requests->torchtext==0.6.0) (3.0.4)\n", "Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.6/dist-packages (from requests->torchtext==0.6.0) (2020.11.8)\n", "Requirement already satisfied: future in /usr/local/lib/python3.6/dist-packages (from torch->torchtext==0.6.0) (0.16.0)\n", "Requirement already satisfied: typing-extensions in /usr/local/lib/python3.6/dist-packages (from torch->torchtext==0.6.0) (3.7.4.3)\n", "Requirement already satisfied: dataclasses in /usr/local/lib/python3.6/dist-packages (from torch->torchtext==0.6.0) (0.8)\n", "Installing collected packages: sentencepiece, torchtext\n", " Found existing installation: torchtext 0.3.1\n", " Uninstalling torchtext-0.3.1:\n", " Successfully uninstalled torchtext-0.3.1\n", "Successfully installed sentencepiece-0.1.94 torchtext-0.6.0\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "k0tegtLd0Jkv" }, "source": [ "#### 이미지 크기 조정(Resize)\n", "\n", "* 데이터셋에 포함된 모든 이미지의 크기를 조정합니다." ] }, { "cell_type": "code", "metadata": { "id": "tY_FuJbzxB57", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "31c93496-7dfc-4e7d-9c2a-34b3f5fda0c8" }, "source": [ "import os\n", "from PIL import Image\n", "\n", "image_dir = \"./Flickr8k_dataset/Images\" # 원본 이미지 파일 경로\n", "train_image_dir = \"./resized_train/images\" # 크기가 조정된 이미지가 담길 경로 (학습)\n", "val_image_dir = \"./resized_val/images\" # 크기가 조정된 이미지가 담길 경로 (평가)\n", "test_image_dir = \"./resized_test/images\" # 크기가 조정된 이미지가 담길 경로 (테스트)\n", "size = [256, 256] # 조정될 이미지 크기\n", "\n", "\n", "def resize_image(image, size):\n", " # 이미지를 특정 크기로 조정\n", " return image.resize(size, Image.ANTIALIAS)\n", "\n", "# image_dir 내부에 있는 모든 이미지의 크기를 바꾸어 결과 폴더로 옮기기\n", "if not os.path.exists(train_image_dir):\n", " os.makedirs(train_image_dir)\n", "if not os.path.exists(val_image_dir):\n", " os.makedirs(val_image_dir)\n", "if not os.path.exists(test_image_dir):\n", " os.makedirs(test_image_dir)\n", "\n", "images = sorted(os.listdir(image_dir)) # 이미지와 캡션 모두 파일 이름별로 정렬해서 매칭\n", "num_images = len(images)\n", "num_train_images = 6000 # 6000개는 학습용 데이터로 이용\n", "num_val_images = 1000 # 1000개는 평가용 데이터로 이용\n", "\n", "for i, image in enumerate(images):\n", " if (i + 1) <= num_train_images:\n", " output_dir = train_image_dir\n", " elif (i + 1) <= num_train_images + num_val_images:\n", " output_dir = val_image_dir\n", " else:\n", " output_dir = test_image_dir\n", " with open(os.path.join(image_dir, image), 'rb+') as f:\n", " with Image.open(f) as img:\n", " img = resize_image(img, size)\n", " img.save(os.path.join(output_dir, image), img.format)\n", " if (i + 1) % 500 == 0:\n", " print(f\"[{i + 1}/{num_images}] Resized the images and saved into '{output_dir}'\")" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "[500/8091] Resized the images and saved into './resized_train/images'\n", "[1000/8091] Resized the images and saved into './resized_train/images'\n", "[1500/8091] Resized the images and saved into './resized_train/images'\n", "[2000/8091] Resized the images and saved into './resized_train/images'\n", "[2500/8091] Resized the images and saved into './resized_train/images'\n", "[3000/8091] Resized the images and saved into './resized_train/images'\n", "[3500/8091] Resized the images and saved into './resized_train/images'\n", "[4000/8091] Resized the images and saved into './resized_train/images'\n", "[4500/8091] Resized the images and saved into './resized_train/images'\n", "[5000/8091] Resized the images and saved into './resized_train/images'\n", "[5500/8091] Resized the images and saved into './resized_train/images'\n", "[6000/8091] Resized the images and saved into './resized_train/images'\n", "[6500/8091] Resized the images and saved into './resized_val/images'\n", "[7000/8091] Resized the images and saved into './resized_val/images'\n", "[7500/8091] Resized the images and saved into './resized_test/images'\n", "[8000/8091] Resized the images and saved into './resized_test/images'\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "R_kamUzwx71P" }, "source": [ "#### 캡션을 이용해 Vocabulary 만들기\n", "\n", "* 현재의 Flickr8k_dataset에 총 8,091개의 이미지가 포함되어 있습니다.\n", "* 이미지마다 5개의 캡션이 붙어 있으므로 총 40,455개의 문장이 존재합니다." ] }, { "cell_type": "code", "metadata": { "id": "ifcomEM_rJ3C", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "00dc7238-3ea1-447a-f2ca-c06983f90887" }, "source": [ "import pickle\n", "import nltk\n", "from collections import Counter\n", "\n", "nltk.download('punkt')\n", "\n", "caption_path = \"./Flickr8k_dataset/captions.txt\" # 원본 캡션(caption) 파일\n", "vocab_path = \"./vocab.pkl\" # 단어 사전 결과 파일\n", "word_threshold = 4 # 최소 단어 등장 횟수\n", "train_caption_path = \"./resized_train/captions.txt\" # 크기가 조정된 이미지의 캡션(caption)이 담길 경로 (학습)\n", "val_caption_path = \"./resized_val/captions.txt\" # 크기가 조정된 이미지의 캡션(caption)이 담길 경로 (평가)\n", "test_caption_path = \"./resized_test/captions.txt\" # 크기가 조정된 이미지의 캡션(caption)이 담길 경로 (테스트)\n", "\n", "\n", "class Vocabulary(object):\n", " \"\"\"Simple vocabulary wrapper.\"\"\"\n", " def __init__(self):\n", " self.word2idx = {}\n", " self.idx2word = {}\n", " self.idx = 0\n", "\n", " def add_word(self, word):\n", " if not word in self.word2idx:\n", " self.word2idx[word] = self.idx\n", " self.idx2word[self.idx] = word\n", " self.idx += 1\n", "\n", " def __call__(self, word):\n", " if not word in self.word2idx:\n", " return self.word2idx['']\n", " return self.word2idx[word]\n", "\n", " def __len__(self):\n", " return len(self.word2idx)\n", "\n", "counter = Counter()\n", "\n", "with open(caption_path, \"r\") as f:\n", " lines = sorted(f.readlines()[1:])\n", " for i in range(len(lines)):\n", " line = lines[i]\n", " if (i + 1) <= num_train_images * 5: # 이미지당 캡션이 5개씩 존재\n", " output_caption = train_caption_path\n", " elif (i + 1) <= (num_train_images + num_val_images) * 5:\n", " output_caption = val_caption_path\n", " else:\n", " output_caption = test_caption_path\n", " index = line.find(\",\") # 캡션(caption) 문자열의 시작점 찾기\n", " caption = line[index + 1:] # 캡션(caption) 문자열 기록\n", " tokens = nltk.tokenize.word_tokenize(caption.lower()) # 문자열 토큰화\n", " counter.update(tokens) # 각 토큰의 개수 세기\n", " with open(output_caption, \"a\") as output_caption_f:\n", " output_caption_f.write(line)\n", "\n", "# 단어의 빈도수가 특정 임계치(threshold) 이상인 경우에만 사용\n", "words = [word for word, cnt in counter.items() if cnt >= word_threshold]\n", "\n", "# Vocabulary 객체 생성\n", "vocab = Vocabulary()\n", "vocab.add_word('')\n", "vocab.add_word('')\n", "vocab.add_word('')\n", "vocab.add_word('') # unknown 토큰\n", "\n", "# Vocabulary 객체에 모든 단어를 담기\n", "for word in words:\n", " vocab.add_word(word)\n", "\n", "# Vocabulary 파일 저장\n", "with open(vocab_path, 'wb') as f:\n", " pickle.dump(vocab, f)" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "[nltk_data] Downloading package punkt to /root/nltk_data...\n", "[nltk_data] Unzipping tokenizers/punkt.zip.\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "agqO7u_nLIyW", "outputId": "d447af55-9da8-4442-8d14-7fc21fa72f30" }, "source": [ "# 학습(train) 데이터셋의 캡션 수\n", "!wc -l ./resized_train/captions.txt\n", "# 평가(val) 데이터셋의 캡션 수\n", "!wc -l ./resized_val/captions.txt\n", "# 테스트(test) 데이터셋의 캡션 수\n", "!wc -l ./resized_test/captions.txt" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "30000 ./resized_train/captions.txt\n", "5000 ./resized_val/captions.txt\n", "5455 ./resized_test/captions.txt\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "RtlepWmU4J3o" }, "source": [ "#### 커스텀 데이터셋 클래스 정의\n", "\n", "* Flickr8kDataset 클래스를 정의합니다." ] }, { "cell_type": "code", "metadata": { "id": "OENa8v-W4JiB" }, "source": [ "import torch.utils.data as data\n", "\n", "\n", "# Flickr8k 데이터셋 클래스 정의\n", "class Flickr8kDataset(data.Dataset):\n", " def __init__(self, root, captions, vocab, transform=None):\n", " self.root = root # 이미지가 존재하는 경로\n", " with open(captions, \"r\") as f:\n", " lines = f.readlines()\n", " self.captions = [] # 캡션(caption) 정보를 담을 리스트\n", " for line in lines: # 첫 번째 줄부터 바로 캡션 정보 존재\n", " index = line.find(\",\") # 캡션(caption) 문자열의 시작점 찾기\n", " path = line[:index] # 이미지 파일 이름\n", " caption = line[index + 1:] # 캡션(caption) 문자열 기록\n", " self.captions.append((path, caption))\n", " self.vocab = vocab\n", " self.transform = transform\n", "\n", " # 이미지와 캡션(caption)을 하나씩 꺼내는 메서드\n", " def __getitem__(self, index):\n", " vocab = self.vocab\n", " path = self.captions[index][0]\n", " caption = self.captions[index][1]\n", "\n", " image = Image.open(os.path.join(self.root, path)).convert('RGB')\n", " if self.transform is not None:\n", " image = self.transform(image)\n", "\n", " # 캡션(caption) 문자열을 토큰 형태로 바꾸기\n", " tokens = nltk.tokenize.word_tokenize(str(caption).lower())\n", " caption = []\n", " caption.append(vocab(''))\n", " caption.extend([vocab(token) for token in tokens])\n", " caption.append(vocab(''))\n", " target = torch.Tensor(caption)\n", " return image, target\n", "\n", " def __len__(self):\n", " return len(self.captions)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "AtPrZqvr7yUJ" }, "source": [ "# 이미지와 캡션(caption)으로 구성된 튜플을 배치(batch)로 만들기\n", "def collate_fn(data):\n", " \"\"\"\n", " [입력]\n", " * data: list of tuple (image, caption). \n", " * image: torch tensor of shape (3, 256, 256).\n", " * caption: torch tensor of shape (?); variable length.\n", " [출력]\n", " * images: torch tensor of shape (batch_size, 3, 256, 256).\n", " * targets: torch tensor of shape (batch_size, padded_length).\n", " * lengths: list; valid length for each padded caption.\n", " \"\"\"\n", " # Caption 길이로 각 데이터를 내림차순 정렬\n", " data.sort(key=lambda x: len(x[1]), reverse=True)\n", " images, captions = zip(*data)\n", "\n", " # 리스트 형태의 이미지들을 텐서 하나로 합치기(데이터 개수, 3, 256, 256)\n", " images = torch.stack(images, 0)\n", "\n", " # 리스트 형태의 캡션들을 텐서 하나로 합치기(데이터 개수, 문장 내 최대 토큰 개수)\n", " lengths = [len(caption) for caption in captions]\n", " targets = torch.zeros(len(captions), max(lengths)).long()\n", " # 하나씩 캡션을 확인하며 앞 부분의 내용을 패딩이 아닌 원래 토큰으로 채우기\n", " for i, cap in enumerate(captions):\n", " end = lengths[i]\n", " targets[i, :end] = cap[:end]\n", " return images, targets, lengths\n", "\n", "def collate_fn_test(data):\n", " # 기존 순서를 그대로 사용 (차례대로 5개씩 같은 이미지를 표현)\n", " images, captions = zip(*data)\n", "\n", " # 리스트 형태의 이미지들을 텐서 하나로 합치기(데이터 개수, 3, 256, 256)\n", " images = torch.stack(images, 0)\n", "\n", " # 리스트 형태의 캡션들을 텐서 하나로 합치기(데이터 개수, 문장 내 최대 토큰 개수)\n", " lengths = [len(caption) for caption in captions]\n", " targets = torch.zeros(len(captions), max(lengths)).long()\n", " # 하나씩 캡션을 확인하며 앞 부분의 내용을 패딩이 아닌 원래 토큰으로 채우기\n", " for i, cap in enumerate(captions):\n", " end = lengths[i]\n", " targets[i, :end] = cap[:end]\n", " return images, targets, lengths\n", "\n", "# 커스텀 Flickr8k 데이터셋을 위한 DataLoader 객체 반환\n", "def get_loader(root, captions, vocab, transform, batch_size, shuffle, num_workers, testing):\n", " flickr8k = Flickr8kDataset(root=root, captions=captions, vocab=vocab, transform=transform)\n", " # This will return (images, captions, lengths) for each iteration.\n", " # images: a tensor of shape (batch_size, 3, 224, 224).\n", " # captions: a tensor of shape (batch_size, padded_length).\n", " # lengths: a list indicating valid length for each caption. length is (batch_size).\n", " if not testing:\n", " data_loader = torch.utils.data.DataLoader(dataset=flickr8k, batch_size=batch_size, shuffle=shuffle, num_workers=num_workers, collate_fn=collate_fn)\n", " else:\n", " data_loader = torch.utils.data.DataLoader(dataset=flickr8k, batch_size=batch_size, shuffle=shuffle, num_workers=num_workers, collate_fn=collate_fn_test)\n", " return data_loader" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "eRqv_RUS1oK4" }, "source": [ "#### 모델 정의\n", "\n", "* 학습을 위한 Encoder 및 Decoder 모델을 정의합니다.\n", "* 본 실습에서는 사전 학습된(pre-trained) ResNet-101 모델을 CNN으로 사용합니다." ] }, { "cell_type": "code", "metadata": { "id": "jP1hkjJt1qKo" }, "source": [ "import torch\n", "import torch.nn as nn\n", "import torchvision.models as models\n", "from torch.nn.utils.rnn import pack_padded_sequence\n", "\n", "\n", "class EncoderCNN(nn.Module):\n", " def __init__(self, embed_size):\n", " # 사전 학습된(pre-trained) ResNet-101을 불러와 FC 레이어를 교체\n", " super(EncoderCNN, self).__init__()\n", " resnet = models.resnet101(pretrained=True)\n", " modules = list(resnet.children())[:-1] # 마지막 FC 레이어를 제거\n", " self.resnet = nn.Sequential(*modules)\n", " self.linear = nn.Linear(resnet.fc.in_features, embed_size) # 결과(output) 차원을 임베딩 차원으로 변경\n", " self.bn = nn.BatchNorm1d(embed_size, momentum=0.01)\n", "\n", " def forward(self, images):\n", " # 입력 이미지에서 특징 벡터(feature vectors)\n", " with torch.no_grad(): # 네트워크의 앞 부분은 변경되지 않도록 하기\n", " features = self.resnet(images)\n", " features = features.reshape(features.size(0), -1)\n", " features = self.bn(self.linear(features))\n", " return features\n", "\n", "\n", "class DecoderRNN(nn.Module):\n", " def __init__(self, embed_size, hidden_size, vocab_size, num_layers, max_seq_length=20):\n", " # 하이퍼 파라미터(hyper-parameters) 설정 및 레이어 생성\n", " super(DecoderRNN, self).__init__()\n", " self.embed = nn.Embedding(vocab_size, embed_size)\n", " self.lstm = nn.LSTM(embed_size, hidden_size, num_layers, batch_first=True)\n", " self.linear = nn.Linear(hidden_size, vocab_size)\n", " self.max_seg_length = max_seq_length\n", "\n", " def forward(self, features, captions, lengths):\n", " # 이미지 특징 벡터(feature vectors)로부터 캡션(caption) 생성\n", " embeddings = self.embed(captions)\n", " embeddings = torch.cat((features.unsqueeze(1), embeddings), 1) # 이미지 특징과 임베딩 연결\n", " packed = pack_padded_sequence(embeddings, lengths, batch_first=True) # 패딩을 넣어 차원 맞추기\n", " hiddens, _ = self.lstm(packed) # 다음 hidden state 구하기\n", " outputs = self.linear(hiddens[0])\n", " return outputs\n", "\n", " def sample(self, features, states=None):\n", " # 간단히 그리디(greedy) 탐색으로 캡션(caption) 생성하기\n", " sampled_indexes = []\n", " inputs = features.unsqueeze(1)\n", " for i in range(self.max_seg_length):\n", " hiddens, states = self.lstm(inputs, states) # hiddens: (batch_size, 1, hidden_size)\n", " outputs = self.linear(hiddens.squeeze(1)) # outputs: (batch_size, vocab_size)\n", " _, predicted = outputs.max(1) # predicted: (batch_size)\n", " sampled_indexes.append(predicted)\n", " inputs = self.embed(predicted) # inputs: (batch_size, embed_size)\n", " inputs = inputs.unsqueeze(1) # inputs: (batch_size, 1, embed_size)\n", " sampled_indexes = torch.stack(sampled_indexes, 1) # sampled_indexes: (batch_size, max_seq_length)\n", " return sampled_indexes" ], "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "metadata": { "id": "q_fYBqI9U4pa" }, "source": [ "#### 학습 및 평가 준비하기\n", "\n", "* 학습 및 평가를 준비합니다." ] }, { "cell_type": "code", "metadata": { "id": "jQeUwfzxU9bT" }, "source": [ "import torch\n", "from torch.nn.utils.rnn import pack_padded_sequence\n", "from torchvision import transforms\n", "\n", "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n", "\n", "model_path = \"models/\" # 학습된 모델이 저장될 경로\n", "crop_size = 224 # 랜덤하게 잘라낼 이미지 크기\n", "vocab_path = \"./vocab.pkl\" # 전처리된 Vocabulary 파일 경로\n", "\n", "# 모델 디렉토리 만들기\n", "if not os.path.exists(model_path):\n", " os.makedirs(model_path)\n", "\n", "# Vocabulary 파일 불러오기\n", "with open(vocab_path, 'rb') as f:\n", " vocab = pickle.load(f)\n", "\n", "# 사전 학습된(pre-trained) ResNet에 적용된 전처리 및 정규화 파라미터를 그대로 사용합니다.\n", "train_transform = transforms.Compose([ \n", " transforms.RandomCrop(crop_size),\n", " transforms.RandomHorizontalFlip(), \n", " transforms.ToTensor(), \n", " transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))])\n", "\n", "val_transform = transforms.Compose([ \n", " transforms.Resize(crop_size), \n", " transforms.ToTensor(), \n", " transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))])\n", "\n", "test_transform = transforms.Compose([ \n", " transforms.Resize(crop_size), \n", " transforms.ToTensor(), \n", " transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))])\n", "\n", "batch_size = 128\n", "num_workers = 2\n", "\n", "# 데이터 로더(data loader) 선언\n", "train_data_loader = get_loader(train_image_dir, train_caption_path, vocab, train_transform, batch_size, shuffle=True, num_workers=num_workers, testing=False) \n", "val_data_loader = get_loader(val_image_dir, val_caption_path, vocab, val_transform, batch_size, shuffle=False, num_workers=num_workers, testing=False)\n", "test_data_loader = get_loader(test_image_dir, test_caption_path, vocab, test_transform, batch_size, shuffle=False, num_workers=num_workers, testing=True)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "UIBQ-YoG1Pyr", "colab": { "base_uri": "https://localhost:8080/", "height": 85, "referenced_widgets": [ "76bcb0b8b30441a6ab877079972777dc", "ff222096f65c44a3b4711ba65d64a98d", "ca22585fe3c149a4af9f95bf112a9d37", "5c148ae2261942bcbf1273c3b3e3d578", "e20cdc01f6474e589c76b89fedbfb7b8", "fc17cf7c122d436c828141c324cbc7e1", "55ced85796e341fbb9bbb15b50a23918", "e0255a99320242d5bfbdf3a228a7f70f" ] }, "outputId": "b4f730b6-58a6-4027-a6af-47eb79d33918" }, "source": [ "# 모델 하이퍼 파라미터 설정\n", "embed_size = 256 # 임베딩(embedding) 차원\n", "hidden_size = 512 # LSTM hidden states 차원\n", "num_layers = 1 # LSTM의 레이어 개수\n", "\n", "# 모델 객체 선언\n", "encoder = EncoderCNN(embed_size).to(device)\n", "decoder = DecoderRNN(embed_size, hidden_size, len(vocab), num_layers).to(device)\n", "\n", "num_epochs = 5\n", "learning_rate = 0.001\n", "\n", "log_step = 20 # 로그를 출력할 스텝(step)\n", "save_step = 1000 # 학습된 모델을 저장할 스텝(step)\n", "\n", "# 손실(loss) 및 최적화 함수 선언\n", "criterion = nn.CrossEntropyLoss()\n", "params = list(decoder.parameters()) + list(encoder.linear.parameters()) + list(encoder.bn.parameters())\n", "optimizer = torch.optim.Adam(params, lr=learning_rate)" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "Downloading: \"https://download.pytorch.org/models/resnet101-5d3b4d8f.pth\" to /root/.cache/torch/hub/checkpoints/resnet101-5d3b4d8f.pth\n" ], "name": "stderr" }, { "output_type": "display_data", "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "76bcb0b8b30441a6ab877079972777dc", "version_minor": 0, "version_major": 2 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, max=178728960.0), HTML(value='')))" ] }, "metadata": { "tags": [] } }, { "output_type": "stream", "text": [ "\n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "lsLJ839BIVrT" }, "source": [ "#### 학습 진행\n", "\n", "* 전체 학습 과정에서 약 15분~30분이 소요됩니다." ] }, { "cell_type": "code", "metadata": { "id": "sCPwRexz3dJZ", "colab": { "base_uri": "https://localhost:8080/" }, "outputId": "f27403f4-a4af-4f2c-93dc-961420f36f0e" }, "source": [ "import time\n", "import numpy as np\n", "\n", "start_time = time.time() # 전체 학습 시간 측정\n", "\n", "# 모델 학습 진행\n", "for epoch in range(num_epochs):\n", "\n", " # 먼저 학습 진행하기\n", " print(\"[ Training ]\")\n", " total_loss = 0\n", " total_count = 0\n", " total_step = len(train_data_loader)\n", " for i, (images, captions, lengths) in enumerate(train_data_loader):\n", " images = images.to(device)\n", " captions = captions.to(device)\n", " targets = pack_padded_sequence(captions, lengths, batch_first=True)[0]\n", "\n", " # 순전파(forward), 역전파(backward) 및 학습 진행\n", " features = encoder(images)\n", " outputs = decoder(features, captions, lengths)\n", " loss = criterion(outputs, targets)\n", " decoder.zero_grad()\n", " encoder.zero_grad()\n", " loss.backward()\n", " optimizer.step()\n", "\n", " # 손실(loss) 값 계산\n", " total_loss += loss.item()\n", " total_count += images.shape[0]\n", "\n", " # 로그(log) 정보 출력\n", " if i % log_step == 0:\n", " print('Epoch [{}/{}], Step [{}/{}], Average Loss: {:.4f}, Perplexity: {:5.4f}, Elapsed time: {:.4f}s'\n", " .format(epoch, num_epochs, i, total_step, total_loss / total_count, np.exp(loss.item()), time.time() - start_time))\n", "\n", " # 모델 파일 저장하기\n", " torch.save(decoder.state_dict(), os.path.join(model_path, f'decoder-{epoch + 1}.ckpt'))\n", " torch.save(encoder.state_dict(), os.path.join(model_path, f'encoder-{epoch + 1}.ckpt'))\n", " print(f\"Model saved: {os.path.join(model_path, f'decoder-{epoch + 1}.ckpt')}\")\n", " print(f\"Model saved: {os.path.join(model_path, f'encoder-{epoch + 1}.ckpt')}\")\n", "\n", " # 학습 이후에 평가 진행하기\n", " print(\"[ Validation ]\")\n", " total_loss = 0\n", " total_count = 0\n", " total_step = len(val_data_loader)\n", " with torch.no_grad():\n", " for i, (images, captions, lengths) in enumerate(val_data_loader):\n", " images = images.to(device)\n", " captions = captions.to(device)\n", " targets = pack_padded_sequence(captions, lengths, batch_first=True)[0]\n", "\n", " # 순전파(forward) 진행\n", " features = encoder(images)\n", " outputs = decoder(features, captions, lengths)\n", " loss = criterion(outputs, targets)\n", " \n", " # 손실(loss) 값 계산\n", " total_loss += loss.item()\n", " total_count += images.shape[0]\n", "\n", " # 로그(log) 정보 출력\n", " if i % log_step == 0:\n", " print('Epoch [{}/{}], Step [{}/{}], Average Loss: {:.4f}, Perplexity: {:5.4f}, Elapsed time: {:.4f}s'\n", " .format(epoch, num_epochs, i, total_step, total_loss / total_count, np.exp(loss.item()), time.time() - start_time))" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "[ Training ]\n", "Epoch [0/5], Step [0/235], Average Loss: 0.0637, Perplexity: 3474.9176, Elapsed time: 1.5782s\n", "Epoch [0/5], Step [20/235], Average Loss: 0.0471, Perplexity: 124.2915, Elapsed time: 14.6509s\n", "Epoch [0/5], Step [40/235], Average Loss: 0.0409, Perplexity: 58.3561, Elapsed time: 27.8815s\n", "Epoch [0/5], Step [60/235], Average Loss: 0.0374, Perplexity: 43.9489, Elapsed time: 41.4261s\n", "Epoch [0/5], Step [80/235], Average Loss: 0.0351, Perplexity: 34.7779, Elapsed time: 55.2683s\n", "Epoch [0/5], Step [100/235], Average Loss: 0.0336, Perplexity: 29.2490, Elapsed time: 69.3876s\n", "Epoch [0/5], Step [120/235], Average Loss: 0.0324, Perplexity: 28.1537, Elapsed time: 84.1051s\n", "Epoch [0/5], Step [140/235], Average Loss: 0.0314, Perplexity: 23.1429, Elapsed time: 99.3865s\n", "Epoch [0/5], Step [160/235], Average Loss: 0.0307, Perplexity: 23.4758, Elapsed time: 114.2677s\n", "Epoch [0/5], Step [180/235], Average Loss: 0.0300, Perplexity: 23.6124, Elapsed time: 128.7523s\n", "Epoch [0/5], Step [200/235], Average Loss: 0.0294, Perplexity: 22.2675, Elapsed time: 143.0829s\n", "Epoch [0/5], Step [220/235], Average Loss: 0.0289, Perplexity: 19.1186, Elapsed time: 157.5724s\n", "Model saved: models/decoder-1.ckpt\n", "Model saved: models/encoder-1.ckpt\n", "[ Validation ]\n", "Epoch [0/5], Step [0/40], Average Loss: 0.0236, Perplexity: 20.4422, Elapsed time: 169.6544s\n", "Epoch [0/5], Step [20/40], Average Loss: 0.0242, Perplexity: 22.2154, Elapsed time: 184.3277s\n", "[ Training ]\n", "Epoch [1/5], Step [0/235], Average Loss: 0.0238, Perplexity: 21.1193, Elapsed time: 199.0377s\n", "Epoch [1/5], Step [20/235], Average Loss: 0.0230, Perplexity: 17.8067, Elapsed time: 213.7003s\n", "Epoch [1/5], Step [40/235], Average Loss: 0.0227, Perplexity: 17.6520, Elapsed time: 228.2921s\n", "Epoch [1/5], Step [60/235], Average Loss: 0.0225, Perplexity: 15.8429, Elapsed time: 242.8820s\n", "Epoch [1/5], Step [80/235], Average Loss: 0.0224, Perplexity: 17.6451, Elapsed time: 257.5303s\n", "Epoch [1/5], Step [100/235], Average Loss: 0.0223, Perplexity: 16.0477, Elapsed time: 272.1897s\n", "Epoch [1/5], Step [120/235], Average Loss: 0.0222, Perplexity: 17.8141, Elapsed time: 286.8964s\n", "Epoch [1/5], Step [140/235], Average Loss: 0.0221, Perplexity: 14.2885, Elapsed time: 301.6345s\n", "Epoch [1/5], Step [160/235], Average Loss: 0.0220, Perplexity: 15.8761, Elapsed time: 316.3692s\n", "Epoch [1/5], Step [180/235], Average Loss: 0.0220, Perplexity: 13.4447, Elapsed time: 331.1256s\n", "Epoch [1/5], Step [200/235], Average Loss: 0.0219, Perplexity: 15.5125, Elapsed time: 345.8583s\n", "Epoch [1/5], Step [220/235], Average Loss: 0.0218, Perplexity: 15.3861, Elapsed time: 360.5847s\n", "Model saved: models/decoder-2.ckpt\n", "Model saved: models/encoder-2.ckpt\n", "[ Validation ]\n", "Epoch [1/5], Step [0/40], Average Loss: 0.0214, Perplexity: 15.5435, Elapsed time: 372.5800s\n", "Epoch [1/5], Step [20/40], Average Loss: 0.0220, Perplexity: 17.6198, Elapsed time: 387.0332s\n", "[ Training ]\n", "Epoch [2/5], Step [0/235], Average Loss: 0.0201, Perplexity: 13.0318, Elapsed time: 401.5556s\n", "Epoch [2/5], Step [20/235], Average Loss: 0.0203, Perplexity: 14.2361, Elapsed time: 416.3183s\n", "Epoch [2/5], Step [40/235], Average Loss: 0.0200, Perplexity: 12.9821, Elapsed time: 431.0378s\n", "Epoch [2/5], Step [60/235], Average Loss: 0.0200, Perplexity: 14.6107, Elapsed time: 445.7605s\n", "Epoch [2/5], Step [80/235], Average Loss: 0.0200, Perplexity: 11.8445, Elapsed time: 460.5002s\n", "Epoch [2/5], Step [100/235], Average Loss: 0.0200, Perplexity: 12.4135, Elapsed time: 475.2180s\n", "Epoch [2/5], Step [120/235], Average Loss: 0.0199, Perplexity: 10.8086, Elapsed time: 489.9801s\n", "Epoch [2/5], Step [140/235], Average Loss: 0.0198, Perplexity: 12.4627, Elapsed time: 504.7283s\n", "Epoch [2/5], Step [160/235], Average Loss: 0.0198, Perplexity: 11.7922, Elapsed time: 519.4648s\n", "Epoch [2/5], Step [180/235], Average Loss: 0.0197, Perplexity: 12.2025, Elapsed time: 534.1971s\n", "Epoch [2/5], Step [200/235], Average Loss: 0.0197, Perplexity: 11.0211, Elapsed time: 548.9189s\n", "Epoch [2/5], Step [220/235], Average Loss: 0.0197, Perplexity: 12.0674, Elapsed time: 563.5752s\n", "Model saved: models/decoder-3.ckpt\n", "Model saved: models/encoder-3.ckpt\n", "[ Validation ]\n", "Epoch [2/5], Step [0/40], Average Loss: 0.0204, Perplexity: 13.6435, Elapsed time: 575.5372s\n", "Epoch [2/5], Step [20/40], Average Loss: 0.0209, Perplexity: 15.5702, Elapsed time: 589.9615s\n", "[ Training ]\n", "Epoch [3/5], Step [0/235], Average Loss: 0.0183, Perplexity: 10.3690, Elapsed time: 604.4925s\n", "Epoch [3/5], Step [20/235], Average Loss: 0.0184, Perplexity: 9.4537, Elapsed time: 619.2981s\n", "Epoch [3/5], Step [40/235], Average Loss: 0.0184, Perplexity: 11.3343, Elapsed time: 634.1247s\n", "Epoch [3/5], Step [60/235], Average Loss: 0.0184, Perplexity: 11.1127, Elapsed time: 648.7422s\n", "Epoch [3/5], Step [80/235], Average Loss: 0.0184, Perplexity: 10.6278, Elapsed time: 663.2978s\n", "Epoch [3/5], Step [100/235], Average Loss: 0.0184, Perplexity: 9.3904, Elapsed time: 677.9316s\n", "Epoch [3/5], Step [120/235], Average Loss: 0.0183, Perplexity: 10.6302, Elapsed time: 692.7203s\n", "Epoch [3/5], Step [140/235], Average Loss: 0.0183, Perplexity: 10.3978, Elapsed time: 707.4996s\n", "Epoch [3/5], Step [160/235], Average Loss: 0.0183, Perplexity: 10.3541, Elapsed time: 722.1861s\n", "Epoch [3/5], Step [180/235], Average Loss: 0.0183, Perplexity: 9.9929, Elapsed time: 736.7713s\n", "Epoch [3/5], Step [200/235], Average Loss: 0.0183, Perplexity: 10.6560, Elapsed time: 751.3810s\n", "Epoch [3/5], Step [220/235], Average Loss: 0.0183, Perplexity: 10.0419, Elapsed time: 766.0802s\n", "Model saved: models/decoder-4.ckpt\n", "Model saved: models/encoder-4.ckpt\n", "[ Validation ]\n", "Epoch [3/5], Step [0/40], Average Loss: 0.0199, Perplexity: 12.8181, Elapsed time: 778.1622s\n", "Epoch [3/5], Step [20/40], Average Loss: 0.0203, Perplexity: 14.8366, Elapsed time: 792.7146s\n", "[ Training ]\n", "Epoch [4/5], Step [0/235], Average Loss: 0.0182, Perplexity: 10.3089, Elapsed time: 807.3305s\n", "Epoch [4/5], Step [20/235], Average Loss: 0.0172, Perplexity: 8.6118, Elapsed time: 822.2017s\n", "Epoch [4/5], Step [40/235], Average Loss: 0.0172, Perplexity: 8.6410, Elapsed time: 837.0036s\n", "Epoch [4/5], Step [60/235], Average Loss: 0.0172, Perplexity: 10.4657, Elapsed time: 851.7013s\n", "Epoch [4/5], Step [80/235], Average Loss: 0.0172, Perplexity: 9.3511, Elapsed time: 866.3190s\n", "Epoch [4/5], Step [100/235], Average Loss: 0.0172, Perplexity: 8.9248, Elapsed time: 880.9394s\n", "Epoch [4/5], Step [120/235], Average Loss: 0.0172, Perplexity: 8.8137, Elapsed time: 895.6093s\n", "Epoch [4/5], Step [140/235], Average Loss: 0.0172, Perplexity: 9.2420, Elapsed time: 910.3467s\n", "Epoch [4/5], Step [160/235], Average Loss: 0.0172, Perplexity: 9.5322, Elapsed time: 925.1214s\n", "Epoch [4/5], Step [180/235], Average Loss: 0.0172, Perplexity: 9.2761, Elapsed time: 939.8629s\n", "Epoch [4/5], Step [200/235], Average Loss: 0.0172, Perplexity: 8.9067, Elapsed time: 954.6202s\n", "Epoch [4/5], Step [220/235], Average Loss: 0.0172, Perplexity: 9.2085, Elapsed time: 969.3920s\n", "Model saved: models/decoder-5.ckpt\n", "Model saved: models/encoder-5.ckpt\n", "[ Validation ]\n", "Epoch [4/5], Step [0/40], Average Loss: 0.0197, Perplexity: 12.4852, Elapsed time: 981.4606s\n", "Epoch [4/5], Step [20/40], Average Loss: 0.0200, Perplexity: 14.1601, Elapsed time: 995.9996s\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 17 }, "id": "SkWwxEm_iOC8", "outputId": "26bbe410-6035-4d5e-9348-f72fdb1a5f29" }, "source": [ "# 학습된 모델 저장\n", "from google.colab import files\n", "\n", "files.download('models/encoder-5.ckpt')\n", "files.download('models/decoder-5.ckpt')" ], "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "application/javascript": [ "\n", " async function download(id, filename, size) {\n", " if (!google.colab.kernel.accessAllowed) {\n", " return;\n", " }\n", " const div = document.createElement('div');\n", " const label = document.createElement('label');\n", " label.textContent = `Downloading \"${filename}\": `;\n", " div.appendChild(label);\n", " const progress = document.createElement('progress');\n", " progress.max = size;\n", " div.appendChild(progress);\n", " document.body.appendChild(div);\n", "\n", " const buffers = [];\n", " let downloaded = 0;\n", "\n", " const channel = await google.colab.kernel.comms.open(id);\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", "\n", " for await (const message of channel.messages) {\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", " if (message.buffers) {\n", " for (const buffer of message.buffers) {\n", " buffers.push(buffer);\n", " downloaded += buffer.byteLength;\n", " progress.value = downloaded;\n", " }\n", " }\n", " }\n", " const blob = new Blob(buffers, {type: 'application/binary'});\n", " const a = document.createElement('a');\n", " a.href = window.URL.createObjectURL(blob);\n", " a.download = filename;\n", " div.appendChild(a);\n", " a.click();\n", " div.remove();\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "display_data", "data": { "application/javascript": [ "download(\"download_f018b864-0659-4d46-bb75-c3d0af93b9ad\", \"encoder-5.ckpt\", 172740767)" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "display_data", "data": { "application/javascript": [ "\n", " async function download(id, filename, size) {\n", " if (!google.colab.kernel.accessAllowed) {\n", " return;\n", " }\n", " const div = document.createElement('div');\n", " const label = document.createElement('label');\n", " label.textContent = `Downloading \"${filename}\": `;\n", " div.appendChild(label);\n", " const progress = document.createElement('progress');\n", " progress.max = size;\n", " div.appendChild(progress);\n", " document.body.appendChild(div);\n", "\n", " const buffers = [];\n", " let downloaded = 0;\n", "\n", " const channel = await google.colab.kernel.comms.open(id);\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", "\n", " for await (const message of channel.messages) {\n", " // Send a message to notify the kernel that we're ready.\n", " channel.send({})\n", " if (message.buffers) {\n", " for (const buffer of message.buffers) {\n", " buffers.push(buffer);\n", " downloaded += buffer.byteLength;\n", " progress.value = downloaded;\n", " }\n", " }\n", " }\n", " const blob = new Blob(buffers, {type: 'application/binary'});\n", " const a = document.createElement('a');\n", " a.href = window.URL.createObjectURL(blob);\n", " a.download = filename;\n", " div.appendChild(a);\n", " a.click();\n", " div.remove();\n", " }\n", " " ], "text/plain": [ "" ] }, "metadata": { "tags": [] } }, { "output_type": "display_data", "data": { "application/javascript": [ "download(\"download_52e8f584-191b-4a01-bc58-8ad5600012cf\", \"decoder-5.ckpt\", 16909827)" ], "text/plain": [ "" ] }, "metadata": { "tags": [] } } ] }, { "cell_type": "markdown", "metadata": { "id": "nq9PIqIyTE26" }, "source": [ "#### 결과 확인\n", "\n", "* 평가 데이터셋 중 하나의 이미지를 골라 학습된 모델을 이용하여 결과를 확인합니다." ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "iefQO5jMibUa", "outputId": "3e0bd0fc-6c77-4fde-cb3c-3acd0e8f78f1" }, "source": [ "!wget https://postechackr-my.sharepoint.com/:u:/g/personal/dongbinna_postech_ac_kr/ERnDZFI8KD9OrX8rZGB4zucBLL1C2OQl5zdEIj9M23VH8A?download=1 -O nic_encoder_ResNet101.ckpt\n", "!wget https://postechackr-my.sharepoint.com/:u:/g/personal/dongbinna_postech_ac_kr/EfpMfIRuTy1NndX8U7C70XMBmu6wd3JofEo5T-uyIP8YOA?download=1 -O nic_decoder_ResNet101.ckpt" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "--2020-12-02 21:23:21-- https://postechackr-my.sharepoint.com/:u:/g/personal/dongbinna_postech_ac_kr/ERnDZFI8KD9OrX8rZGB4zucBLL1C2OQl5zdEIj9M23VH8A?download=1\n", "Resolving postechackr-my.sharepoint.com (postechackr-my.sharepoint.com)... 13.107.136.9\n", "Connecting to postechackr-my.sharepoint.com (postechackr-my.sharepoint.com)|13.107.136.9|:443... connected.\n", "HTTP request sent, awaiting response... 302 Found\n", "Location: /personal/dongbinna_postech_ac_kr/Documents/Research/models/nic_encoder.ckpt?originalPath=aHR0cHM6Ly9wb3N0ZWNoYWNrci1teS5zaGFyZXBvaW50LmNvbS86dTovZy9wZXJzb25hbC9kb25nYmlubmFfcG9zdGVjaF9hY19rci9FUm5EWkZJOEtEOU9yWDhyWkdCNHp1Y0JMTDFDMk9RbDV6ZEVJajlNMjNWSDhBP3J0aW1lPVY2OGJmd2lYMkVn [following]\n", "--2020-12-02 21:23:22-- https://postechackr-my.sharepoint.com/personal/dongbinna_postech_ac_kr/Documents/Research/models/nic_encoder.ckpt?originalPath=aHR0cHM6Ly9wb3N0ZWNoYWNrci1teS5zaGFyZXBvaW50LmNvbS86dTovZy9wZXJzb25hbC9kb25nYmlubmFfcG9zdGVjaF9hY19rci9FUm5EWkZJOEtEOU9yWDhyWkdCNHp1Y0JMTDFDMk9RbDV6ZEVJajlNMjNWSDhBP3J0aW1lPVY2OGJmd2lYMkVn\n", "Reusing existing connection to postechackr-my.sharepoint.com:443.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 172740767 (165M) [application/octet-stream]\n", "Saving to: ‘nic_encoder.ckpt’\n", "\n", "nic_encoder.ckpt 100%[===================>] 164.74M 36.8MB/s in 6.4s \n", "\n", "2020-12-02 21:23:29 (25.8 MB/s) - ‘nic_encoder.ckpt’ saved [172740767/172740767]\n", "\n", "--2020-12-02 21:23:29-- https://postechackr-my.sharepoint.com/:u:/g/personal/dongbinna_postech_ac_kr/EfpMfIRuTy1NndX8U7C70XMBmu6wd3JofEo5T-uyIP8YOA?download=1\n", "Resolving postechackr-my.sharepoint.com (postechackr-my.sharepoint.com)... 13.107.136.9\n", "Connecting to postechackr-my.sharepoint.com (postechackr-my.sharepoint.com)|13.107.136.9|:443... connected.\n", "HTTP request sent, awaiting response... 302 Found\n", "Location: /personal/dongbinna_postech_ac_kr/Documents/Research/models/nic_decoder.ckpt?originalPath=aHR0cHM6Ly9wb3N0ZWNoYWNrci1teS5zaGFyZXBvaW50LmNvbS86dTovZy9wZXJzb25hbC9kb25nYmlubmFfcG9zdGVjaF9hY19rci9FZnBNZklSdVR5MU5uZFg4VTdDNzBYTUJtdTZ3ZDNKb2ZFbzVULXV5SVA4WU9BP3J0aW1lPXFtNEZoQWlYMkVn [following]\n", "--2020-12-02 21:23:30-- https://postechackr-my.sharepoint.com/personal/dongbinna_postech_ac_kr/Documents/Research/models/nic_decoder.ckpt?originalPath=aHR0cHM6Ly9wb3N0ZWNoYWNrci1teS5zaGFyZXBvaW50LmNvbS86dTovZy9wZXJzb25hbC9kb25nYmlubmFfcG9zdGVjaF9hY19rci9FZnBNZklSdVR5MU5uZFg4VTdDNzBYTUJtdTZ3ZDNKb2ZFbzVULXV5SVA4WU9BP3J0aW1lPXFtNEZoQWlYMkVn\n", "Reusing existing connection to postechackr-my.sharepoint.com:443.\n", "HTTP request sent, awaiting response... 200 OK\n", "Length: 16909827 (16M) [application/octet-stream]\n", "Saving to: ‘nic_decoder.ckpt’\n", "\n", "nic_decoder.ckpt 100%[===================>] 16.13M 5.24MB/s in 3.1s \n", "\n", "2020-12-02 21:23:34 (5.24 MB/s) - ‘nic_decoder.ckpt’ saved [16909827/16909827]\n", "\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "id": "V0qTKFpg81Ln" }, "source": [ "def load_image(image_path, transform=None):\n", " image = Image.open(image_path).convert('RGB')\n", " image = image.resize([224, 224], Image.LANCZOS)\n", "\n", " if transform is not None:\n", " image = transform(image).unsqueeze(0)\n", " \n", " return image\n", "\n", "image_path = \"./resized_test/images/872622575_ba1d3632cc.jpg\" # 캡션(caption)을 생성할 입력 이미지\n", "encoder_path = \"./nic_encoder_ResNet101.ckpt\" # path for trained encoder\n", "decoder_path = \"./nic_decoder_ResNet101.ckpt\" # path for trained decoder\n", "vocab_path = \"./vocab.pkl\" # path for vocabulary wrapper\n", "\n", "# Model parameters (should be same as paramters in train.py)\n", "embed_size = 256 # dimension of word embedding vectors\n", "hidden_size = 512 # dimension of lstm hidden states\n", "num_layers = 1 # number of layers in lstm" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "KTmwf1jKLXSC" }, "source": [ "# 이미지 전처리(image preprocessing)\n", "transform = transforms.Compose([\n", " transforms.ToTensor(), \n", " transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))])\n", "\n", "# Load vocabulary wrapper\n", "with open(vocab_path, 'rb') as f:\n", " vocab = pickle.load(f)\n", "\n", "# Build models\n", "encoder = EncoderCNN(embed_size).eval() # eval mode (batchnorm uses moving mean/variance)\n", "decoder = DecoderRNN(embed_size, hidden_size, len(vocab), num_layers)\n", "encoder = encoder.to(device)\n", "decoder = decoder.to(device)\n", "\n", "# Load the trained model parameters\n", "encoder.load_state_dict(torch.load(encoder_path))\n", "decoder.load_state_dict(torch.load(decoder_path))\n", "\n", "# Prepare an image\n", "image = load_image(image_path, transform)\n", "image_tensor = image.to(device)\n", "\n", "# Generate an caption from the image\n", "feature = encoder(image_tensor)\n", "sampled_ids = decoder.sample(feature)\n", "sampled_ids = sampled_ids[0].cpu().numpy() # (1, max_seq_length) -> (max_seq_length)\n", "\n", "# Convert word_ids to words\n", "sampled_caption = []\n", "for word_id in sampled_ids: # 하나씩 단어 인덱스를 확인하며\n", " word = vocab.idx2word[word_id] # 단어 문자열로 바꾸어 삽입\n", " sampled_caption.append(word)\n", " if word == '':\n", " break\n", "sentence = ' '.join(sampled_caption)" ], "execution_count": null, "outputs": [] }, { "cell_type": "code", "metadata": { "id": "iyn6oKJrAVL2", "colab": { "base_uri": "https://localhost:8080/", "height": 287 }, "outputId": "fe3b3210-88ff-4efd-fad6-4dcb949cdbd9" }, "source": [ "import matplotlib.pyplot as plt\n", "\n", "# 이미지 및 생성된 캡션(caption) 문장 출력\n", "image = Image.open(image_path)\n", "plt.imshow(np.asarray(image))\n", "plt.show()\n", "print(sentence)" ], "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "tags": [], "needs_background": "light" } }, { "output_type": "stream", "text": [ " a man is climbing a rock wall . \n" ], "name": "stdout" } ] }, { "cell_type": "markdown", "metadata": { "id": "CdvToS3_TSvj" }, "source": [ "#### BLEU Score 계산\n", "\n", "* 테스트(test) 데이터셋을 이용하여 BLEU 점수(score)를 계산합니다." ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "iXqOrtU2AMXO", "outputId": "b2603fe3-9f08-42db-c1e0-bcd43c8ca271" }, "source": [ "predictions = []\n", "answers = []\n", "answers_per_image = []\n", "\n", "total_step = len(test_data_loader)\n", "cnt = 0\n", "\n", "with torch.no_grad():\n", " for i, (images, captions, lengths) in enumerate(test_data_loader):\n", " images = images.to(device)\n", " captions = captions.to(device)\n", "\n", " # 순전파(forward) 진행\n", " features = encoder(images)\n", " sampled_ids_list = decoder.sample(features)\n", "\n", " for index in range(len(images)):\n", " sampled_ids = sampled_ids_list[index].cpu().numpy()\n", "\n", " # 정답 문장(answer sentences)\n", " answer = []\n", " for word_id in captions[index]: # 하나씩 단어 인덱스를 확인하며\n", " word = vocab.idx2word[word_id.item()] # 단어 문자열로 바꾸어 삽입\n", " answer.append(word)\n", " if word == '':\n", " break\n", " answers_per_image.append(answer[1:-1]) # 정답 문장을 삽입 (과 는 제외)\n", "\n", " if (cnt + 1) % 5 == 0: # 이미지당 캡션이 5개씩 존재\n", " answers.append(answers_per_image) # 5개를 한꺼번에 리스트로 삽입\n", " answers_per_image = []\n", "\n", " # 예측한 문장(predicted sentences)\n", " prediction = []\n", " for word_id in sampled_ids: # 하나씩 단어 인덱스를 확인하며\n", " word = vocab.idx2word[word_id] # 단어 문자열로 바꾸어 삽입\n", " prediction.append(word)\n", " if word == '':\n", " break\n", " predictions.append(prediction[1:-1]) # 예측한 문장에 대해서는 1개만 삽입 (과 는 제외)\n", " cnt += 1\n", "\n", " if i % log_step == 0:\n", " print(f\"[ Testing ] Batch size: {i}/{total_step}\")" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "[ Testing ] Batch size: 0/43\n", "[ Testing ] Batch size: 20/43\n", "[ Testing ] Batch size: 40/43\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "d2r16lSYxH9V", "outputId": "0f54ca0d-e2ee-4673-dc91-8ab448ad8e79" }, "source": [ "print(\"예측한 문장의 수:\", len(predictions))\n", "print(\"정답 문장 집합의 수 (5개씩):\", len(answers))" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "예측한 문장의 수: 1091\n", "정답 문장 집합의 수 (5개씩): 1091\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "3tURgRtA85FV", "outputId": "214a6e38-62c0-48aa-e611-ee3229773362" }, "source": [ "index = 2\n", "print(\"[ 정답 캡션들 ]\")\n", "for answer in answers[index]:\n", " print(answer)\n", "\n", "print(\"[ 예측된 캡션 ]\")\n", "print(predictions[index])" ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "[ 정답 캡션들 ]\n", "['a', 'brown', 'and', 'white', 'dog', 'is', 'playing', 'with', 'a', 'toy', 'in', 'a', 'field', 'of', 'green', 'grass', 'and', 'clover', '.']\n", "['a', 'brown', 'and', 'white', 'dog', 'retrieving', 'a', 'white', 'plushie', 'toy', 'in', 'a', 'field', 'of', 'clover', '.']\n", "['a', 'distorted', 'photo', 'of', 'a', 'playing', 'dog', 'in', 'a', 'flower', 'field']\n", "['a', 'dog', 'in', 'grass', 'carrying', 'a', 'toy', 'in', 'its', 'mouth', '.']\n", "['the', 'little', 'brown', 'dog', 'is', 'running', 'through', 'a', 'clover', 'field', 'with', 'a', 'white', 'object', 'in', 'its', 'mouth', '.']\n", "[ 예측된 캡션 ]\n", "['a', 'dog', 'runs', 'through', 'the', 'grass', '.']\n" ], "name": "stdout" } ] }, { "cell_type": "code", "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "ADNIggoZxBaF", "outputId": "02e6bd2d-cf35-4b6d-a1ff-573c5120ea89" }, "source": [ "from torchtext.data.metrics import bleu_score\n", "\n", "bleu = bleu_score(predictions, answers, max_n=4, weights=[0.25, 0.25, 0.25, 0.25])\n", "print(f'Total BLEU Score = {bleu * 100:.2f}')\n", "\n", "individual_bleu1_score = bleu_score(predictions, answers, max_n=4, weights=[1, 0, 0, 0])\n", "individual_bleu2_score = bleu_score(predictions, answers, max_n=4, weights=[0, 1, 0, 0])\n", "individual_bleu3_score = bleu_score(predictions, answers, max_n=4, weights=[0, 0, 1, 0])\n", "individual_bleu4_score = bleu_score(predictions, answers, max_n=4, weights=[0, 0, 0, 1])\n", "\n", "print(f'Individual BLEU1 score = {individual_bleu1_score * 100:.2f}') \n", "print(f'Individual BLEU2 score = {individual_bleu2_score * 100:.2f}') \n", "print(f'Individual BLEU3 score = {individual_bleu3_score * 100:.2f}') \n", "print(f'Individual BLEU4 score = {individual_bleu4_score * 100:.2f}') \n", "\n", "cumulative_bleu1_score = bleu_score(predictions, answers, max_n=4, weights=[1, 0, 0, 0])\n", "cumulative_bleu2_score = bleu_score(predictions, answers, max_n=4, weights=[1/2, 1/2, 0, 0])\n", "cumulative_bleu3_score = bleu_score(predictions, answers, max_n=4, weights=[1/3, 1/3, 1/3, 0])\n", "cumulative_bleu4_score = bleu_score(predictions, answers, max_n=4, weights=[1/4, 1/4, 1/4, 1/4])\n", "\n", "print(f'Cumulative BLEU1 score = {cumulative_bleu1_score * 100:.2f}') \n", "print(f'Cumulative BLEU2 score = {cumulative_bleu2_score * 100:.2f}') \n", "print(f'Cumulative BLEU3 score = {cumulative_bleu3_score * 100:.2f}') \n", "print(f'Cumulative BLEU4 score = {cumulative_bleu4_score * 100:.2f}') " ], "execution_count": null, "outputs": [ { "output_type": "stream", "text": [ "Total BLEU Score = 16.99\n", "Individual BLEU1 score = 60.54\n", "Individual BLEU2 score = 25.05\n", "Individual BLEU3 score = 10.93\n", "Individual BLEU4 score = 5.02\n", "Cumulative BLEU1 score = 60.54\n", "Cumulative BLEU2 score = 38.94\n", "Cumulative BLEU3 score = 25.50\n", "Cumulative BLEU4 score = 16.99\n" ], "name": "stdout" } ] } ] }