{"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":"# Importing Required packages\nimport os\nimport torch\nimport numpy as np\nimport pandas as pd\n\nfrom tqdm.auto import tqdm\nimport shutil as sh\n\nimport matplotlib.pyplot as plt\nfrom IPython.display import Image, clear_output\n%matplotlib inline","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2023-04-11T07:34:47.588138Z","iopub.execute_input":"2023-04-11T07:34:47.589138Z","iopub.status.idle":"2023-04-11T07:34:50.22788Z","shell.execute_reply.started":"2023-04-11T07:34:47.589098Z","shell.execute_reply":"2023-04-11T07:34:50.226745Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Reading the dataframe\ndf = pd.read_csv('../input/global-wheat-detection/train.csv')\ndf.head()","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:34:50.230272Z","iopub.execute_input":"2023-04-11T07:34:50.230861Z","iopub.status.idle":"2023-04-11T07:34:50.516985Z","shell.execute_reply.started":"2023-04-11T07:34:50.230818Z","shell.execute_reply":"2023-04-11T07:34:50.515757Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# read the training data.\n\ndf = pd.read_csv('../input/global-wheat-detection/train.csv')\nbboxs = np.stack(df['bbox'].apply(lambda x: np.fromstring(x[1:-1], sep=',')))\nfor i, column in enumerate(['x', 'y', 'w', 'h']):\n    df[column] = bboxs[:,i]\ndf.drop(columns=['bbox'], inplace=True)\ndf['x_center'] = (df['x'] + df['w'])/2\ndf['y_center'] = (df['y'] + df['h'])/2\ndf['classes'] = 0\n\n# Making new dataframe, suitable to make suitable dataset for yolov5\ndf = df[['image_id','x', 'y', 'w', 'h','x_center','y_center','classes']]\ndf.head()","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:34:50.520513Z","iopub.execute_input":"2023-04-11T07:34:50.520833Z","iopub.status.idle":"2023-04-11T07:34:51.10561Z","shell.execute_reply.started":"2023-04-11T07:34:50.520803Z","shell.execute_reply":"2023-04-11T07:34:51.104496Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"index = list(set(df.image_id))\nprint(\"Total Images: \",len(index))","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:34:51.108616Z","iopub.execute_input":"2023-04-11T07:34:51.10942Z","iopub.status.idle":"2023-04-11T07:34:51.128019Z","shell.execute_reply.started":"2023-04-11T07:34:51.109368Z","shell.execute_reply":"2023-04-11T07:34:51.126821Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# This cell will automatically make the dataset and save it to convertor folder\nsource = 'train'\nif True:\n    for fold in [0]:\n        val_index = index[len(index)*fold//5:len(index)*(fold+1)//5]\n        for name,mini in tqdm(df.groupby('image_id')):\n            if name in val_index:\n                path2save = 'val/'\n            else:\n                path2save = 'train/'\n            if not os.path.exists('convertor/fold{}/labels/'.format(fold)+path2save):\n                os.makedirs('convertor/fold{}/labels/'.format(fold)+path2save)\n            with open('convertor/fold{}/labels/'.format(fold)+path2save+name+\".txt\", 'w+') as f:\n                row = mini[['classes','x_center','y_center','w','h']].astype(float).values\n                row = row/1024\n                row = row.astype(str)\n                for j in range(len(row)):\n                    text = ' '.join(row[j])\n                    f.write(text)\n                    f.write(\"\\n\")\n            if not os.path.exists('convertor/fold{}/images/{}'.format(fold,path2save)):\n                os.makedirs('convertor/fold{}/images/{}'.format(fold,path2save))\n            sh.copy(\"../input/global-wheat-detection/{}/{}.jpg\".format(source,name),'convertor/fold{}/images/{}/{}.jpg'.format(fold,path2save,name))\n    \n# Bases on this notebook: https://www.kaggle.com/orkatz2/yolov5-train","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:34:51.129837Z","iopub.execute_input":"2023-04-11T07:34:51.130594Z","iopub.status.idle":"2023-04-11T07:35:30.896904Z","shell.execute_reply.started":"2023-04-11T07:34:51.130556Z","shell.execute_reply":"2023-04-11T07:35:30.895808Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Cloning the repo\n!git clone https://github.com/ultralytics/yolov5.git\nclear_output()","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:35:30.898429Z","iopub.execute_input":"2023-04-11T07:35:30.899455Z","iopub.status.idle":"2023-04-11T07:35:33.587339Z","shell.execute_reply.started":"2023-04-11T07:35:30.899403Z","shell.execute_reply":"2023-04-11T07:35:33.586292Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Moving the folders to our working directory\n!mv ./yolov5/* ./","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:35:33.589458Z","iopub.execute_input":"2023-04-11T07:35:33.58985Z","iopub.status.idle":"2023-04-11T07:35:34.561721Z","shell.execute_reply.started":"2023-04-11T07:35:33.589809Z","shell.execute_reply":"2023-04-11T07:35:34.560246Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Checking if the files correctly cloned and moved\n!ls","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:35:34.564903Z","iopub.execute_input":"2023-04-11T07:35:34.565812Z","iopub.status.idle":"2023-04-11T07:35:35.521696Z","shell.execute_reply.started":"2023-04-11T07:35:34.565767Z","shell.execute_reply":"2023-04-11T07:35:35.519564Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# installing the requirements file\n!pip install -r requirements.txt\nclear_output()","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:35:35.530237Z","iopub.execute_input":"2023-04-11T07:35:35.530694Z","iopub.status.idle":"2023-04-11T07:35:59.750246Z","shell.execute_reply.started":"2023-04-11T07:35:35.530648Z","shell.execute_reply":"2023-04-11T07:35:59.748889Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#customize iPython writefile so we can write variables\n\nfrom IPython.core.magic import register_line_cell_magic\n@register_line_cell_magic\ndef writetemplate(line, cell):\n    with open(line, 'w') as f:\n        f.write(cell.format(**globals()))","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:35:59.754721Z","iopub.execute_input":"2023-04-11T07:35:59.75568Z","iopub.status.idle":"2023-04-11T07:35:59.762115Z","shell.execute_reply.started":"2023-04-11T07:35:59.755634Z","shell.execute_reply":"2023-04-11T07:35:59.760587Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Our image and annotation files are saved into this directory\n\nprint(os.listdir(\"./convertor/fold0\"))","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:35:59.763697Z","iopub.execute_input":"2023-04-11T07:35:59.764355Z","iopub.status.idle":"2023-04-11T07:35:59.774316Z","shell.execute_reply.started":"2023-04-11T07:35:59.764313Z","shell.execute_reply":"2023-04-11T07:35:59.773041Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Making a directory for storing our data.yaml and custom YOLOv5(..).yml files\n!mkdir DataFile","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:35:59.776159Z","iopub.execute_input":"2023-04-11T07:35:59.776574Z","iopub.status.idle":"2023-04-11T07:36:00.726048Z","shell.execute_reply.started":"2023-04-11T07:35:59.776536Z","shell.execute_reply":"2023-04-11T07:36:00.724607Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%writetemplate ./DataFile/data.yaml\n\ntrain: ./convertor/fold0/images/train # training directory\nval: ./convertor/fold0/images/val # validation directory\ntest: ./convertor/fold0/images/val # I'll use validation directory for test image\nnc: 1 # number of class\nnames: ['Wheat'] # name of the class","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:36:00.728495Z","iopub.execute_input":"2023-04-11T07:36:00.72895Z","iopub.status.idle":"2023-04-11T07:36:00.737496Z","shell.execute_reply.started":"2023-04-11T07:36:00.728902Z","shell.execute_reply":"2023-04-11T07:36:00.736352Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(os.listdir(\"./models\"))","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:36:00.73934Z","iopub.execute_input":"2023-04-11T07:36:00.740272Z","iopub.status.idle":"2023-04-11T07:36:00.756476Z","shell.execute_reply.started":"2023-04-11T07:36:00.740231Z","shell.execute_reply":"2023-04-11T07:36:00.755477Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# checking the yolov5s model architecture\n!cat ./models/yolov5.yaml","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:36:00.758109Z","iopub.execute_input":"2023-04-11T07:36:00.758497Z","iopub.status.idle":"2023-04-11T07:36:01.731473Z","shell.execute_reply.started":"2023-04-11T07:36:00.75846Z","shell.execute_reply":"2023-04-11T07:36:01.73025Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%writetemplate ./DataFile/customYOLOv5x.yaml\n\n# parameters\nnc: 80  # number of classes\ndepth_multiple: 1.33  # model depth multiple\nwidth_multiple: 1.25  # layer channel multiple\n\n# anchors\nanchors:\n  - [10,13, 16,30, 33,23]  # P3/8\n  - [30,61, 62,45, 59,119]  # P4/16\n  - [116,90, 156,198, 373,326]  # P5/32\n\n# YOLOv5 backbone\nbackbone:\n  # [from, number, module, args]\n  [[-1, 1, Focus, [64, 3]],  # 0-P1/2\n   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4\n   [-1, 3, C3, [128]],\n   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8\n   [-1, 9, C3, [256]],\n   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16\n   [-1, 9, C3, [512]],\n   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32\n   [-1, 1, SPP, [1024, [5, 9, 13]]],\n   [-1, 3, C3, [1024, False]],  # 9\n  ]\n\n# YOLOv5 head\nhead:\n  [[-1, 1, Conv, [512, 1, 1]],\n   [-1, 1, nn.Upsample, [None, 2, 'nearest']],\n   [[-1, 6], 1, Concat, [1]],  # cat backbone P4\n   [-1, 3, C3, [512, False]],  # 13\n\n   [-1, 1, Conv, [256, 1, 1]],\n   [-1, 1, nn.Upsample, [None, 2, 'nearest']],\n   [[-1, 4], 1, Concat, [1]],  # cat backbone P3\n   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)\n\n   [-1, 1, Conv, [256, 3, 2]],\n   [[-1, 14], 1, Concat, [1]],  # cat head P4\n   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)\n\n   [-1, 1, Conv, [512, 3, 2]],\n   [[-1, 10], 1, Concat, [1]],  # cat head P5\n   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)\n\n   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)\n  ]","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:36:01.733704Z","iopub.execute_input":"2023-04-11T07:36:01.734116Z","iopub.status.idle":"2023-04-11T07:36:01.744594Z","shell.execute_reply.started":"2023-04-11T07:36:01.734074Z","shell.execute_reply":"2023-04-11T07:36:01.743598Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# You should skip this line\n!wandb off","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:36:01.746198Z","iopub.execute_input":"2023-04-11T07:36:01.746595Z","iopub.status.idle":"2023-04-11T07:36:04.336899Z","shell.execute_reply.started":"2023-04-11T07:36:01.746558Z","shell.execute_reply":"2023-04-11T07:36:04.335623Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\n!python train.py --img 640  --batch 16 --epochs 1 --data ./DataFile/data.yaml --cfg ./DataFile/customYOLOv5x.yaml --weights yolov5x.pt  --name Result --cache","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:36:04.339052Z","iopub.execute_input":"2023-04-11T07:36:04.339463Z","iopub.status.idle":"2023-04-11T07:42:59.596063Z","shell.execute_reply.started":"2023-04-11T07:36:04.33942Z","shell.execute_reply":"2023-04-11T07:42:59.594677Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# let's check the training result directory.\n# Here model and result are saved\n!ls -R ./runs/train","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:45:20.939275Z","iopub.execute_input":"2023-04-11T07:45:20.940059Z","iopub.status.idle":"2023-04-11T07:45:21.898003Z","shell.execute_reply.started":"2023-04-11T07:45:20.940017Z","shell.execute_reply":"2023-04-11T07:45:21.896738Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Analize the training and validation result\nImage('./runs/train/Result/results.png')\n","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:45:25.114632Z","iopub.execute_input":"2023-04-11T07:45:25.115495Z","iopub.status.idle":"2023-04-11T07:45:25.130323Z","shell.execute_reply.started":"2023-04-11T07:45:25.115453Z","shell.execute_reply":"2023-04-11T07:45:25.128881Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Analize the Confusion matrix\nImage('./runs/train/Result/confusion_matrix.png',width=400)","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:45:31.217461Z","iopub.execute_input":"2023-04-11T07:45:31.218459Z","iopub.status.idle":"2023-04-11T07:45:31.228164Z","shell.execute_reply.started":"2023-04-11T07:45:31.218424Z","shell.execute_reply":"2023-04-11T07:45:31.226985Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!python detect.py --img-size 800  --conf 0.2 --source ../input/global-wheat-detection/test --weights ./runs/train/Result/weights/best.pt --augment ","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:45:35.51603Z","iopub.execute_input":"2023-04-11T07:45:35.516515Z","iopub.status.idle":"2023-04-11T07:46:00.855356Z","shell.execute_reply.started":"2023-04-11T07:45:35.516396Z","shell.execute_reply":"2023-04-11T07:46:00.854174Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Detected images/video are saved in this path\n!ls -R runs/detect","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:46:26.811707Z","iopub.execute_input":"2023-04-11T07:46:26.812841Z","iopub.status.idle":"2023-04-11T07:46:27.768685Z","shell.execute_reply.started":"2023-04-11T07:46:26.812785Z","shell.execute_reply":"2023-04-11T07:46:27.767352Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Image('runs/detect/exp/2fd875eaa.jpg',width=400)","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:46:49.443316Z","iopub.execute_input":"2023-04-11T07:46:49.444334Z","iopub.status.idle":"2023-04-11T07:46:49.459525Z","shell.execute_reply.started":"2023-04-11T07:46:49.444264Z","shell.execute_reply":"2023-04-11T07:46:49.458482Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# hyper parameters data are saved in this location\n!ls ./data","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:47:02.434412Z","iopub.execute_input":"2023-04-11T07:47:02.435529Z","iopub.status.idle":"2023-04-11T07:47:03.403384Z","shell.execute_reply.started":"2023-04-11T07:47:02.435478Z","shell.execute_reply":"2023-04-11T07:47:03.402181Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%cat ./data/hyp.finetune.yaml","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:47:15.355839Z","iopub.execute_input":"2023-04-11T07:47:15.35666Z","iopub.status.idle":"2023-04-11T07:47:16.32866Z","shell.execute_reply.started":"2023-04-11T07:47:15.35662Z","shell.execute_reply":"2023-04-11T07:47:16.327369Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%writetemplate ./DataFile/hyp.custom.yaml\n\nlr0: 0.0032\nlrf: 0.12\nmomentum: 0.843\nweight_decay: 0.00036\nwarmup_epochs: 2.0\nwarmup_momentum: 0.5\nwarmup_bias_lr: 0.05\nbox: 0.0296\ncls: 0.243\ncls_pw: 0.631\nobj: 0.301\nobj_pw: 0.911\niou_t: 0.2\nanchor_t: 2.91\n# anchors: 3.63\nfl_gamma: 0.0   # \nhsv_h: 0.0138\nhsv_s: 0.002\nhsv_v: 0.2\ndegrees: 0.2\ntranslate: 0.0\nscale: 0.3\nshear: 0.0\nperspective: 0.0\nflipud: 0.00856\nfliplr: 0.5\nmosaic: 1.0\nmixup: 0.5","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:47:39.857127Z","iopub.execute_input":"2023-04-11T07:47:39.857535Z","iopub.status.idle":"2023-04-11T07:47:39.864183Z","shell.execute_reply.started":"2023-04-11T07:47:39.857496Z","shell.execute_reply":"2023-04-11T07:47:39.862939Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%%time\n!python train.py --img 1024  --batch 4 --epochs 1 --data ./DataFile/data.yaml --cfg ./DataFile/customYOLOv5x.yaml --hyp ./DataFile/hyp.custom.yaml  --weights ./runs/train/Result/weights/best.pt  --name FineTuned","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:47:50.544638Z","iopub.execute_input":"2023-04-11T07:47:50.545062Z","iopub.status.idle":"2023-04-11T07:48:27.364488Z","shell.execute_reply.started":"2023-04-11T07:47:50.545027Z","shell.execute_reply":"2023-04-11T07:48:27.362998Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# new training result\nos.listdir('./runs/train')","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:48:49.575837Z","iopub.execute_input":"2023-04-11T07:48:49.576745Z","iopub.status.idle":"2023-04-11T07:48:49.585758Z","shell.execute_reply.started":"2023-04-11T07:48:49.576701Z","shell.execute_reply":"2023-04-11T07:48:49.58471Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!ls -R ./runs/train/FineTuned","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:49:10.47805Z","iopub.execute_input":"2023-04-11T07:49:10.478763Z","iopub.status.idle":"2023-04-11T07:49:11.447596Z","shell.execute_reply.started":"2023-04-11T07:49:10.478725Z","shell.execute_reply":"2023-04-11T07:49:11.446071Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!python detect.py  --img 800 --weights ./runs/train/Result/weights/best.pt ./runs/train/FineTuned/weights/best.pt --source ../input/global-wheat-detection/test","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:49:36.355544Z","iopub.execute_input":"2023-04-11T07:49:36.356528Z","iopub.status.idle":"2023-04-11T07:49:53.985101Z","shell.execute_reply.started":"2023-04-11T07:49:36.356485Z","shell.execute_reply":"2023-04-11T07:49:53.983932Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!ls runs/detect","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:50:49.936057Z","iopub.execute_input":"2023-04-11T07:50:49.93647Z","iopub.status.idle":"2023-04-11T07:50:50.88197Z","shell.execute_reply.started":"2023-04-11T07:50:49.936432Z","shell.execute_reply":"2023-04-11T07:50:50.880784Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!ls -R runs/detect/exp","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:51:00.848724Z","iopub.execute_input":"2023-04-11T07:51:00.849108Z","iopub.status.idle":"2023-04-11T07:51:01.809434Z","shell.execute_reply.started":"2023-04-11T07:51:00.849072Z","shell.execute_reply":"2023-04-11T07:51:01.808182Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Image('runs/detect/exp/2fd875eaa.jpg', width=400)","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:51:25.386551Z","iopub.execute_input":"2023-04-11T07:51:25.387616Z","iopub.status.idle":"2023-04-11T07:51:25.402985Z","shell.execute_reply.started":"2023-04-11T07:51:25.387573Z","shell.execute_reply":"2023-04-11T07:51:25.401539Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!python test.py --weights ./runs/train/Result/weights/best.pt ./runs/train/FineTuned/weights/best.pt --data ./DataFile/data.yaml --img 800 --augment","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:53:35.394582Z","iopub.execute_input":"2023-04-11T07:53:35.39524Z","iopub.status.idle":"2023-04-11T07:53:36.448093Z","shell.execute_reply.started":"2023-04-11T07:53:35.395198Z","shell.execute_reply":"2023-04-11T07:53:36.446803Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!ls -R runs/test/exp","metadata":{"execution":{"iopub.status.busy":"2023-04-11T07:52:24.343596Z","iopub.execute_input":"2023-04-11T07:52:24.344875Z","iopub.status.idle":"2023-04-11T07:52:25.287417Z","shell.execute_reply.started":"2023-04-11T07:52:24.344811Z","shell.execute_reply":"2023-04-11T07:52:25.286217Z"},"trusted":true},"execution_count":null,"outputs":[]}]}