{"cells":[{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.applications.vgg19 import VGG19\nfrom keras.preprocessing import image\nfrom keras.applications.vgg19 import preprocess_input\nfrom keras.models import Model\nimport numpy as np\nimport os\nimport pandas as pd\nimport cv2\n\nbase_model = VGG19(weights='imagenet')\nmodel = Model(inputs=base_model.input, outputs=base_model.get_layer('fc2').output)\n\nres = []\nres2 = []\nres3 = []\nres4 = []\ndf = pd.read_csv('/kaggle/input/evohackaton/train.csv')\nfor index, row in df.iterrows():\n    img = image.load_img(\"../input/evohackaton/train/train/\" + row['name'], target_size=(224, 224))\n    ar = image.img_to_array(img)\n    x = np.expand_dims(ar, axis=0)\n    x = preprocess_input(x)\n\n    \n    block4_pool_features = model.predict(x)\n    res.append(block4_pool_features[0])\n    ar2 = image.random_rotation(ar, 90)\n\n    x = np.expand_dims(ar2, axis=0)\n    x = preprocess_input(x)\n\n    block4_pool_features = model.predict(x)\n    res2.append(block4_pool_features[0])\n    \n    ar3 = image.random_rotation(ar, 90)\n\n    x = np.expand_dims(ar3, axis=0)\n    x = preprocess_input(x)\n\n    block4_pool_features = model.predict(x)\n    res3.append(block4_pool_features[0])\n    \n    ar4 = image.random_rotation(ar, 90)\n\n    x = np.expand_dims(ar4, axis=0)\n    x = preprocess_input(x)\n\n    block4_pool_features = model.predict(x)\n    res4.append(block4_pool_features[0])\nres = np.array(res)\nres2 = np.array(res2)\nres3 = np.array(res3)\nres4 = np.array(res4)\n\n\nfrom annoy import AnnoyIndex\nt = AnnoyIndex(4096, metric='euclidean')\nfor i, r in enumerate(res, start=1):\n    t.add_item(i, r)\n\nfor i, r in enumerate(res2, start=1):\n    t.add_item(i, r)\n\nfor i, r in enumerate(res3, start=1):\n    t.add_item(i, r)\n\nfor i, r in enumerate(res4, start=1):\n    t.add_item(i, r)\nt.build(350)\n\nnns = []\nfor i, r in enumerate(res):\n    nns.append(t.get_nns_by_vector(r, 30, search_k=-1, include_distances=False))\n\n\n    \ncats = []\nfor arr in nns:\n    a = []\n    for o in arr[1:]:\n        a.append(df.iloc[o-1]['category'])\n    cats.append(a)\n    \ndef most_frequent(List): \n    counter = 0\n    num = List[0] \n      \n    for i in List: \n        curr_frequency = List.count(i) \n        if(curr_frequency> counter): \n            counter = curr_frequency \n            num = i \n  \n    return num \n\nc = []\nfor arr in cats:\n    c.append(most_frequent(arr))\n    \ndf['cats'] = c\nC = np.where(df['category'] == df['cats'], 1, 0)\n\nprint(np.count_nonzero(np.where(df['category'] == df['cats'], 1, 0))/df.shape[0])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"from keras.applications.resnet50 import ResNet50\nfrom keras.preprocessing import image\nfrom keras.applications.resnet50 import preprocess_input, decode_predictions\nfrom keras.models import Model\nimport numpy as np\nimport os\nimport pandas as pd\n\nbase_model = ResNet50(weights='imagenet')\nmodel_net = Model(inputs=base_model.input, outputs=base_model.get_layer('avg_pool').output)\n\nres_net = []\ndf = pd.read_csv('/kaggle/input/evohackaton/train.csv')\nfor index, row in df.iterrows():\n    img = image.load_img(\"../input/evohackaton/train/train/\" + row['name'], target_size=(224, 224))\n    x = image.img_to_array(img)\n    x = np.expand_dims(x, axis=0)\n    x = preprocess_input(x)\n\n    block4_pool_features = model_net.predict(x)\n    res_net.append(block4_pool_features[0])\n        \nres_net = np.array(res_net)\n\nfrom annoy import AnnoyIndex\nt_net = AnnoyIndex(2048, metric='hamming')\nfor i, r in enumerate(res_net, start=1):\n    t_net.add_item(i, r)\n    \nt_net.build(150)\n\nnns_net = []\nfor i, r in enumerate(res_net):\n    nns_net.append(t_net.get_nns_by_vector(r, 30, search_k=-1, include_distances=False))\n    \ncats_net = []\nfor arr in nns_net:\n    a = []\n    for o in arr[1:]:\n        a.append(df.iloc[o-1]['category'])\n    cats_net.append(a)\n\ndef most_frequent(List): \n    counter = 0\n    num = List[0] \n      \n    for i in List: \n        curr_frequency = List.count(i) \n        if(curr_frequency> counter): \n            counter = curr_frequency \n            num = i \n  \n    return num \n\nc_net = []\nfor arr in cats_net:\n    c_net.append(most_frequent(arr))\n\ndf['cats'] = c_net\nC = np.where(df['category'] == df['cats'], 1, 0)\n\nprint(np.count_nonzero(np.where(df['category'] == df['cats'], 1, 0))/df.shape[0])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"cn = np.array(cats_net)\nvgn = np.array(cats)\n\nmerged = np.concatenate((cn, vgn), 1)\n\nmerged = merged.tolist()\n","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"\nc_merged = []\nfor arr in merged:\n    c_merged.append(most_frequent(arr))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"c_merged\ndf['cats'] = c_merged\nC = np.where(df['category'] == df['cats'], 1, 0)\n\nprint(np.count_nonzero(np.where(df['category'] == df['cats'], 1, 0))/df.shape[0])","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"res_test = []\nres_net_test = []\ndf_test = df.append({'name' : '16857.jpg' , 'category' : 1} , ignore_index=True)\n\nfor index, row in df_test.iterrows():\n    img = image.load_img(\"../input/evohackaton/test/test/\" + row['name'], target_size=(224, 224))\n    x = image.img_to_array(img)\n    x = np.expand_dims(x, axis=0)\n    x = preprocess_input(x)\n\n    block4_pool_features = model.predict(x)\n    res_test.append(block4_pool_features[0])\n    block4_pool_features = model_net.predict(x)\n    res_net_test.append(block4_pool_features[0])\n        \nres_test = np.array(res_test)\nres_net_test = np.array(res_net_test)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"nns_net_test = []\nfor i, r in enumerate(res_net_test):\n    nns_net_test.append(t_net.get_nns_by_vector(r, 30, search_k=-1, include_distances=False))\n\ncats_net_test = []\nfor arr in nns_net_test:\n    a = []\n    for o in arr[1:]:\n        a.append(df.iloc[o-1]['category'])\n    cats_net_test.append(a)\n\n    \nnns_test = []\nfor i, r in enumerate(res_test):\n    nns_test.append(t.get_nns_by_vector(r, 30, search_k=-1, include_distances=False))\n    \ncats_test = []\nfor arr in nns_test:\n    a = []\n    for o in arr[1:]:\n        a.append(df.iloc[o-1]['category'])\n    cats_test.append(a)    \n\ncn = np.array(cats_net_test)\nvgn = np.array(cats_test)\n\nmerged_test = np.concatenate((cn, vgn), 1)\n\nmerged_test = merged_test.tolist()\n\ndef most_frequent(List): \n    counter = 0\n    num = List[0] \n      \n    for i in List: \n        curr_frequency = List.count(i) \n        if(curr_frequency> counter): \n            counter = curr_frequency \n            num = i \n  \n    return num \n\nc_merged_test = []\nfor arr in merged_test:\n    c_merged_test.append(most_frequent(arr))\n    \ndf_test['category'] = c_merged_test","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_test.to_csv('submission.csv', header=True, index=False)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df_test","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_nns = []\nfor i, r in enumerate(res_test):\n    test_nns.append(t.get_nns_by_vector(r, 30, search_k=-1, include_distances=False))\n    \ncats = []\nfor arr in test_nns:\n    a = []\n    for o in arr[1:]:\n        a.append(df.iloc[o-1]['category'])\n    cats.append(a)\n    \ndef most_frequent(List): \n    counter = 0\n    num = List[0] \n      \n    for i in List: \n        curr_frequency = List.count(i) \n        if(curr_frequency> counter): \n            counter = curr_frequency \n            num = i \n  \n    return num \n\nc = []\nfor arr in cats:\n    c.append(most_frequent(arr))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df['category'] = c\ntest_df.to_csv('result.csv')","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"np.array(nns).shape","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"test_df","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"df","execution_count":null,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"","execution_count":null,"outputs":[]}],"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat":4,"nbformat_minor":1}