{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":5441,"databundleVersionId":38425,"sourceType":"competition"},{"sourceId":7294060,"sourceType":"datasetVersion","datasetId":4230533}],"dockerImageVersionId":30626,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"### Cài đặt các thư viện cần thiết ","metadata":{}},{"cell_type":"code","source":"! pip install ftfy regex tqdm\n! pip install git+https://github.com/openai/CLIP.git","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-12-28T02:43:46.683527Z","iopub.execute_input":"2023-12-28T02:43:46.684234Z","iopub.status.idle":"2023-12-28T02:44:16.908981Z","shell.execute_reply.started":"2023-12-28T02:43:46.684196Z","shell.execute_reply":"2023-12-28T02:44:16.907971Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Giải thích solution\n![image.png](attachment:1f1ca29b-de05-42cb-a09a-30b040f87b04.png)\n\n1. Đề bài: Classify dog and cat images\n\n2. Phương pháp: sử dụng Pretrained Vision Transformer từ mô hình CLIP để rút trích đặc trưng của ảnh và huấn luyện Logistic Classifier để phân lớp vector đặc trưng. \n\n3. Các bước thực hiện:\n* Preproccessing Image: do các bức ảnh có kích thước khác nhau nên cần scale lại cùng một kích thước, các bước preproccess khác như normalize,... đã có preprocess của CLIP cung cấp\n* Image Encoding: có thể sử dụng các mô hình như CNN, ResNest, VGG,...Trong bài này em sử dụng CLIP Visual Encoder vì CLIP là mô hình hình ngôn ngữ ảnh đã huấn luyện trên 400 M cặp ảnh, text nên Visual Encoder của CLIP có thể encode được nhiều concept trong ảnh. Tuy nhiên trong bài này chỉ phân lớp chó và mèo nên cũng chưa khai thác được hết CLIP. \n* Classifier: vector đặc trưng của ảnh sẽ được huấn luyện trên Logistic Classifier để phân lớp thành 2 lớp chó, mèo \n\n3. Dữ liệu huấn luyện: Dogs vs. Cats Redux: Kernels Edition từ Kaggle với 25,000 hình ảnh chó/ mèo\n\n4. Cải thiện mô hình:\n* Thu thập thêm dữ liệu: có thể thu thập dữ liệu từ Internet, dữ liệu từ các tập dữ liệu khác như ImageNet,...\n* Thêm lớp Multi-Layer Perceptron sau khi Encoder để học đặc trưng tốt hơn\n* Sinh thêm dữ liệu Data Augmentation \n","metadata":{},"attachments":{"1f1ca29b-de05-42cb-a09a-30b040f87b04.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAABG4AAACuCAYAAABnakvNAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAANP2SURBVHhe7P0LlF1XdecL/8/7nHqXVJaqbBm7hE1cAidI4GApuBOkmA5yTGIp5H5Iw/RNZOgGGfoGO4wRLBj3Ejn0B3bSAyToARbkg0j0DVdygiM5wXE5HWiJtLkqExOXExuXwY8qWSXV+7wf3/ytfZZUkiVsTAESWn95ee+9HnPNtdY+VWf+a665Yg2DAgICAgICAgICAgICAgICAi4g1OoNl851xJvXgICAgICAgICAgICAgICAgIBzDIG4CQgICAgICAgICAgICAgICDhHEYibgICAgICAgICAgICAgICAgHMUgbgJCAgICAgICAgICAgICAgIOEcRiJuAgICAgICAgICAgICAgICAcxSBuAkICAgICAgICAgICAgICAg4RxGIm4CAgICAgICAgICAgICAgIBzFIG4CQgICAgICAgICAgICAgICDhHEYibgICAgICAgICAgICAgICAgHMUgbgJCAgICAgICAgICAgICAgIOEcRiJuAgICAgICAgICAgICAgICAcxSBuAkICAgICAgICAgICAgICAg4RxGIm4CAgICAgICAgICAgICAgIBzFIG4CQgICAgICAgICAgICAgICDhHEYibgICAgICAgICAgICAgICAgHMUgbgJCAgICAgICAgICAgICAgIOEcRiJuAgICAgICAgICAgICAgICAcxSBuAkICAgICAgICAgICAgICAg4RxGIm4CAgICAgICAgICAgICAgIBzFIG4CQgICAgICAgICAgICAgICDhHEYibgICAgICAgICAgICAgICAgHMUgbgJCAgICAgICAgICAgICAgIOEcRaxia9z8Wvvk//4ca9boQVrdrLBZTrVY7cV+pVBSPx0V3CbvWmvm+nHyuvh11/TP31WrV5aeSKVWqFaVSKSWTSSfXtbFyV9/q1q0eV/qJJxKRgiafPpFFnyCZMFnN9ul0xu7LzXJGYfVNTkN11xfyaZ+IJ0x2zLUHtC2Xy64OcOVWTF0/tQnTwd/78dAG/anfoBdTiTGS0DmRiKtSrrhnmbwGOtnVjdH+pTNpd8+Ez++ffr2+lNfqNgbm1v65sTUYQ8rJ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"}}},{"cell_type":"markdown","source":"## 1. Import thư viện và giải nén data ","metadata":{}},{"cell_type":"code","source":"import numpy as np \nimport pandas as pd \nimport zipfile\nimport matplotlib.pyplot as plt\nimport shutil\nfrom tensorflow import keras\nfrom keras import layers\nfrom keras.models import Sequential\nimport pickle\nfrom tensorflow.keras.optimizers import RMSprop\nfrom keras.preprocessing import image\nfrom keras.preprocessing.image import ImageDataGenerator\n\nfrom tensorflow.keras.applications import VGG16\nfrom tensorflow.keras.callbacks import EarlyStopping\n\nimport os\nimport re\nimport numpy as np\nfrom torch.utils.data import Dataset\nfrom PIL import Image\n\nimport torch\nimport torch.nn.functional as F\nimport numpy as np\n\nfrom torch import nn, optim\nfrom torch.utils.data import DataLoader\nfrom tqdm import tqdm\n\n\n# from utils import check_accuracy, load_checkpoint, save_checkpoint\n\n","metadata":{"execution":{"iopub.status.busy":"2023-12-28T02:44:16.911095Z","iopub.execute_input":"2023-12-28T02:44:16.911431Z","iopub.status.idle":"2023-12-28T02:44:32.476789Z","shell.execute_reply.started":"2023-12-28T02:44:16.911403Z","shell.execute_reply":"2023-12-28T02:44:32.475802Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"zip_df = zipfile.ZipFile(\"/kaggle/input/dogs-vs-cats-redux-kernels-edition/train.zip\", 'r')\nzip_df.extractall(\"/kaggle/working/\")\nzip_df.close()","metadata":{"execution":{"iopub.status.busy":"2023-12-28T02:44:32.478072Z","iopub.execute_input":"2023-12-28T02:44:32.478657Z","iopub.status.idle":"2023-12-28T02:44:44.190601Z","shell.execute_reply.started":"2023-12-28T02:44:32.478627Z","shell.execute_reply":"2023-12-28T02:44:44.189796Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"zip_df = zipfile.ZipFile(\"/kaggle/input/dogs-vs-cats-redux-kernels-edition/test.zip\", 'r')\nzip_df.extractall(\"/kaggle/working/\")\nzip_df.close()","metadata":{"execution":{"iopub.status.busy":"2023-12-28T02:44:44.193212Z","iopub.execute_input":"2023-12-28T02:44:44.193959Z","iopub.status.idle":"2023-12-28T02:44:49.605592Z","shell.execute_reply.started":"2023-12-28T02:44:44.193919Z","shell.execute_reply":"2023-12-28T02:44:49.604676Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import torch\nimport albumentations as A\nfrom albumentations.pytorch import ToTensorV2\n\nDEVICE = \"cuda\" if torch.cuda.is_available() else \"cpu\"\nNUM_WORKERS = 4\nBATCH_SIZE = 20\nPIN_MEMORY = True\nLOAD_MODEL = True\nSAVE_MODEL = True\nCHECKPOINT_FILE = \"b7.pth.tar\"\nWEIGHT_DECAY = 1e-4\nLEARNING_RATE = 1e-4\nNUM_EPOCHS = 1\n\nimport clip\n\nclip.available_models()","metadata":{"execution":{"iopub.status.busy":"2023-12-28T02:44:49.606790Z","iopub.execute_input":"2023-12-28T02:44:49.607095Z","iopub.status.idle":"2023-12-28T02:44:51.496998Z","shell.execute_reply.started":"2023-12-28T02:44:49.607069Z","shell.execute_reply":"2023-12-28T02:44:51.496038Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Load Pretrained Vision Transformer từ mô hình CLIP ","metadata":{}},{"cell_type":"code","source":"from transformers import CLIPProcessor, CLIPModel\nclip_backbone = \"ViT-B/32\"\ndevice = \"cuda:0\" if torch.cuda.is_available() else \"cpu\"\nmodel, preprocess = clip.load(clip_backbone, device=device, jit=False)\n\ndevice","metadata":{"execution":{"iopub.status.busy":"2023-12-28T02:44:51.498097Z","iopub.execute_input":"2023-12-28T02:44:51.498646Z","iopub.status.idle":"2023-12-28T02:45:05.477728Z","shell.execute_reply.started":"2023-12-28T02:44:51.498618Z","shell.execute_reply":"2023-12-28T02:45:05.476713Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Xây dựng DataLoader để load và transform dữ liệu ","metadata":{}},{"cell_type":"code","source":"class CatDog(Dataset):\n    def __init__(self, root, transform=None, images = None):\n        self.images = os.listdir(root)\n        if images == None:\n            self.images.sort(key=lambda x: int(re.findall(r\"\\d+\", x)[0]))\n            self.images = [os.path.join(root, image) for image in self.images]\n        else:\n            self.images = images\n        self.root = root\n        self.transform = transform\n\n    def __len__(self):\n        return len(self.images)\n\n    def __getitem__(self, index):\n        file = self.images[index]\n        img = np.array(Image.open(file))\n#         print(img.shape)\n        if self.transform is not None:\n            img = self.transform(img)\n\n        if \"dog\" in file:\n            label = 1\n        elif \"cat\" in file:\n            label = 0\n        else:\n            label = -1\n\n        return img, label\n    \n\nimport torchvision.transforms as transforms\ntrain_dataset = CatDog(root=\"/kaggle/working/train\", transform=transforms.Compose([transforms.ToPILImage(),transforms.Resize((224, 224)),  preprocess]))\n\ntrain_loader = DataLoader(\n        train_dataset,\n        shuffle=True,\n        batch_size=BATCH_SIZE,\n        num_workers=NUM_WORKERS,\n        pin_memory=True,\n    )\n\n# for images, labels in tqdm(train_loader):\n#     print(images)","metadata":{"execution":{"iopub.status.busy":"2023-12-28T02:45:05.479081Z","iopub.execute_input":"2023-12-28T02:45:05.479382Z","iopub.status.idle":"2023-12-28T02:45:05.608023Z","shell.execute_reply.started":"2023-12-28T02:45:05.479355Z","shell.execute_reply":"2023-12-28T02:45:05.606956Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_features(dataloader):\n    all_features = []\n    all_labels = []\n    \n    with torch.no_grad():\n        for images, labels in tqdm(dataloader):\n            features = model.encode_image(images.to(device))\n\n            all_features.append(features)\n            all_labels.append(labels)\n\n    return torch.cat(all_features).cpu().numpy(), torch.cat(all_labels).cpu().numpy()","metadata":{"execution":{"iopub.status.busy":"2023-12-28T02:45:05.609582Z","iopub.execute_input":"2023-12-28T02:45:05.609930Z","iopub.status.idle":"2023-12-28T02:45:06.600125Z","shell.execute_reply.started":"2023-12-28T02:45:05.609901Z","shell.execute_reply":"2023-12-28T02:45:06.599065Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_features, train_labels = get_features(train_loader)","metadata":{"execution":{"iopub.status.busy":"2023-12-28T02:45:06.601363Z","iopub.execute_input":"2023-12-28T02:45:06.601722Z","iopub.status.idle":"2023-12-28T02:46:05.602808Z","shell.execute_reply.started":"2023-12-28T02:45:06.601694Z","shell.execute_reply":"2023-12-28T02:46:05.601521Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 2. Train Classifer ","metadata":{}},{"cell_type":"code","source":"from sklearn.linear_model import LogisticRegression\nclassifier = LogisticRegression(random_state=0, C=0.316, max_iter=2000, verbose=1)\nclassifier.fit(train_features, train_labels)\n\n# Evaluate using the logistic regression classifier\npredictions = classifier.predict(train_features)\naccuracy = np.mean((train_labels == predictions).astype(float)) * 100.\nprint(f\"Accuracy = {accuracy:.3f}\")","metadata":{"execution":{"iopub.status.busy":"2023-12-28T02:46:05.607273Z","iopub.execute_input":"2023-12-28T02:46:05.608140Z","iopub.status.idle":"2023-12-28T02:46:07.899736Z","shell.execute_reply.started":"2023-12-28T02:46:05.608097Z","shell.execute_reply":"2023-12-28T02:46:07.898438Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Độ chính xác trên tập train Accuracy = 99.812. \n\nSave Logistic Classifier ","metadata":{}},{"cell_type":"code","source":"with open('model.pkl','wb') as f:\n    pickle.dump(classifier,f)","metadata":{"execution":{"iopub.status.busy":"2023-12-28T02:46:07.901792Z","iopub.execute_input":"2023-12-28T02:46:07.902592Z","iopub.status.idle":"2023-12-28T02:46:07.910146Z","shell.execute_reply.started":"2023-12-28T02:46:07.902545Z","shell.execute_reply":"2023-12-28T02:46:07.908614Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## 3. Prediction ","metadata":{}},{"cell_type":"code","source":"with open('/kaggle/input/image-classification/model.pkl', 'rb') as f:\n    classifier = pickle.load(f)","metadata":{"execution":{"iopub.status.busy":"2023-12-28T02:46:07.912001Z","iopub.execute_input":"2023-12-28T02:46:07.912595Z","iopub.status.idle":"2023-12-28T02:46:07.925262Z","shell.execute_reply.started":"2023-12-28T02:46:07.912553Z","shell.execute_reply":"2023-12-28T02:46:07.923766Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import os, cv2, random\nIMG_SIZE = 224\ndirectory_path = '/kaggle/working/test'\nimages = os.listdir(directory_path)\nimages.sort(key=lambda x: int(re.findall(r\"\\d+\", x)[0]))\nsorted_file_paths = [os.path.join(directory_path, image) for image in images]","metadata":{"execution":{"iopub.status.busy":"2023-12-28T02:46:07.927140Z","iopub.execute_input":"2023-12-28T02:46:07.927712Z","iopub.status.idle":"2023-12-28T02:46:08.042884Z","shell.execute_reply.started":"2023-12-28T02:46:07.927668Z","shell.execute_reply":"2023-12-28T02:46:08.042070Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_predict(paths, root):\n    test_dataset = CatDog(root=root, transform=transforms.Compose([transforms.ToPILImage(),transforms.Resize((224, 224)),  preprocess]), images = paths)\n    test_loader = DataLoader(\n            test_dataset,\n            batch_size=BATCH_SIZE,\n            num_workers=NUM_WORKERS,\n            pin_memory=True,\n        )\n    test_features, test_labels = get_features(test_loader)\n    predictions = classifier.predict(test_features)\n    return predictions","metadata":{"execution":{"iopub.status.busy":"2023-12-28T02:46:08.047186Z","iopub.execute_input":"2023-12-28T02:46:08.048096Z","iopub.status.idle":"2023-12-28T02:46:08.054415Z","shell.execute_reply.started":"2023-12-28T02:46:08.048055Z","shell.execute_reply":"2023-12-28T02:46:08.053394Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"#### Input: List đường dẫn đến ảnh cần phân lớp và đường dẫn đến folder chứa ảnh cần phân lớp","metadata":{}},{"cell_type":"code","source":"random_file_paths = random.sample(sorted_file_paths, 25)\npredict_class = list(zip(random_file_paths, get_predict(random_file_paths,\"/kaggle/working/test\")))\npredict_class","metadata":{"execution":{"iopub.status.busy":"2023-12-28T02:46:08.055651Z","iopub.execute_input":"2023-12-28T02:46:08.056009Z","iopub.status.idle":"2023-12-28T02:46:08.469228Z","shell.execute_reply.started":"2023-12-28T02:46:08.055935Z","shell.execute_reply":"2023-12-28T02:46:08.467659Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Chọn ngẫu nhiên 25 ảnh từ tập ảnh và thực hiện phân lớp","metadata":{}},{"cell_type":"code","source":"import matplotlib.image as mpimg\ndef show_images(data, isTest=False):\n    f, ax = plt.subplots(5,5, figsize=(15,15))\n    for i,data in enumerate(data[:25]):\n        img_num = data[1]\n        img_data = data[0]\n        img_data = mpimg.imread(data[0])\n        label = img_num\n        if label  == 1: \n            str_label='Dog'\n        elif label == 0: \n            str_label='Cat'\n        if(isTest):\n            str_label=\"None\"\n        ax[i//5, i%5].imshow(img_data)\n        ax[i//5, i%5].axis('off')\n        ax[i//5, i%5].set_title(\"Predict Label: {}\".format(str_label))\n    plt.show()\nshow_images(predict_class)\n","metadata":{"execution":{"iopub.status.busy":"2023-12-28T02:46:08.476985Z","iopub.execute_input":"2023-12-28T02:46:08.478140Z","iopub.status.idle":"2023-12-28T02:46:11.527305Z","shell.execute_reply.started":"2023-12-28T02:46:08.478066Z","shell.execute_reply":"2023-12-28T02:46:11.525898Z"},"trusted":true},"execution_count":null,"outputs":[]}]}