{"cells":[{"metadata":{"_uuid":"e5c84e920b3c2a63146b055375ada4cfe2463369"},"cell_type":"markdown","source":"# CNN with 20 Classes trained on Open Image Validation Set"},{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd \nimport os\nprint(os.listdir(\"../input\"))\nimport matplotlib.pyplot as plt\n%matplotlib inline\nimport cv2\nimport gc","execution_count":null,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"df = pd.read_csv('../input/openimagevallabel/validation-annotations-human-imagelabels.csv', usecols=[0,2,3])\ndf = df[df.Confidence == 1]\nclasses = np.array(['/m/01g317', '/m/09j2d', '/m/04yx4', '/m/0dzct', '/m/07j7r', '/m/05s2s', '/m/03bt1vf', '/m/07yv9', '/m/0cgh4', '/m/01prls', '/m/09j5n', '/m/0jbk', '/m/0k4j', '/m/05r655', '/m/02wbm', '/m/0c9ph5', '/m/083wq', '/m/0c_jw', '/m/03jm5', '/m/0d4v4'])\nli = []\nfor i in classes:\n    li.append(df[df.LabelName == i])\ndf = pd.concat(li).sample(frac=1).reset_index(drop=True)\ndel li\ngc.collect()\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e3d32a3b58b39f986ddf2cc5607f972d03e2be6d"},"cell_type":"code","source":"labels = df.LabelName.tolist()\nImageid = df.ImageID.values\nprint(len(df))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"e2a6a19f882a04e93702d720dd935afba597d87c","collapsed":true},"cell_type":"code","source":"from keras.preprocessing.image import load_img, img_to_array\nfrom keras.layers import Dense, Conv2D, PReLU, BatchNormalization, MaxPooling2D, Dropout, Flatten\nimport keras\nfrom keras.callbacks import EarlyStopping, ModelCheckpoint, ReduceLROnPlateau\nfrom keras import backend as K\nfrom keras.models import load_model, Sequential\nfrom tqdm import tqdm_notebook\nfrom tqdm import tqdm\nfrom keras.optimizers import Adam","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"54cb1a823f8e219091e6b86ee7b7f17277681e68"},"cell_type":"code","source":"df.head(),gc.collect()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"870fb956a953a86c91b8e2a2ddbaf36023187baa","collapsed":true},"cell_type":"code","source":"X_train = [np.array(load_img('../input/open-image-val/validation/validation/{}.jpg'.format(i),target_size=(100,100), grayscale=True))/255 for i in tqdm(Imageid[10000:20000])]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"5b09508dfb7ba1a1b6e8b162066d0b1188c0c5a2"},"cell_type":"code","source":"X_Val = [np.array(load_img('../input/open-image-val/validation/validation/{}.jpg'.format(i),target_size=(100,100), grayscale=True))/255 for i in tqdm(Imageid[:2000])]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"d5d0cbbb0bb56d60634030c42783fba145b047c2"},"cell_type":"code","source":"#Y_train = labels[10000:20000]\n#Y_Val = labels[:2000]\nclasses = classes.tolist()\nY_train, Y_Val = [], []\nfor i in tqdm(labels[10000:20000]):\n    temp = np.zeros(20)\n    temp[classes.index(i)] = 1\n    Y_train.append(temp)\n    del temp\nfor i in tqdm(labels[:2000]):\n    temp = np.zeros(20)\n    temp[classes.index(i)] = 1\n    Y_Val.append(temp)\n    del temp\nY_train = np.array(Y_train)\nY_Val = np.array(Y_Val)\ngc.collect(), Y_train[0]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"c9c1d6a6b434e1f7e3b7b61457fce8fa03bd5846","collapsed":true},"cell_type":"code","source":"nn = Sequential()\nnn.add(BatchNormalization(input_shape=(100, 100, 1)))\nnn.add(Conv2D(4, kernel_size=(2,2), strides=(1,1)))\nnn.add(PReLU())\nnn.add(BatchNormalization())\nnn.add(Dropout(0.25))\nnn.add(Conv2D(8, kernel_size=(2,2), strides=(1,1)))\nnn.add(PReLU())\nnn.add(BatchNormalization())\nnn.add(Dropout(0.25))\nnn.add(Conv2D(16, kernel_size=(2,2), strides=(2,2)))\nnn.add(PReLU())\nnn.add(BatchNormalization())\nnn.add(Dropout(0.25))\nnn.add(Conv2D(32, kernel_size=(2,2), strides=(1,1)))\nnn.add(PReLU())\nnn.add(BatchNormalization())\nnn.add(Dropout(0.25))\nnn.add(Conv2D(32, kernel_size=(2,2), strides=(2,2)))\nnn.add(PReLU())\nnn.add(BatchNormalization())\nnn.add(Dropout(0.25))\nnn.add(Conv2D(32, kernel_size=(2,2), strides=(2,2)))\nnn.add(PReLU())\nnn.add(BatchNormalization())\nnn.add(Dropout(0.25))\nnn.add(Flatten())\nnn.add(Dense(2048))\nnn.add(PReLU())\nnn.add(BatchNormalization())\nnn.add(Dropout(0.25))\nnn.add(Dense(1024))\nnn.add(PReLU())\nnn.add(BatchNormalization())\nnn.add(Dropout(0.25))\nnn.add(Dense(512))\nnn.add(PReLU())\nnn.add(BatchNormalization())\nnn.add(Dropout(0.25))\nnn.add(Dense(128))\nnn.add(PReLU())\nnn.add(BatchNormalization())\nnn.add(Dropout(0.25))\nnn.add(Dense(50))\nnn.add(PReLU())\nnn.add(BatchNormalization())\nnn.add(Dropout(0.25))\nnn.add(Dense(25))\nnn.add(PReLU())\nnn.add(BatchNormalization())\nnn.add(Dropout(0.25))\nnn.add(Dense(20, activation='softmax'))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"30420a3c914edb8cfe42ea043e5b4376be8b2c11","collapsed":true},"cell_type":"code","source":"nn.compile(loss=keras.losses.categorical_crossentropy, metrics=['accuracy'], optimizer='adam')\nnn.summary()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"53045db6262799d0eeae073b70f875d537f356a8"},"cell_type":"code","source":"X_train = np.array(X_train).reshape((10000,100,100,1))\nX_Val = np.array(X_Val).reshape((2000,100,100,1))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"8499a5c301f42940fce9b2838333dba07a1f59ec","collapsed":true},"cell_type":"code","source":"gc.collect()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"6a9a544078806473eef5d9244de2c9b5303b8266","collapsed":true},"cell_type":"code","source":"nn.fit(X_train, Y_train, validation_data=(X_Val,Y_Val), batch_size=100, epochs=50, verbose=2)","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"929109a152d72ff48ac2868eacbe107e7c34ee01","collapsed":true},"cell_type":"code","source":"del X_train, Y_train, X_Val, Y_Val, df\ngc.collect()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"fd8213fe71b722aa69de8da695c50b5276d045e7","collapsed":true},"cell_type":"code","source":"df = pd.read_csv('../input/inclusive-images-challenge/stage_1_sample_submission.csv', usecols=[0])\nim = df.image_id.tolist()\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"f4382d5abd82c1c13f524dc90d6ac032644766b7","collapsed":true},"cell_type":"code","source":"X_test = [np.array(load_img('../input/inclusive-images-challenge/stage_1_test_images/{}.jpg'.format(i),target_size=(100,100), grayscale=True))/255 for i in tqdm_notebook(im)]","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"cb3bef4834d7e9eee9e99bf9c477cbc648cd5651","collapsed":true},"cell_type":"code","source":"X_test = np.array(X_test).reshape((32580,100,100,1))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"9ce6c91b744aaccb9a083ea5ab8512752b82aa5a","collapsed":true},"cell_type":"code","source":"pre = nn.predict(X_test).argsort(1)[:,:5]\ndel X_test\ngc.collect()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a260fc43a6da173d7d1ddccf19958f7b538d71e3","collapsed":true},"cell_type":"code","source":"p = []\nfor it in tqdm(pre):\n    p.append(' '.join([classes[int(i)] for i in it]))","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"_uuid":"a3c87bf63a59cdde4ee8263a4267322f71e6f2f8","collapsed":true},"cell_type":"code","source":"df['labels'] = p\ndf.head()","execution_count":null,"outputs":[]},{"metadata":{"trusted":true,"collapsed":true,"_uuid":"9a2c4f6836e0ef73cba2a45577e262f949f3e5be"},"cell_type":"code","source":"df.to_csv('sub.csv', index=False)","execution_count":null,"outputs":[]},{"metadata":{"_uuid":"49c01d00847d756f2715f20a099161febdce5e4b"},"cell_type":"markdown","source":"## If you find this kernel helpful, please upvote it.\n## If you have any questions or suggestions please let me know."}],"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}