{"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_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"from sklearn.preprocessing import MultiLabelBinarizer\nfrom sklearn.model_selection import StratifiedKFold\nfrom tqdm.notebook import tqdm\nimport matplotlib.pyplot as plt\nimport tensorflow as tf\nimport pandas as pd\nimport numpy as np\nimport shutil\nimport os\nfrom kaggle_datasets import KaggleDatasets\nimport sys\nimport random\nimport cv2","metadata":{"execution":{"iopub.status.busy":"2021-05-26T18:50:04.493228Z","iopub.execute_input":"2021-05-26T18:50:04.493623Z","iopub.status.idle":"2021-05-26T18:50:12.281536Z","shell.execute_reply.started":"2021-05-26T18:50:04.493557Z","shell.execute_reply":"2021-05-26T18:50:12.280497Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"classes = [\n    'complex', \n    'frog_eye_leaf_spot', \n    'powdery_mildew', \n    'rust', \n    'scab',\n    'healthy']\n\nimg_size = 720","metadata":{"execution":{"iopub.status.busy":"2021-05-26T14:45:24.158224Z","iopub.execute_input":"2021-05-26T14:45:24.15859Z","iopub.status.idle":"2021-05-26T14:45:24.162907Z","shell.execute_reply.started":"2021-05-26T14:45:24.15856Z","shell.execute_reply":"2021-05-26T14:45:24.161846Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df = pd.read_csv('../input/plant-pathology-2021-fgvc8/train.csv', index_col='image')\ninit_len = len(df)\n\noriginal_labels = df['labels'].values.copy()\n\ndf['labels'] = [x.split(' ') for x in df['labels']]\nlabels = MultiLabelBinarizer(classes=classes).fit_transform(df['labels'].values)\n\ndf = pd.DataFrame(columns=classes, data=labels, index=df.index)\n\ndf.to_csv('train.csv')\ndisplay(df.head())","metadata":{"execution":{"iopub.status.busy":"2021-05-26T14:45:26.131549Z","iopub.execute_input":"2021-05-26T14:45:26.131903Z","iopub.status.idle":"2021-05-26T14:45:26.439772Z","shell.execute_reply.started":"2021-05-26T14:45:26.131872Z","shell.execute_reply":"2021-05-26T14:45:26.438894Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def serialize_image(path):\n    image = tf.io.read_file(path)\n    image = tf.image.decode_jpeg(image, channels=3)\n    image = tf.image.resize(image, [img_size, img_size])\n    image = tf.cast(image, tf.uint8)\n    return tf.image.encode_jpeg(image).numpy()\n\ndef serialize_sample(image, image_name, label):\n    feature = {\n        'image': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image])),\n        'image_name': tf.train.Feature(bytes_list=tf.train.BytesList(value=[image_name])),\n        'complex': tf.train.Feature(int64_list=tf.train.Int64List(value=[label[0]])),\n        'frog_eye_leaf_spot': tf.train.Feature(int64_list=tf.train.Int64List(value=[label[1]])),\n        'powdery_mildew': tf.train.Feature(int64_list=tf.train.Int64List(value=[label[2]])),\n        'rust': tf.train.Feature(int64_list=tf.train.Int64List(value=[label[3]])),\n        'scab': tf.train.Feature(int64_list=tf.train.Int64List(value=[label[4]])),\n        'healthy': tf.train.Feature(int64_list=tf.train.Int64List(value=[label[5]]))}\n    sample = tf.train.Example(features=tf.train.Features(feature=feature))\n    return sample.SerializeToString()","metadata":{"execution":{"iopub.status.busy":"2021-05-26T14:49:34.991474Z","iopub.execute_input":"2021-05-26T14:49:34.99198Z","iopub.status.idle":"2021-05-26T14:49:35.00751Z","shell.execute_reply.started":"2021-05-26T14:49:34.991949Z","shell.execute_reply":"2021-05-26T14:49:35.006338Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"samples = []\nfor image_name, labels in tqdm(df.iterrows()):\n    path = os.path.join('../input/plant-pathology-2021-fgvc8/train_images', image_name)\n    image = serialize_image(path)\n    samples.append(serialize_sample(image, image_name.encode(), labels))\nrandom.shuffle(samples)\n\ntrain_size = int(0.8*len(samples))\n\nwith tf.io.TFRecordWriter('train.tfrec') as writer:\n    [writer.write(x) for x in samples[:train_size]]\n    \nwith tf.io.TFRecordWriter('test.tfrec') as writer:\n    [writer.write(x) for x in samples[train_size:]]","metadata":{"execution":{"iopub.status.busy":"2021-05-23T17:47:01.192045Z","iopub.execute_input":"2021-05-23T17:47:01.192624Z","iopub.status.idle":"2021-05-23T17:47:06.122493Z","shell.execute_reply.started":"2021-05-23T17:47:01.192576Z","shell.execute_reply":"2021-05-23T17:47:06.121344Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}