{"cells":[{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","collapsed":true},"cell_type":"markdown","source":"### This model combines two branches: MobileNet and Bidirectional LSTM. \n\nThe Mobilenet branch is largely based on Beluga's kernel https://www.kaggle.com/gaborfodor/greyscale-mobilenet-lb-0-892 and the LSTM branch is inspired by Kevin's kernel, with modifications https://www.kaggle.com/kmader/quickdraw-baseline-lstm-reading-and-submission \n\nThe performance depends on what you use for the two branches. I got up to 0.925 using this architecture. Inspired by this paper here: https://arxiv.org/abs/1804.01401\n![image.png](attachment:image.png)","attachments":{"image.png":{"image/png":"iVBORw0KGgoAAAANSUhEUgAAAwUAAAEWCAYAAAA3uDtlAAAgAElEQVR4AeydB3hUVdrH/1OSTHohPYSSAiaEBJIgkEDovSjdgooiuqKuXVzXrmtdFfXbXXexAGIhIgooXZCOlNA7IbSQAuk9mcl8z7lhJjOZdidzp+a9z5Nn7j33lPf87p3Jfe857/+IlEqlErQRASJABIgAESACRIAIEAEi0GEJiDtsz6njRIAIEAEiQASIABEgAkSACHAEyCmgG4EIEAEiQASIABEgAkSACHRwAuQUdPAbgLpPBIgAESACRIAIEAEiQATIKaB7gAgQASJABIgAESACRIAIdHAC5BR08BuAuk8EiAARIAJEgAgQASJABMgpoHuACBABIkAEiAARIAJEgAh0cALkFHTwG4C6TwSIABEgAkSACBABIkAEyCmge4AIEAEiQASIABEgAkSACHRwAuQUdPAbgLpPBIgAESACRIAIEAEiQATIKaB7gAgQASJABIgAESACRIAIdHAC5BR08BuAuk8EiAARIAJEgAgQASJABMgpoHuACBABIkAEiAARIAJEgAh0cALkFHTwG4C6TwSIABEgAkSACBABIkAEyCmge4AIEAEiQASIABEgAkSACHRwAuQUdPAbgLpPBIgAESACRIAIEAEiQATIKaB7gAgQASJABIgAESACRIAIdHAC5BR08BuAuk8EiAARIAJEgAgQASJABMgpoHuACBABIkAEiAARIAJEgAh0cALkFHTwG4C6TwSIABEgAkSACBABIkAEyCmge4AIEAEiQASIABEgAkSACHRwAuQUdPAbgLpPBIgAESACRIAIEAEiQASkhKDjEjh/7jzi4uM4AGy/urpKDaNP377c/uFDh9RpPj6+6vz60qurq3H+3Dl1/vCICISHh8Pc9MLCQhQWFKjriYuPh4+PDwylG7Ld3HRmJ2tH6I3ZwTYVayHYGWJhbrq5jPTZzvpmTrql94PqvrJ2Xw2xsWZfDbFxxr6qfi8M9clQuqG+Cv29pPqIABEgAkRAmwA5Bdo8XP5o2x9/4OeVPyMiMhLx8fFgD1hsK75erNX36uoa7ri2rk6dzvZZ/pqaGmimi8USsPw1NbVa6cVFxWAPBm3T2THLX1RUrJVfld42P8sHiMDq02yX5WPptbXa7bL83t7eOumqPhnq69LFSzgHRiwW47Ypt3N81J03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"}}},{"metadata":{"_kg_hide-input":true,"_uuid":"ce6d2aa7de1fa341144def7d3a5b1ffdea26bc91","trusted":true},"cell_type":"code","source":"%matplotlib inline\nfrom IPython.core.interactiveshell import InteractiveShell\nInteractiveShell.ast_node_interactivity = \"all\"\nimport os\nimport ast\nimport datetime as dt\nimport matplotlib.pyplot as plt\nplt.rcParams['figure.figsize'] = [16, 10]\nplt.rcParams['font.size'] = 14\nimport seaborn as sns\nimport cv2\nimport pandas as pd\nimport numpy as np\nimport tensorflow as tf\nimport keras\nfrom keras.layers import Conv2D, MaxPooling2D, Input, concatenate\nfrom keras.layers import Dense, Dropout, Flatten, Activation,GlobalAveragePooling2D\nfrom keras.metrics import categorical_accuracy, top_k_categorical_accuracy, categorical_crossentropy\nfrom keras.models import Sequential, Model\nfrom keras.callbacks import EarlyStopping, ReduceLROnPlateau, ModelCheckpoint\nfrom keras.optimizers import Adam\nfrom keras.applications import MobileNet\nfrom keras.applications.mobilenet import preprocess_input\nfrom ast import literal_eval\nfrom keras.preprocessing.sequence import pad_sequences\nstart = dt.datetime.now()","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"_uuid":"978b1e827e598c53df3ef09838a6d85591d83052","trusted":true},"cell_type":"code","source":"\nDP_DIR = '../input/shuffle-csvs/'\nINPUT_DIR = '../input/quickdraw-doodle-recognition/'\nBASE_SIZE = 256\nNCSVS = 100\nNCATS = 340\nnp.random.seed(seed=1987)\ntf.set_random_seed(seed=1987)\n\ndef f2cat(filename: str) -> str:\n    return filename.split('.')[0]\n\ndef list_all_categories():\n    files = os.listdir(os.path.join(INPUT_DIR, 'train_simplified'))\n    return sorted([f2cat(f) for f in files], key=str.lower)","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-input":true,"_uuid":"b2fcd1a08ae1ae0619be38a113a244eb6515b63b","trusted":true},"cell_type":"code","source":"def apk(actual, predicted, k=3):\n    \"\"\"\n    Source: https://github.com/benhamner/Metrics/blob/master/Python/ml_metrics/average_precision.py\n    \"\"\"\n    if len(predicted) > k:\n        predicted = predicted[:k]\n    score = 0.0\n    num_hits = 0.0\n    for i, p in enumerate(predicted):\n        if p in actual and p not in predicted[:i]:\n            num_hits += 1.0\n            score += num_hits / (i + 1.0)\n    if not actual:\n        return 0.0\n    return score / min(len(actual), k)\n\ndef mapk(actual, predicted, k=3):\n    \"\"\"\n    Source: https://github.com/benhamner/Metrics/blob/master/Python/ml_metrics/average_precision.py\n    \"\"\"\n    return np.mean([apk(a, p, k) for a, p in zip(actual, predicted)])\n\ndef preds2catids(predictions):\n    return pd.DataFrame(np.argsort(-predictions, axis=1)[:, :3], columns=['a', 'b', 'c'])\n\ndef top_3_accuracy(y_true, y_pred):\n    return top_k_categorical_accuracy(y_true, y_pred, k=3)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"264156422a95e4b350886d558d516ae8bd2e25c0"},"cell_type":"markdown","source":"## MobileNet branch\n\nMobileNets are based on a streamlined architecture that uses depthwise separable convolutions to build light weight deep neural networks.\n\n[MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications](https://arxiv.org/pdf/1704.04861.pdf)"},{"metadata":{"_uuid":"af3e71797a9c146c36f9da90766571e09caa1a4f"},"cell_type":"markdown","source":"### Change number of epochs here when you want to train. 2 epochs for illustration only. "},{"metadata":{"_uuid":"54e5f0c637195b6624e2f3e6db5e7f8990e14eb7","trusted":true},"cell_type":"code","source":"STEPS = 800\nEPOCHS = 30\nsize = 128\nbatchsize = 340","execution_count":null,"outputs":[]},{"metadata":{"_kg_hide-output":true,"_uuid":"0860ec35bee03f0c5cd21202dc7471c2d201cf5f","scrolled":false,"trusted":true},"cell_type":"code","source":"base_model = MobileNet(input_shape=(size, size,3), alpha=1., weights=\"imagenet\", include_top = False)\ninp = base_model.input\nx = base_model.output\nx = GlobalAveragePooling2D()(x)\nx = Dense(NCATS, activation='softmax')(x)\nmodel = Model(inp, x)\n\nbase_model = Sequential(model.layers[:-2])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"4a1ca01f094af4f54353fe7b9230597650a32659"},"cell_type":"code","source":"base_model.summary()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8e144d388a97750de433543a83fb68f4c088796b"},"cell_type":"markdown","source":"## LSTM branch"},{"metadata":{"trusted":true,"_uuid":"148069179f29a39a12ca306c67094a8bbe0eed45"},"cell_type":"code","source":"from keras.models import Sequential\nfrom keras.layers import BatchNormalization, Conv1D, LSTM, Dense, Dropout, Bidirectional\nfrom keras.layers import CuDNNLSTM as LSTM # this one is about 3x faster on GPU instances\ninp = Input(shape = (70,3))\n\nx = BatchNormalization()(inp)\n\n# # filter count and length are taken from the script https://github.com/tensorflow/models/blob/master/tutorials/rnn/quickdraw/train_model.py\nx = Conv1D(256, (5,), activation = \"relu\")(x)\nx = Dropout(0.2)(x)\nx = Conv1D(256, (5,), activation = 'relu')(x)\nx = Dropout(0.2)(x)\nx = Conv1D(256, (3,), activation = 'relu')(x)\nx = Dropout(0.2)(x)\nx = Bidirectional(LSTM(128, return_sequences = True))(x)\nx = Dropout(0.2)(x)\nx = Bidirectional(LSTM(128, return_sequences = False))(x)\nx = Dropout(0.2)(x)\nx = Dense(512, activation = 'relu')(x)\nx = Dense(NCATS, activation='softmax')(x)\nstroke_read_model = Model(inp,x)\nstroke_read_model.compile(optimizer = 'adam', \n                          loss = 'categorical_crossentropy', \n                          metrics = ['categorical_accuracy', top_3_accuracy])\nstroke_read_model = Sequential(stroke_read_model.layers[:-1])\nstroke_read_model.summary()","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"f8ddb55d399de16aec5bc79dcb91bc27b37bff7d"},"cell_type":"markdown","source":"### Combining two branches"},{"metadata":{"trusted":true,"_uuid":"24c44b41b788f3bb8327a39ebfde39e35d795f3a"},"cell_type":"code","source":"inp = base_model.input\ny = base_model.output\ny = GlobalAveragePooling2D()(y)\n\ninp2 = Input(shape = (70, 3))\nz = stroke_read_model(inp2)\nx = concatenate([y, z])\nx = Dropout(0.3)(x)\nx = Dense(NCATS, activation='softmax')(x)\nmodel = Model([inp, inp2], x)\n\nmodel.compile(optimizer=Adam(lr=0.001), loss='categorical_crossentropy',\n              metrics=[categorical_crossentropy, categorical_accuracy, top_3_accuracy])","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"848b133842fabfff2b11c8232f1225d9cfb2ecda"},"cell_type":"markdown","source":"### LSTM Preprocessing"},{"metadata":{"trusted":true,"_uuid":"b20ab727a1cbbda916e738390dd0e002ac02a753"},"cell_type":"code","source":"def _stack_it(raw_strokes):\n    \"\"\"preprocess the string and make \n    a standard Nx3 stroke vector\"\"\"\n    stroke_vec = literal_eval(raw_strokes) # string->list\n    # unwrap the list\n    in_strokes = [(xi,yi,i)  \n     for i,(x,y) in enumerate(stroke_vec) \n     for xi,yi in zip(x,y)]\n    c_strokes = np.stack(in_strokes)\n    # replace stroke id with 1 for continue, 2 for new\n    c_strokes[:,2] = [1]+np.diff(c_strokes[:,2]).tolist()\n    c_strokes[:,2] += 1 # since 0 is no stroke\n    # pad the strokes with zeros\n    return pad_sequences(c_strokes.swapaxes(0, 1), \n                         maxlen=70, \n                         padding='post').swapaxes(0, 1)\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"ab1834ea2757a53d602a3508efffcc34bc190dc7"},"cell_type":"markdown","source":"## Data Generator"},{"metadata":{"_uuid":"f6455bf9555b8381b6a4292098a64a0eb7ff54dc","trusted":true},"cell_type":"code","source":"def draw_cv2(raw_strokes, size=256, lw=6, time_color=True):\n    img = np.zeros((BASE_SIZE, BASE_SIZE), np.uint8)\n    for t, stroke in enumerate(raw_strokes):\n        for i in range(len(stroke[0]) - 1):\n            color = 255 - min(t, 10) * 13 if time_color else 255\n            _ = cv2.line(img, (stroke[0][i], stroke[1][i]),\n                         (stroke[0][i + 1], stroke[1][i + 1]), color, lw)\n    if size != BASE_SIZE:\n        return cv2.resize(img, (size, size))\n    else:\n        return img\n\ndef image_generator_xd(size, batchsize, ks, lw=6, time_color=True):\n    while True:\n        for k in np.random.permutation(ks):\n            filename = os.path.join(DP_DIR, 'train_k{}.csv.gz'.format(k))\n            for df in pd.read_csv(filename, chunksize=batchsize):\n                df['drawing1'] = df['drawing'].apply(ast.literal_eval)\n                x = np.zeros((len(df), size, size, 1))\n                for i, raw_strokes in enumerate(df.drawing1.values):\n                    x[i, :, :, 0] = draw_cv2(raw_strokes, size=size, lw=lw,\n                                             time_color=time_color)\n                x = np.repeat(x, 3, axis =3)\n                x = preprocess_input(x).astype(np.float32)\n                \n                df['drawing'] = df['drawing'].map(_stack_it)\n                x2 = np.stack(df['drawing'], 0)\n                y = keras.utils.to_categorical(df.y, num_classes=NCATS)\n                yield [x, x2], y\n\ndef df_to_image_array_xd(df, size, lw=6, time_color=True):\n    df['drawing1'] = df['drawing'].apply(ast.literal_eval)\n    x = np.zeros((len(df), size, size, 1))\n    \n    for i, raw_strokes in enumerate(df.drawing1.values):\n        x[i, :, :, 0] = draw_cv2(raw_strokes, size=size, lw=lw, time_color=time_color)\n    x = np.repeat(x, 3, axis =3)\n    x = preprocess_input(x).astype(np.float32)\n    df['drawing'] = df['drawing'].map(_stack_it)\n    x2 = np.stack(df['drawing'], 0)\n    return [x,x2]","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"d80ad7f4d378ea7f30479221d604eeeed559cae4","trusted":true},"cell_type":"code","source":"train_datagen = image_generator_xd(size=size, batchsize=batchsize, ks=range(NCSVS - 1))\nval_datagen = image_generator_xd(size=size, batchsize=batchsize, ks=range(NCSVS - 1, NCSVS))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"6baaa370cd9762ed13dc3c89f387cb133eb85384"},"cell_type":"markdown","source":"### First 20 epochs"},{"metadata":{"_uuid":"da72d70fc1781e80427d45a80c07b3571dda0b36","trusted":true},"cell_type":"code","source":"callbacks = [\n    ReduceLROnPlateau(monitor='val_categorical_accuracy', factor=0.5, patience=3,\n                      min_delta=0.005, mode='max', cooldown=3, verbose=1),\n    ModelCheckpoint(\"mobilenet_lstm.model\",monitor='val_top_3_accuracy', \n                                   mode = 'max', save_best_only=True, verbose=1)\n]\nhists = []\nhist = model.fit_generator(\n    train_datagen, steps_per_epoch=STEPS, epochs=EPOCHS, verbose=1,\n    validation_data=val_datagen, validation_steps = 100,\n    callbacks = callbacks\n)\nhists.append(hist)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"05767778d356bc63b7cded355159fd4082eee1a5","trusted":true},"cell_type":"code","source":"hist_df = pd.concat([pd.DataFrame(hist.history) for hist in hists], sort=True)\nhist_df.index = np.arange(1, len(hist_df)+1)\nfig, axs = plt.subplots(nrows=2, sharex=True, figsize=(16, 10))\naxs[0].plot(hist_df.val_categorical_accuracy, lw=5, label='Validation Accuracy')\naxs[0].plot(hist_df.categorical_accuracy, lw=5, label='Training Accuracy')\naxs[0].set_ylabel('Accuracy')\naxs[0].set_xlabel('Epoch')\naxs[0].grid()\naxs[0].legend(loc=0)\naxs[1].plot(hist_df.val_categorical_crossentropy, lw=5, label='Validation MLogLoss')\naxs[1].plot(hist_df.categorical_crossentropy, lw=5, label='Training MLogLoss')\naxs[1].set_ylabel('MLogLoss')\naxs[1].set_xlabel('Epoch')\naxs[1].grid()\naxs[1].legend(loc=0)\nfig.savefig('hist.png', dpi=300)\nplt.show();","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8c1927f22d3c45cba0bdee7d6f4b6c858d82d614","trusted":true},"cell_type":"code","source":"df = pd.read_csv(os.path.join(DP_DIR, 'train_k{}.csv.gz'.format(NCSVS)), nrows=34000)\nfor i in range(10):\n    valid_df = df.loc[i*3400:(i+1)*3400,:].copy()\n    x_valid, x2 = df_to_image_array_xd(valid_df, size)\n    y_valid = keras.utils.to_categorical(valid_df.y, num_classes=NCATS)\n    print(x_valid.shape, y_valid.shape)\n    print('Validation array memory {:.2f} GB'.format(x_valid.nbytes / 1024.**3 ))\n    valid_predictions = model.predict([x_valid, x2], batch_size=128, verbose=1)\n    map3 = mapk(valid_df[['y']].values, preds2catids(valid_predictions).values)\n\n    print('Map3: {:.3f}'.format(map3))","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"be4577a9ba00611697eea8f241a42c504981e86f"},"cell_type":"markdown","source":"## Create Submission"},{"metadata":{"_uuid":"a7d14348150baf753e90cf2719b9f31dd564f6a2","trusted":true},"cell_type":"code","source":"test = pd.read_csv(os.path.join(INPUT_DIR, 'test_simplified.csv'))\n\nfor i in range(10):\n    end = min((i+1)*11220, 112199)\n    subtest= test.iloc[i*11220:end].copy().reset_index(drop=True)\n    x_test = df_to_image_array_xd(subtest, size)\n\n    test_predictions = model.predict(x_test, batch_size=128, verbose=1)\n\n    top3 = preds2catids(test_predictions)\n    cats = list_all_categories()\n    id2cat = {k: cat.replace(' ', '_') for k, cat in enumerate(cats)}\n    top3cats = top3.replace(id2cat)\n    subtest['word'] = top3cats['a'] + ' ' + top3cats['b'] + ' ' + top3cats['c']\n    subtest.head()\n    if i ==0:\n        submission = subtest[['key_id', 'word']]\n    else: \n        submission = submission.append(subtest[['key_id', 'word']], ignore_index=True)\n","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"8c871bd076862273c49d1a7879eb34f8cdb6e156","trusted":true},"cell_type":"code","source":"submission.to_csv('lstm_mobilenet.csv', index=False)\nsubmission.head()\nsubmission.shape","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"b418f4c06c4e4453aa1b5ab16dde344eb8b735c5","trusted":true},"cell_type":"code","source":"end = dt.datetime.now()\nprint('Latest run {}.\\nTotal time {}s'.format(end, (end - start).seconds))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"dd4bc03eba8d4feca19e18c7ed523594f27ef298"},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.6","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}