{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load in \n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the \"../input/\" directory.\n# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory\n\nimport os\nprint(os.listdir(\"../input\"))\n\n# Any results you write to the current directory are saved as output.","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"제가 올리는 코드는 마음것 이용하셔도 됩니다.\n올라온 Weight들 가져다 쓰셔도 좋습니다. \n\n다만 조금이라도 도움이 되셨다면,이용하실때 출처 밝혀주시고, 투표 한번 해주세요. 작성하신 Kernel 공개, 또는 Discussion에서 같이 공유하고 더 나은 방법이 있는지 같이 고민했으면 좋겠습니다. \n\n제가 한 결과를 공유 드리는 이유는 전 이론에 대해서 약합니다. 해서 제 공개된 커널로 다른 분들의 도움을 받고 싶어서입니다.\n\nkeras 사용법, 함수 사용법에 익숙하시지 않으신 분들에게 조금이라도 도움이 되셨으면 하는 마음도 있습니다.\n(그렇다고 제가 올린 Kernel이 아주 나이스한 문법이라는 뜻 아닙니다.)\n\n단순 복사에 Leader보드 등록만 하시는 분들은 없으실 거라 믿습니다.\n\n하기 Kernel 내용을 요약하면\n1. Xception 사전 훈련 모델을 사용\n2. StratifiedKFold로 5 Fold로 나눠서 훈련 및 검증 수행\n3. 각 Fold 마다 val_loss가 가작 작게 나온 것에 대해서 Weight 파일로 저장\n4. 훈련에서 나온 5개의 Weight로 예측 진행\n5. 5개의 예측결과 평균(앙상블)\n\n추가로 StratifiedKFold와 Keras의 ImageDataGenerator()를 같이 운영했습니다."},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"import warnings\nimport seaborn as sns\nimport matplotlib.pylab as plt\nimport PIL\nfrom sklearn.model_selection import StratifiedKFold, KFold\n\nfrom keras import backend as K\nfrom keras.preprocessing.image import ImageDataGenerator\n\nfrom keras.applications import Xception\n\nfrom keras.callbacks import EarlyStopping, ReduceLROnPlateau, ModelCheckpoint\nfrom keras import layers, models, optimizers","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"warnings.filterwarnings('ignore')\nK.image_data_format()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"IMAGE_SIZE = 299\nBATCH_SIZE = 32\nEPOCHS = 100\nk_folds=5","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"* IMAGE_SIZE는 사용하는 사전훈련 모델별 추천하는 이미지 사이즈를 주기 위해서입니다.\n\nXception의 경우 299 * 299임.\n\n![image.png](attachment:image.png)\n\n* BATCH_SIZE 를 4로 한 이유는 제 PC에서 이보다 크게 주면 자원 부족으로 모델 훈련 진행이 불가함. 자원 되시는 분들으 Batch 사이즈 늘려 잡으시면 훈련시간 단축이 가능합니다.\n\n* EPOCHS 는 100로 주었지만 EarlyStoping 함수와 같이 사용하기 때문에 실제로 대략 30Epoch 이하에서 Fold별 훈련이 중단 됩니다.\n\n* Folds는 5개로 한 이유는 이렇게 하여 매 Fold당 검증 데이터 20% 맞추려는 의도 입니다.","attachments":{"image.png":{"image/png":"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kxWC5Vo3EZUaaAsRIAJEgAgQASJABF5vAof63DV7SQyFF8SqAWAj0KUvj5WUZPm9GvXQi314RNP0ZL/iS3HaevWq6t2B/4IL2almZ4Go086SRtdeqdXuqmbXFtnw3to+bV0bGzaIChIBIkAEiAARIAJE4BUg0FQahmxvcSYFeYvab41AmRWvEigLu+oFvGrqwF54Uw++S4pX0StMF5ezYbjp6dLqtLNEee2VWjcIVcyuLbCJvbV92ro2NmESFSUCRIAIEAEiQASIwEsncKhg+aVb3XIDOERCCZicw6iXgdFy1SSQCBABIkAEiAARIAJE4JUlcKg0jFe2NWQYESACRIAIEAEiQASIABFoIQEaWW4hTBJFBIgAESACRIAIEAEi0F4EKFhuL39Sa4gAESACRIAIEAEiQARaSICC5RbCJFFEgAgQASJABIgAESAC7UWAguX28ie1hggQASJABIgAESACRKCFBChYbiFMEkUEiAARIAJEgAgQASLQXgQoWG4vf1JriAARIAJEgAgQASJABFpIgILlFsIkUUSACBABIkAEiAARIALtRYCC5fbyJ7WGCBABIkAEiAARIAJEoIUEKFhuIUwSRQSIABEgAkSACBABItBeBChYbi9/UmuIABEgAkSACBABIkAEWkiAguUWwiRRRIAIEAEiQASIABEgAu1FgILl9vIntYYIEAEiQASIABEgAkSghQQoWG4hTBJFBIgAESACRIAIEAEi0F4EKFhuL39Sa4gAESACRIAIEAEiQARaSICC5RbCJFFEgAgQASJABIgAESAC7UWAguX28ie1hggQASJABIgAESACRKCFBChYbiFMEkUEiAARIAJEgAgQASLQXgQoWG4vf1JriAARIAJEgAgQASJABFpIgILlFsIkUUSACBABIkAEiAARIALtRYCC5fbyJ7WGCBABIkAEiAARIAJEoIUEKFhuIUwSRQSIABEgAkSACBABItBeBChYbi9/UmuIABEgAkSACBABIkAEWkiAguUWwiRRRIAIEAEiQASIABEgAu1FgILl9vIntYYIEAEiQASIABEgAkSghQQoWG4hTBJFBIgAESACRIAIEAEi0F4EKFhuL39Sa4gAESACRIAIEAEiQARaSICC5RbCJFFEgAgQASJABIgAESAC7UWAguX28ie1hggQASJABIgAESACRKCFBChYbiFMEkUE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"}}},{"metadata":{"trusted":true},"cell_type":"code","source":"DATA_PATH = '../input'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"TRAIN_IMG_PATH = os.path.join(DATA_PATH, 'train')\nTEST_IMG_PATH = os.path.join(DATA_PATH, 'test')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train = pd.read_csv(os.path.join(DATA_PATH, 'train.csv'))\ndf_test = pd.read_csv(os.path.join(DATA_PATH, 'test.csv'))\ndf_class = pd.read_csv(os.path.join(DATA_PATH, 'class.csv'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"plt.figure(figsize=(15,6))\nsns.countplot('class', data=df_train)\nplt.show()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-output":true},"cell_type":"code","source":"df_train['class'].value_counts()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"119번 유형이 84개로 제일 많고,\n\n136번 유형이 30개로 가장 적음."},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train['class'].value_counts().mean()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"각 차종별 평균 분포개수는 51개임."},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train['class'].value_counts().describe()","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"위의 내용을 요약하여 출력해 보면,\n최대값 84, 최소값 30, 평균51로 편차가 좀 있다고 볼 수도 있습니다.\n그래서 KFold대신 StratifiedKFold를 사용하였습니다."},{"metadata":{"trusted":true},"cell_type":"code","source":"def crop_boxing_img(img_name, margin=-4, size=(IMAGE_SIZE,IMAGE_SIZE)):\n    if img_name.split('_')[0] == 'train':\n        PATH = TRAIN_IMG_PATH\n        data = df_train\n    else:\n        PATH = TEST_IMG_PATH\n        data = df_test\n\n    img = PIL.Image.open(os.path.join(PATH, img_name))\n    pos = data.loc[data[\"img_file\"] == img_name, ['bbox_x1', 'bbox_y1', 'bbox_x2', 'bbox_y2']].values.reshape(-1)\n\n    width, height = img.size\n    x1 = max(0, pos[0] - margin)\n    y1 = max(0, pos[1] - margin)\n    x2 = min(pos[2] + margin, width)\n    y2 = min(pos[3] + margin, height)\n\n    return img.crop((x1, y1, x2, y2)).resize(size)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"crop_boxing은 \n\n [Daehun Gwak님 커널](https://www.kaggle.com/daehungwak/keras-how-to-use-pretrained-model)\n\n [허태명님 커널](https://www.kaggle.com/tmheo74/3rd-ml-month-car-image-cropping)\n \n 에서 가져왔습니다."},{"metadata":{"trusted":true},"cell_type":"code","source":"TRAIN_CROPPED_PATH = '../cropped_train'\nTEST_CROPPED_PATH = '../cropped_test'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"if (os.path.isdir(TRAIN_CROPPED_PATH) == False):\n    os.mkdir(TRAIN_CROPPED_PATH)\n\nif (os.path.isdir(TEST_CROPPED_PATH) == False):\n    os.mkdir(TEST_CROPPED_PATH)\n\nfor i, row in df_train.iterrows():\n    cropped = crop_boxing_img(row['img_file'])\n    cropped.save(os.path.join(TRAIN_CROPPED_PATH, row['img_file']))\n\nfor i, row in df_test.iterrows():\n    cropped = crop_boxing_img(row['img_file'])\n    cropped.save(os.path.join(TEST_CROPPED_PATH, row['img_file']))","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"Cropping한 이미지 저장하기 위한 디렉토리 생성및 Cropping"},{"metadata":{"trusted":true},"cell_type":"code","source":"df_train['class'] = df_train['class'].astype('str')\ndf_train = df_train[['img_file', 'class']]\ndf_test = df_test[['img_file']]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"model_path = './'","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"def get_callback(model_name, patient):\n    ES = EarlyStopping(\n        monitor='val_loss', \n        patience=patient, \n        mode='min', \n        verbose=1)\n    RR = ReduceLROnPlateau(\n        monitor = 'val_loss', \n        factor = 0.5, \n        patience = patient / 2, \n        min_lr=0.000001, \n        verbose=1, \n        mode='min')\n    MC = ModelCheckpoint(\n        filepath=model_name, \n        monitor='val_loss', \n        verbose=1, \n        save_best_only=True, \n        mode='min')\n\n    return [ES, RR, MC]","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"* EarlyStoping은 인자인 Patient가 10으로 들어온다면, Val_loss가 10회 이상 좋아지지 않으면 Stop.\n* ReduceLROnPlateau는 Patient/2 회만큼 Val_loss가 좋아지지 않으면 learing late를 반으로 줄이는 용도.\n* ModelCheckPoint는 Val_loss가 가장 좋은(가장작은) 경우에 해당 훈련 Weight 파일로 저장.\n\nPC자원이 되시는 분들 여기에 Tensorboard도 추가하시면 실시간 훈련 그래프를 확인해 보실 수 있습니다."},{"metadata":{"trusted":true},"cell_type":"code","source":"def get_model(model_name, iamge_size):\n    base_model = model_name(weights='imagenet', input_shape=(iamge_size,iamge_size,3), include_top=False)\n    #base_model.trainable = False\n    model = models.Sequential()\n    model.add(base_model)\n    model.add(layers.GlobalAveragePooling2D())\n    model.add(layers.Dense(1024, activation='relu'))\n    model.add(layers.Dropout(0.25))\n    model.add(layers.Dense(1024, activation='relu'))\n    model.add(layers.Dropout(0.25))\n \n    model.add(layers.Dense(196, activation='softmax'))\n    model.summary()\n\n    optimizer = optimizers.RMSprop(lr=0.0001)\n    model.compile(loss='categorical_crossentropy', optimizer=optimizer, metrics=['acc'])\n\n    return model","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"사전 훈련모델인 Xception에 층을 더해서 훈련 시키는 구조로 모델을 구성하였습니다.\nDropout은 과적합을 최대한 줄여볼 용도로 추가했습니다. (0.5)면 반을 날려 버린다는 의미입니다.\n타노스의 손가락 튕기기"},{"metadata":{"trusted":true},"cell_type":"code","source":"train_datagen = ImageDataGenerator(\n    rescale=1./255,\n    #featurewise_center= True,  # set input mean to 0 over the dataset\n    #samplewise_center=True,  # set each sample mean to 0\n    #featurewise_std_normalization= True,  # divide inputs by std of the dataset\n    #samplewise_std_normalization=True,  # divide each input by its std\n    rotation_range=30,\n    width_shift_range=0.2,\n    height_shift_range=0.2,\n    horizontal_flip=True,\n    vertical_flip=False,\n    zoom_range=0.3,\n    shear_range=0.3,\n    #brightness_range=(1, 1.2),\n    fill_mode='nearest'\n    )\n\nvalid_datagen = ImageDataGenerator(\n    rescale=1./255,\n    #featurewise_center= True,  # set input mean to 0 over the dataset\n    #samplewise_center=True,  # set each sample mean to 0\n    #featurewise_std_normalization= True,  # divide inputs by std of the dataset\n    #samplewise_std_normalization=True  # divide each input by its std\n    )\ntest_datagen = ImageDataGenerator(\n    rescale=1./255\n    #featurewise_center= True,  # set input mean to 0 over the dataset\n    #samplewise_center=True,  # set each sample mean to 0\n    #featurewise_std_normalization= True,  # divide inputs by std of the dataset\n    #samplewise_std_normalization=True,  # divide each input by its std\n    )","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"![image.png](attachment:image.png)\n여기서 다루는 자동차 이미지 분류의 경우\n그림에서 \n\n1.Class수가 196개로,\n\n2.Fold를 5개로,\n\n3.Testing Set이라는 명칭 대신 Valid Set로 이해하시면 됩니다.\n\n각 클래스별 훈련데이터의 분포가 다르니 StratifiedKFold를 사용하게 되면 각 클래스 분포에 맞춰서\n폴드를 나누게 됩니다. \n(앞쪽에서 살펴본 결과 119번 Class의 경우 84개의 샘플이 존재했고, 136번의 경우 30개의 샘플이 존재.\n즉 각 클래스별 샘플 수의 비율을 유지하면서 Fold를 나누기 위함.)\n","attachments":{"image.png":{"image/png":"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"}}},{"metadata":{"trusted":true,"_kg_hide-output":true},"cell_type":"code","source":"skf = StratifiedKFold(n_splits=k_folds, random_state=2019)\n#skf = KFold(n_splits=k_folds, random_state=2019)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_kg_hide-output":true},"cell_type":"code","source":"j = 1\nmodel_xception_names = []\nfor (train_index, valid_index) in skf.split(\n    df_train['img_file'], \n    df_train['class']):\n\n    traindf = df_train.iloc[train_index, :].reset_index()\n    validdf = df_train.iloc[valid_index, :].reset_index()\n\n    print(\"=========================================\")\n    print(\"====== K Fold Validation step => %d/%d =======\" % (j,k_folds))\n    print(\"=========================================\")\n    \n    train_generator = train_datagen.flow_from_dataframe(\n        dataframe=traindf,\n        directory=TRAIN_CROPPED_PATH,\n        x_col='img_file',\n        y_col='class',\n        target_size= (IMAGE_SIZE, IMAGE_SIZE),\n        color_mode='rgb',\n        class_mode='categorical',\n        batch_size=BATCH_SIZE,\n        seed=2019,\n        shuffle=True\n        )\n\n    valid_generator = valid_datagen.flow_from_dataframe(\n        dataframe=validdf,\n        directory=TRAIN_CROPPED_PATH,\n        x_col='img_file',\n        y_col='class',\n        target_size= (IMAGE_SIZE, IMAGE_SIZE),\n        color_mode='rgb',\n        class_mode='categorical',\n        batch_size=BATCH_SIZE,\n        seed=2019,\n        shuffle=True\n        )\n\n    model_name = model_path + str(j) + '_xception.hdf5'\n    model_xception_names.append(model_name)\n    \n    model_xception = get_model(Xception, IMAGE_SIZE)\n    \n    try:\n        model_xception.load_weights(model_name)\n    except:\n        pass\n        \n    history = model_xception.fit_generator(\n        train_generator,\n        steps_per_epoch=len(traindf.index) / BATCH_SIZE,\n        epochs=EPOCHS,\n        validation_data=valid_generator,\n        validation_steps=len(validdf.index) / BATCH_SIZE,\n        verbose=1,\n        shuffle=False,\n        callbacks = get_callback(model_name, 6)\n        )\n        \n    j+=1","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"5개의 Fold를 훈련하면서 각 폴드별 Val loss가 가장 작은 model weight를 저장합니다.\n\n훈련이 끝나면 5개의 Weight파일이 생성됩니다.\n\n자원이 되시면 여기에 xception 이외에 다른 사전 훈련 모델을 하나 더 추가하시고, 나중에 그 모델까지 통합하여 앙상블 하셔도 될 듯 합니다."},{"metadata":{"trusted":true},"cell_type":"code","source":"test_generator = test_datagen.flow_from_dataframe(\n    dataframe=df_test,\n    directory=TEST_CROPPED_PATH,\n    x_col='img_file',\n    y_col=None,\n    target_size= (IMAGE_SIZE, IMAGE_SIZE),\n    color_mode='rgb',\n    class_mode=None,\n    batch_size=BATCH_SIZE,\n    shuffle=False\n)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"xception_prediction = []\nfor i, name in enumerate(model_xception_names):\n    model_xception = get_model(Xception, IMAGE_SIZE)\n    model_xception.load_weights(name)\n    test_generator.reset()\n    pred = model_xception.predict_generator(\n        generator=test_generator,\n        steps = len(df_test)/BATCH_SIZE,\n        verbose=1\n    )\n    xception_prediction.append(pred)\n\ny_pred_xception = np.mean(xception_prediction, axis=0)","execution_count":null,"outputs":[]},{"metadata":{},"cell_type":"markdown","source":"5개의 Fold에서 훈련한 결과들(Weight)를 불러들려서 5번 예측하고 평균.\n\n위에서도 말씀드렸지만 자원이 되시는 분들은 결과 다른 사전훈련 모델을 추가하여 같이 돌리시고,\n\nA모델 5Fold 예측평균 + B모델 5Fold 평균..... 이런식으로 하시면 조금이라도점수가 좋아지지 않을까 합니다.\n"},{"metadata":{"trusted":true},"cell_type":"code","source":"preds_class_indices=np.argmax(y_pred_xception, axis=1)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"labels = (train_generator.class_indices)\nlabels = dict((v,k) for k,v in labels.items())\nfinal_pred = [labels[k] for k in preds_class_indices]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"submission = pd.read_csv(os.path.join(DATA_PATH, 'sample_submission.csv'))\nsubmission[\"class\"] = final_pred\nsubmission.to_csv(\"submission.csv\", index=False)\nsubmission.head()","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}