Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sujnesh/197835e04807a587cd852faac60c481f to your computer and use it in GitHub Desktop.
Save sujnesh/197835e04807a587cd852faac60c481f to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"AIcrowd_Barrels_KT_Image_Regresion.ipynb","provenance":[],"collapsed_sections":[]},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.8.3"},"widgets":{"application/vnd.jupyter.widget-state+json":{"8edf3969dc4a4707a00b4d074761d114":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","state":{"_view_name":"HBoxView","_dom_classes":[],"_model_name":"HBoxModel","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.5.0","box_style":"","layout":"IPY_MODEL_7a7130fba9c04df8b68396dcbfe09ef1","_model_module":"@jupyter-widgets/controls","children":["IPY_MODEL_cded3c5d3f6e4acc9fa7a298801d0857","IPY_MODEL_24b9ccc1f70b493fb342f2c5c4de4ad3"]}},"7a7130fba9c04df8b68396dcbfe09ef1":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"cded3c5d3f6e4acc9fa7a298801d0857":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","state":{"_view_name":"ProgressView","style":"IPY_MODEL_0c9a3f9f1149469eaf1ef6443c1ba4e4","_dom_classes":[],"description":"example_submission.csv: 100%","_model_name":"FloatProgressModel","bar_style":"success","max":7446,"_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":7446,"_view_count":null,"_view_module_version":"1.5.0","orientation":"horizontal","min":0,"description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_7f0749df22604acd878aef452dda5fba"}},"24b9ccc1f70b493fb342f2c5c4de4ad3":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","state":{"_view_name":"HTMLView","style":"IPY_MODEL_76750bfb7982409c89dfc238ed0639ef","_dom_classes":[],"description":"","_model_name":"HTMLModel","placeholder":"​","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":" 7.45k/7.45k [02:15&lt;00:00, 54.9B/s]","_view_count":null,"_view_module_version":"1.5.0","description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_bbc873c4eb4e43a88cd0284ebb2ccf42"}},"0c9a3f9f1149469eaf1ef6443c1ba4e4":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","state":{"_view_name":"StyleView","_model_name":"ProgressStyleModel","description_width":"initial","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","bar_color":null,"_model_module":"@jupyter-widgets/controls"}},"7f0749df22604acd878aef452dda5fba":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"76750bfb7982409c89dfc238ed0639ef":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","state":{"_view_name":"StyleView","_model_name":"DescriptionStyleModel","description_width":"","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","_model_module":"@jupyter-widgets/controls"}},"bbc873c4eb4e43a88cd0284ebb2ccf42":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"4cbb6af188f94e829ae8478a62e59150":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","state":{"_view_name":"HBoxView","_dom_classes":[],"_model_name":"HBoxModel","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.5.0","box_style":"","layout":"IPY_MODEL_0a1425f63fac496590a36244c2379ee4","_model_module":"@jupyter-widgets/controls","children":["IPY_MODEL_2f38b1841b1d435ba2839bde0427c533","IPY_MODEL_5135fdfb679d4b7f88034f2437271db5"]}},"0a1425f63fac496590a36244c2379ee4":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"2f38b1841b1d435ba2839bde0427c533":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","state":{"_view_name":"ProgressView","style":"IPY_MODEL_f92db191ac4a43608c13a3cf081ffec2","_dom_classes":[],"description":"train.zip: 100%","_model_name":"FloatProgressModel","bar_style":"success","max":494614984,"_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":494614984,"_view_count":null,"_view_module_version":"1.5.0","orientation":"horizontal","min":0,"description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_f5bb5b4993f7440da0056b1074068cee"}},"5135fdfb679d4b7f88034f2437271db5":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","state":{"_view_name":"HTMLView","style":"IPY_MODEL_06e860049037417ba41381d1340d928f","_dom_classes":[],"description":"","_model_name":"HTMLModel","placeholder":"​","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":" 495M/495M [01:52&lt;00:00, 4.41MB/s]","_view_count":null,"_view_module_version":"1.5.0","description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_5414727e83104f0fadb26d4f54d8b0fc"}},"f92db191ac4a43608c13a3cf081ffec2":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","state":{"_view_name":"StyleView","_model_name":"ProgressStyleModel","description_width":"initial","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","bar_color":null,"_model_module":"@jupyter-widgets/controls"}},"f5bb5b4993f7440da0056b1074068cee":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"06e860049037417ba41381d1340d928f":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","state":{"_view_name":"StyleView","_model_name":"DescriptionStyleModel","description_width":"","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","_model_module":"@jupyter-widgets/controls"}},"5414727e83104f0fadb26d4f54d8b0fc":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"4adaee3cf9fb44eca862d05819a30155":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","state":{"_view_name":"HBoxView","_dom_classes":[],"_model_name":"HBoxModel","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.5.0","box_style":"","layout":"IPY_MODEL_5e35deacf2574f478c2ff390bc8d0cf5","_model_module":"@jupyter-widgets/controls","children":["IPY_MODEL_ff5c99ca0179497a9e73983184523579","IPY_MODEL_e14d51e5d89345048d3ae970075bcdcd"]}},"5e35deacf2574f478c2ff390bc8d0cf5":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"ff5c99ca0179497a9e73983184523579":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","state":{"_view_name":"ProgressView","style":"IPY_MODEL_1ed7381ea7c647e8a0a029f9d53b1393","_dom_classes":[],"description":"test.zip: 100%","_model_name":"FloatProgressModel","bar_style":"success","max":485964351,"_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":485964351,"_view_count":null,"_view_module_version":"1.5.0","orientation":"horizontal","min":0,"description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_449a6f9eef31497192c0e75ecdb75d25"}},"e14d51e5d89345048d3ae970075bcdcd":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","state":{"_view_name":"HTMLView","style":"IPY_MODEL_4b9e1a5135bc4490beffe8a9449d0d9f","_dom_classes":[],"description":"","_model_name":"HTMLModel","placeholder":"​","_view_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","value":" 486M/486M [01:52&lt;00:00, 4.34MB/s]","_view_count":null,"_view_module_version":"1.5.0","description_tooltip":null,"_model_module":"@jupyter-widgets/controls","layout":"IPY_MODEL_7040b56b264f4bef890b6cba0416ffcc"}},"1ed7381ea7c647e8a0a029f9d53b1393":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","state":{"_view_name":"StyleView","_model_name":"ProgressStyleModel","description_width":"initial","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","bar_color":null,"_model_module":"@jupyter-widgets/controls"}},"449a6f9eef31497192c0e75ecdb75d25":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}},"4b9e1a5135bc4490beffe8a9449d0d9f":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","state":{"_view_name":"StyleView","_model_name":"DescriptionStyleModel","description_width":"","_view_module":"@jupyter-widgets/base","_model_module_version":"1.5.0","_view_count":null,"_view_module_version":"1.2.0","_model_module":"@jupyter-widgets/controls"}},"7040b56b264f4bef890b6cba0416ffcc":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","state":{"_view_name":"LayoutView","grid_template_rows":null,"right":null,"justify_content":null,"_view_module":"@jupyter-widgets/base","overflow":null,"_model_module_version":"1.2.0","_view_count":null,"flex_flow":null,"width":null,"min_width":null,"border":null,"align_items":null,"bottom":null,"_model_module":"@jupyter-widgets/base","top":null,"grid_column":null,"overflow_y":null,"overflow_x":null,"grid_auto_flow":null,"grid_area":null,"grid_template_columns":null,"flex":null,"_model_name":"LayoutModel","justify_items":null,"grid_row":null,"max_height":null,"align_content":null,"visibility":null,"align_self":null,"height":null,"min_height":null,"padding":null,"grid_auto_rows":null,"grid_gap":null,"max_width":null,"order":null,"_view_module_version":"1.2.0","grid_template_areas":null,"object_position":null,"object_fit":null,"grid_auto_columns":null,"margin":null,"display":null,"left":null}}}},"accelerator":"GPU"},"cells":[{"cell_type":"markdown","metadata":{"id":"vprKq77cibNr"},"source":["# [ML Battleground Hey-Barrels](https://www.aicrowd.com/challenges/ml-battleground/problems/hey-barrels)\r\n","\r\n","See image regression for predicting numerical targets from photos (e.g., age prediction) [example notebook](https://nbviewer.jupyter.org/github/amaiya/ktrain/blob/master/examples/vision/utk_faces_age_prediction-resnet50.ipynb)\r\n","\r\n","Author: Victor Krasilnikov\r\n","\r\n","Score = 0.156 / 0.096"]},{"cell_type":"markdown","metadata":{"id":"h3vxY9cwhBmO"},"source":["## STEP 0: Install packages"]},{"cell_type":"code","metadata":{"id":"46AkBpZQo0H2","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1614565959201,"user_tz":-300,"elapsed":29978,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"bc202437-9010-4469-bfec-8e6854c95c46"},"source":["!pip install -q ktrain"],"execution_count":1,"outputs":[{"output_type":"stream","text":["\u001b[K |████████████████████████████████| 25.3MB 130kB/s \n","\u001b[K |████████████████████████████████| 6.8MB 40.6MB/s \n","\u001b[K |████████████████████████████████| 983kB 46.2MB/s \n","\u001b[K |████████████████████████████████| 266kB 56.5MB/s \n","\u001b[K |████████████████████████████████| 1.3MB 57.2MB/s \n","\u001b[K |████████████████████████████████| 1.2MB 39.8MB/s \n","\u001b[K |████████████████████████████████| 471kB 52.6MB/s \n","\u001b[K |████████████████████████████████| 2.9MB 44.2MB/s \n","\u001b[K |████████████████████████████████| 890kB 48.1MB/s \n","\u001b[?25h Building wheel for ktrain (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Building wheel for langdetect (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Building wheel for syntok (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Building wheel for seqeval (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Building wheel for keras-bert (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Building wheel for sacremoses (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Building wheel for keras-transformer (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Building wheel for keras-pos-embd (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Building wheel for keras-multi-head (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Building wheel for keras-layer-normalization (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Building wheel for keras-position-wise-feed-forward (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Building wheel for keras-embed-sim (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Building wheel for keras-self-attention (setup.py) ... \u001b[?25l\u001b[?25hdone\n","\u001b[31mERROR: transformers 3.5.1 has requirement sentencepiece==0.1.91, but you'll have sentencepiece 0.1.95 which is incompatible.\u001b[0m\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"RgWKZbYuh6u2","executionInfo":{"status":"ok","timestamp":1614565970942,"user_tz":-300,"elapsed":8404,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"22611abe-7adb-46fd-bd5f-5b9a22b70259"},"source":["!pip install git+https://gitlab.aicrowd.com/aicrowd/aicrowd-cli.git >/dev/null\n","%load_ext aicrowd.magic"],"execution_count":2,"outputs":[{"output_type":"stream","text":[" Running command git clone -q https://gitlab.aicrowd.com/aicrowd/aicrowd-cli.git /tmp/pip-req-build-_dvkcr50\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"Cmq7y2MJgyDX"},"source":["## STEP 1: Download the Data"]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"t7BzKfabbyCJ","executionInfo":{"status":"ok","timestamp":1614565971902,"user_tz":-300,"elapsed":2919,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"e2de8848-e054-4ad7-fdee-89d420642e7b"},"source":["API_KEY = '' # Please enter your API Key [https://www.aicrowd.com/participants/me]\n","%aicrowd login --api-key $API_KEY"],"execution_count":3,"outputs":[{"output_type":"stream","text":["\u001b[32mAPI Key valid\u001b[0m\n","\u001b[32mSaved API Key successfully!\u001b[0m\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":300,"referenced_widgets":["8edf3969dc4a4707a00b4d074761d114","7a7130fba9c04df8b68396dcbfe09ef1","cded3c5d3f6e4acc9fa7a298801d0857","24b9ccc1f70b493fb342f2c5c4de4ad3","0c9a3f9f1149469eaf1ef6443c1ba4e4","7f0749df22604acd878aef452dda5fba","76750bfb7982409c89dfc238ed0639ef","bbc873c4eb4e43a88cd0284ebb2ccf42","4cbb6af188f94e829ae8478a62e59150","0a1425f63fac496590a36244c2379ee4","2f38b1841b1d435ba2839bde0427c533","5135fdfb679d4b7f88034f2437271db5","f92db191ac4a43608c13a3cf081ffec2","f5bb5b4993f7440da0056b1074068cee","06e860049037417ba41381d1340d928f","5414727e83104f0fadb26d4f54d8b0fc","4adaee3cf9fb44eca862d05819a30155","5e35deacf2574f478c2ff390bc8d0cf5","ff5c99ca0179497a9e73983184523579","e14d51e5d89345048d3ae970075bcdcd","1ed7381ea7c647e8a0a029f9d53b1393","449a6f9eef31497192c0e75ecdb75d25","4b9e1a5135bc4490beffe8a9449d0d9f","7040b56b264f4bef890b6cba0416ffcc"]},"id":"JRLVLj8UiTbn","executionInfo":{"status":"ok","timestamp":1614566015839,"user_tz":-300,"elapsed":41258,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"dd5d0cea-c039-4820-f592-46c4082e218e"},"source":["%aicrowd dataset list -c hey-barrels\n","%aicrowd dataset download -c hey-barrels -j 3\n","\n","!unzip train.zip >/dev/null\n","!unzip test.zip >/dev/null"],"execution_count":4,"outputs":[{"output_type":"stream","text":[" Datasets for challenge #750 \n","┌───┬────────────────────────┬─────────────┬───────────┐ \n","│ # │ Title │ Description │ Size │ \n","├───┼────────────────────────┼─────────────┼───────────┤ \n","│ 0 │ example_submission.csv │ - │ 7.45 KB │ \n","│ 1 │ test.zip │ - │ 485.96 MB │ \n","│ 2 │ train.zip │ - │ 494.61 MB │ \n","└───┴────────────────────────┴─────────────┴───────────┘ \n"],"name":"stdout"},{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"8edf3969dc4a4707a00b4d074761d114","version_minor":0,"version_major":2},"text/plain":["HBox(children=(FloatProgress(value=0.0, description='example_submission.csv', max=7446.0, style=ProgressStyle(…"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["\n"],"name":"stdout"},{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"4cbb6af188f94e829ae8478a62e59150","version_minor":0,"version_major":2},"text/plain":["HBox(children=(FloatProgress(value=0.0, description='train.zip', max=494614984.0, style=ProgressStyle(descript…"]},"metadata":{"tags":[]}},{"output_type":"display_data","data":{"application/vnd.jupyter.widget-view+json":{"model_id":"4adaee3cf9fb44eca862d05819a30155","version_minor":0,"version_major":2},"text/plain":["HBox(children=(FloatProgress(value=0.0, description='test.zip', max=485964351.0, style=ProgressStyle(descripti…"]},"metadata":{"tags":[]}},{"output_type":"stream","text":["\n","\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"dCdMyAZVpx2p","executionInfo":{"status":"ok","timestamp":1614566140260,"user_tz":-300,"elapsed":743,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"da8dea78-c5ff-4a77-b4cb-caf630cb0077"},"source":["!ls"],"execution_count":6,"outputs":[{"output_type":"stream","text":["example_submission.csv\tsample_data test test.zip train train.zip\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"UR6hPitlo0IU","executionInfo":{"status":"ok","timestamp":1614566149346,"user_tz":-300,"elapsed":6537,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"24f4c5e3-6422-4854-bb98-dd25ab2bcbdf"},"source":["%reload_ext autoreload\n","%autoreload 2\n","%matplotlib inline\n","\n","\n","import os\n","import pandas as pd\n","import numpy as np\n","\n","import ktrain\n","from ktrain import vision as vis\n","\n","print(ktrain.__version__) "],"execution_count":7,"outputs":[{"output_type":"stream","text":["0.25.4\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"8LYOfgJHcScc","executionInfo":{"status":"ok","timestamp":1614566154684,"user_tz":-300,"elapsed":981,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}}},"source":["TRAIN_DATA_DIR = \"train/images\"\n","TEST_DATA_DIR = \"test\"\n"],"execution_count":8,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":419},"id":"mkhzmarIo0IY","executionInfo":{"status":"ok","timestamp":1614566159590,"user_tz":-300,"elapsed":1050,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"4578d23d-fc3c-4042-d0ad-837a6b629852"},"source":["submission = pd.read_csv(\"example_submission.csv\")\n","\n","train_df = pd.read_csv(\"train/meta-data.csv\")\n","train_df"],"execution_count":9,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>filename</th>\n"," <th>barrels_count</th>\n"," <th>pigs_count</th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>0</th>\n"," <td>0001.png</td>\n"," <td>6</td>\n"," <td>10</td>\n"," </tr>\n"," <tr>\n"," <th>1</th>\n"," <td>0002.png</td>\n"," <td>10</td>\n"," <td>10</td>\n"," </tr>\n"," <tr>\n"," <th>2</th>\n"," <td>0003.png</td>\n"," <td>7</td>\n"," <td>8</td>\n"," </tr>\n"," <tr>\n"," <th>3</th>\n"," <td>0004.png</td>\n"," <td>5</td>\n"," <td>8</td>\n"," </tr>\n"," <tr>\n"," <th>4</th>\n"," <td>0005.png</td>\n"," <td>12</td>\n"," <td>7</td>\n"," </tr>\n"," <tr>\n"," <th>...</th>\n"," <td>...</td>\n"," <td>...</td>\n"," <td>...</td>\n"," </tr>\n"," <tr>\n"," <th>495</th>\n"," <td>0496.png</td>\n"," <td>11</td>\n"," <td>9</td>\n"," </tr>\n"," <tr>\n"," <th>496</th>\n"," <td>0497.png</td>\n"," <td>8</td>\n"," <td>13</td>\n"," </tr>\n"," <tr>\n"," <th>497</th>\n"," <td>0498.png</td>\n"," <td>10</td>\n"," <td>8</td>\n"," </tr>\n"," <tr>\n"," <th>498</th>\n"," <td>0499.png</td>\n"," <td>6</td>\n"," <td>8</td>\n"," </tr>\n"," <tr>\n"," <th>499</th>\n"," <td>0500.png</td>\n"," <td>11</td>\n"," <td>5</td>\n"," </tr>\n"," </tbody>\n","</table>\n","<p>500 rows × 3 columns</p>\n","</div>"],"text/plain":[" filename barrels_count pigs_count\n","0 0001.png 6 10\n","1 0002.png 10 10\n","2 0003.png 7 8\n","3 0004.png 5 8\n","4 0005.png 12 7\n",".. ... ... ...\n","495 0496.png 11 9\n","496 0497.png 8 13\n","497 0498.png 10 8\n","498 0499.png 6 8\n","499 0500.png 11 5\n","\n","[500 rows x 3 columns]"]},"metadata":{"tags":[]},"execution_count":9}]},{"cell_type":"code","metadata":{"id":"YFYO5YT5eP8S","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1614566340161,"user_tz":-300,"elapsed":958,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"957530ce-8426-408d-c2e1-f1e7d2ef4f99"},"source":["# Models for image regression\r\n","vis.print_image_regression_models()"],"execution_count":11,"outputs":[{"output_type":"stream","text":["pretrained_resnet50: 50-layer Residual Network (pretrained on ImageNet)\n","resnet50: 50-layer Resididual Network (randomly initialized)\n","pretrained_mobilenet: MobileNet Neural Network (pretrained on ImageNet)\n","mobilenet: MobileNet Neural Network (randomly initialized)\n","pretrained_inception: Inception Version 3 (pretrained on ImageNet)\n","inception: Inception Version 3 (randomly initialized)\n","wrn22: 22-layer Wide Residual Network (randomly initialized)\n","default_cnn: a default LeNet-like Convolutional Neural Network\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"O24MAJHtk8fa"},"source":["## STEP 2: Train and Predict for 'barrels_count'"]},{"cell_type":"code","metadata":{"id":"MJChucL_VZr6","executionInfo":{"status":"ok","timestamp":1614566872950,"user_tz":-300,"elapsed":638,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}}},"source":["LABEL1 = 'barrels_count'\r\n","\r\n","NET = 'pretrained_resnet50'\r\n","FREEZE = 15\r\n","EPOCHS = 5\r\n","SIZE = (224,224)"],"execution_count":18,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"5UV3CoLMlSRf"},"source":["### Create train and val data"]},{"cell_type":"code","metadata":{"id":"D7Q5sm6npKTO","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1614566456041,"user_tz":-300,"elapsed":6096,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"f29cd175-9415-4307-8438-2db3b886d911"},"source":["# LABEL1\n","data_aug = vis.get_data_aug(horizontal_flip=True)\n","(train_data, val_data, preproc) = vis.data.images_from_df(train_df,\n"," data_aug = data_aug, \n"," image_column=\"filename\",\n"," label_columns=[LABEL1],\n"," directory=TRAIN_DATA_DIR ,\n"," is_regression=True,\n"," target_size=SIZE,\n"," color_mode='rgb',\n"," random_state=42)"],"execution_count":13,"outputs":[{"output_type":"stream","text":["/usr/local/lib/python3.7/dist-packages/ktrain/utils.py:580: UserWarning: Task is being treated as REGRESSION because either class_names argument was not supplied or is_regression=True. If this is incorrect, change accordingly.\n"," 'either class_names argument was not supplied or is_regression=True. ' + \\\n"],"name":"stderr"},{"output_type":"stream","text":["Found 500 images belonging to 1 classes.\n","Found 450 validated image filenames.\n","Found 50 validated image filenames.\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"c0Lwk9BDo0Id"},"source":["### Create a Model and Wrap in `Learner`\n","\n","We use the `image_regression_model` function to create a `ResNet50` model.\\\n","By default, the model freezes all layers except the final randomly-initialized dense layer."]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"hYaXWeNDo0If","executionInfo":{"status":"ok","timestamp":1614566486846,"user_tz":-300,"elapsed":9041,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"cf89f4c7-aea1-4e2a-da9d-f7933ec9c0b1"},"source":["model = vis.image_regression_model(NET, train_data, val_data)"],"execution_count":14,"outputs":[{"output_type":"stream","text":["The normalization scheme has been changed for use with a pretrained_resnet50 model. If you decide to use a different model, please reload your dataset with a ktrain.vision.data.images_from* function.\n","\n","Is Multi-Label? False\n","Is Regression? True\n","Downloading data from https://storage.googleapis.com/tensorflow/keras-applications/resnet/resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5\n","94773248/94765736 [==============================] - 0s 0us/step\n","pretrained_resnet50 model created.\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"vXry76vqo0Ig"},"source":["### Estimate Learning Rate\n","\n","We will select a learning rate associated with falling loss from the plot displayed."]},{"cell_type":"code","metadata":{"id":"YdKShyeRo0Ih","executionInfo":{"status":"ok","timestamp":1614566497944,"user_tz":-300,"elapsed":830,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}}},"source":["# wrap model and data in Learner object\n","learner = ktrain.get_learner(model=model, train_data=train_data, val_data=val_data, \n"," workers=8, use_multiprocessing=False, batch_size=64)"],"execution_count":15,"outputs":[]},{"cell_type":"code","metadata":{"id":"fuECeYyNfL9b","colab":{"base_uri":"https://localhost:8080/","height":606},"executionInfo":{"status":"ok","timestamp":1614566623649,"user_tz":-300,"elapsed":113212,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"0087d2d0-6add-4602-83ca-03ffb5875a14"},"source":["learner.lr_find(max_epochs=10)\n","learner.lr_plot()"],"execution_count":16,"outputs":[{"output_type":"stream","text":["simulating training for different learning rates... this may take a few moments...\n","Epoch 1/10\n","7/7 [==============================] - 23s 200ms/step - loss: 49.5231 - mae: 6.1074\n","Epoch 2/10\n","7/7 [==============================] - 14s 171ms/step - loss: 51.9118 - mae: 6.2883\n","Epoch 3/10\n","7/7 [==============================] - 14s 169ms/step - loss: 43.0927 - mae: 5.6934\n","Epoch 4/10\n","7/7 [==============================] - 14s 169ms/step - loss: 25.3665 - mae: 4.1148\n","Epoch 5/10\n","7/7 [==============================] - 14s 170ms/step - loss: 54.3453 - mae: 6.2018\n","Epoch 6/10\n","7/7 [==============================] - 14s 201ms/step - loss: 60.9660 - mae: 6.7987\n","Epoch 7/10\n","7/7 [==============================] - 14s 170ms/step - loss: 2036.5121 - mae: 21.3089\n","\n","\n","done.\n","Please invoke the Learner.lr_plot() method to visually inspect the loss plot to help identify the maximal learning rate associated with falling loss.\n"],"name":"stdout"},{"output_type":"display_data","data":{"image/png":"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\n","text/plain":["<Figure size 432x288 with 1 Axes>"]},"metadata":{"tags":[],"needs_background":"light"}}]},{"cell_type":"markdown","metadata":{"id":"ukKQgKrho0Ik"},"source":["From the plot above, we choose a learning rate of `1e-4`.\n","\n","### Train Model\n","\n","We will begin by training the model for EPOCHS using a [1cycle](https://arxiv.org/abs/1803.09820) learning rate policy."]},{"cell_type":"code","metadata":{"id":"phnhfGJ6o0Io","executionInfo":{"status":"ok","timestamp":1614566911343,"user_tz":-300,"elapsed":837,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}}},"source":["learner.freeze(FREEZE) # unfreeze all but the first FREEZE layers"],"execution_count":19,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"hHKVeTeEo0Ip","executionInfo":{"status":"ok","timestamp":1614567071711,"user_tz":-300,"elapsed":156083,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"3c789ca3-bf76-4c86-b26d-ad1806a86b5d"},"source":["learner.fit_onecycle(1e-4, EPOCHS)"],"execution_count":20,"outputs":[{"output_type":"stream","text":["\n","\n","begin training using onecycle policy with max lr of 0.0001...\n","Epoch 1/5\n","8/8 [==============================] - 38s 3s/step - loss: 53.4476 - mean_absolute_error: 6.1878 - val_loss: 9.4409 - val_mean_absolute_error: 2.6303\n","Epoch 2/5\n","8/8 [==============================] - 24s 3s/step - loss: 20.9102 - mean_absolute_error: 3.5075 - val_loss: 8.1250 - val_mean_absolute_error: 2.4088\n","Epoch 3/5\n","8/8 [==============================] - 30s 1s/step - loss: 16.1258 - mean_absolute_error: 3.2325 - val_loss: 7.4529 - val_mean_absolute_error: 2.2556\n","Epoch 4/5\n","8/8 [==============================] - 31s 1s/step - loss: 15.8710 - mean_absolute_error: 3.2218 - val_loss: 7.5739 - val_mean_absolute_error: 2.3220\n","Epoch 5/5\n","8/8 [==============================] - 30s 1s/step - loss: 11.7174 - mean_absolute_error: 2.6846 - val_loss: 6.9371 - val_mean_absolute_error: 2.2365\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["<tensorflow.python.keras.callbacks.History at 0x7f6d745f63d0>"]},"metadata":{"tags":[]},"execution_count":20}]},{"cell_type":"markdown","metadata":{"id":"c4wyf8Rso0Iq"},"source":["### Make Predictions"]},{"cell_type":"code","metadata":{"id":"XEMy3NiUo0Ir","executionInfo":{"status":"ok","timestamp":1614567124403,"user_tz":-300,"elapsed":905,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}}},"source":["# get a Predictor instance that wraps model and Preprocessor object\n","predictor = ktrain.get_predictor(learner.model, preproc)"],"execution_count":23,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"g_09axgIo0Ir","executionInfo":{"status":"ok","timestamp":1614567142159,"user_tz":-300,"elapsed":15981,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"c8493be1-d1c1-4a1f-df86-ccfe0ef78160"},"source":["# Predict 'barrels_count'\r\n","preds = predictor.predict_folder(TEST_DATA_DIR) \r\n","preds[0]"],"execution_count":24,"outputs":[{"output_type":"stream","text":["Found 500 images belonging to 1 classes.\n"],"name":"stdout"},{"output_type":"execute_result","data":{"text/plain":["('test/0501.png', 9.280953)"]},"metadata":{"tags":[]},"execution_count":24}]},{"cell_type":"code","metadata":{"id":"byRIDPJRo0Is","executionInfo":{"status":"ok","timestamp":1614567148272,"user_tz":-300,"elapsed":812,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}}},"source":["submission[LABEL1] = [round(pred[1]) for pred in preds]\r\n"],"execution_count":25,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"KE6nE1qNgVgd"},"source":["## STEP 3: Train and Predict for LABEL2"]},{"cell_type":"code","metadata":{"id":"L0SNl6jbtG4E","executionInfo":{"status":"ok","timestamp":1614567353144,"user_tz":-300,"elapsed":868,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}}},"source":["LABEL2 = 'pigs_count'\r\n","\r\n","NET = 'pretrained_resnet50'\r\n","FREEZE = 15\r\n","EPOCHS = 5\r\n","SIZE = (224,224)"],"execution_count":26,"outputs":[]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"Njn4yUGJO216","executionInfo":{"status":"ok","timestamp":1614567544924,"user_tz":-300,"elapsed":186959,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"33caf7aa-098e-41ce-ad3a-c6180864ca98"},"source":["# 1\r\n","data_aug = vis.get_data_aug(horizontal_flip=True)\r\n","(train_data, val_data, preproc) = vis.data.images_from_df(train_df,\r\n"," data_aug = data_aug, \r\n"," image_column=\"filename\",\r\n"," label_columns=[LABEL2],\r\n"," directory=TRAIN_DATA_DIR ,\r\n"," is_regression=True,\r\n"," target_size=SIZE,\r\n"," color_mode='rgb',\r\n"," random_state=42)\r\n","# 2\r\n","model = vis.image_regression_model(NET, train_data, val_data)\r\n","\r\n","# 3\r\n","learner = ktrain.get_learner(model=model, train_data=train_data, val_data=val_data, \r\n"," workers=8, use_multiprocessing=False, batch_size=64)\r\n","# 4\r\n","learner.freeze(FREEZE) \r\n","learner.fit_onecycle(1e-4, EPOCHS)\r\n","\r\n","# 5\r\n","predictor = ktrain.get_predictor(learner.model, preproc)\r\n","preds = predictor.predict_folder(TEST_DATA_DIR) \r\n","preds[0]\r\n","\r\n","# 6\r\n","submission[LABEL2] = [round(pred[1]) for pred in preds]"],"execution_count":27,"outputs":[{"output_type":"stream","text":["/usr/local/lib/python3.7/dist-packages/ktrain/utils.py:580: UserWarning: Task is being treated as REGRESSION because either class_names argument was not supplied or is_regression=True. If this is incorrect, change accordingly.\n"," 'either class_names argument was not supplied or is_regression=True. ' + \\\n"],"name":"stderr"},{"output_type":"stream","text":["Found 500 images belonging to 1 classes.\n","Found 450 validated image filenames.\n","Found 50 validated image filenames.\n","The normalization scheme has been changed for use with a pretrained_resnet50 model. If you decide to use a different model, please reload your dataset with a ktrain.vision.data.images_from* function.\n","\n","Is Multi-Label? False\n","Is Regression? True\n","pretrained_resnet50 model created.\n","\n","\n","begin training using onecycle policy with max lr of 0.0001...\n","Epoch 1/5\n","8/8 [==============================] - 37s 3s/step - loss: 50.1007 - mae: 6.0489 - val_loss: 20.4288 - val_mae: 3.7329\n","Epoch 2/5\n","8/8 [==============================] - 25s 1s/step - loss: 20.8619 - mae: 3.7150 - val_loss: 20.7194 - val_mae: 3.7453\n","Epoch 3/5\n","8/8 [==============================] - 31s 1s/step - loss: 16.9383 - mae: 3.2302 - val_loss: 33.2414 - val_mae: 4.8714\n","Epoch 4/5\n","8/8 [==============================] - 31s 1s/step - loss: 18.9736 - mae: 3.4415 - val_loss: 16.3823 - val_mae: 3.3656\n","Epoch 5/5\n","8/8 [==============================] - 31s 1s/step - loss: 17.4203 - mae: 3.4033 - val_loss: 16.2066 - val_mae: 3.3439\n","Found 500 images belonging to 1 classes.\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"Gz14BHM1lzcP"},"source":["## STEP 4: Submite"]},{"cell_type":"code","metadata":{"id":"ymwnPdvsK2vd","colab":{"base_uri":"https://localhost:8080/","height":419},"executionInfo":{"status":"ok","timestamp":1614567595185,"user_tz":-300,"elapsed":835,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"6b494c3a-6b05-43c0-bb0a-97acc0276f14"},"source":["submission.to_csv(\"KT_Reg_submission.csv\", index=False)\r\n","submission"],"execution_count":28,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>filename</th>\n"," <th>barrels_count</th>\n"," <th>pigs_count</th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>0</th>\n"," <td>0501.png</td>\n"," <td>9</td>\n"," <td>6</td>\n"," </tr>\n"," <tr>\n"," <th>1</th>\n"," <td>0502.png</td>\n"," <td>6</td>\n"," <td>4</td>\n"," </tr>\n"," <tr>\n"," <th>2</th>\n"," <td>0503.png</td>\n"," <td>9</td>\n"," <td>7</td>\n"," </tr>\n"," <tr>\n"," <th>3</th>\n"," <td>0504.png</td>\n"," <td>7</td>\n"," <td>6</td>\n"," </tr>\n"," <tr>\n"," <th>4</th>\n"," <td>0505.png</td>\n"," <td>10</td>\n"," <td>6</td>\n"," </tr>\n"," <tr>\n"," <th>...</th>\n"," <td>...</td>\n"," <td>...</td>\n"," <td>...</td>\n"," </tr>\n"," <tr>\n"," <th>495</th>\n"," <td>0996.png</td>\n"," <td>8</td>\n"," <td>5</td>\n"," </tr>\n"," <tr>\n"," <th>496</th>\n"," <td>0997.png</td>\n"," <td>9</td>\n"," <td>5</td>\n"," </tr>\n"," <tr>\n"," <th>497</th>\n"," <td>0998.png</td>\n"," <td>11</td>\n"," <td>3</td>\n"," </tr>\n"," <tr>\n"," <th>498</th>\n"," <td>0999.png</td>\n"," <td>12</td>\n"," <td>6</td>\n"," </tr>\n"," <tr>\n"," <th>499</th>\n"," <td>1000.png</td>\n"," <td>8</td>\n"," <td>2</td>\n"," </tr>\n"," </tbody>\n","</table>\n","<p>500 rows × 3 columns</p>\n","</div>"],"text/plain":[" filename barrels_count pigs_count\n","0 0501.png 9 6\n","1 0502.png 6 4\n","2 0503.png 9 7\n","3 0504.png 7 6\n","4 0505.png 10 6\n",".. ... ... ...\n","495 0996.png 8 5\n","496 0997.png 9 5\n","497 0998.png 11 3\n","498 0999.png 12 6\n","499 1000.png 8 2\n","\n","[500 rows x 3 columns]"]},"metadata":{"tags":[]},"execution_count":28}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"XQnoSNMYtEXA","executionInfo":{"status":"ok","timestamp":1614567609154,"user_tz":-300,"elapsed":2583,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"67d24e6b-0d14-4835-a291-3a60c0c6a3b3"},"source":["%aicrowd submission create -c hey-barrels -f KT_Reg_submission.csv"],"execution_count":29,"outputs":[{"output_type":"stream","text":["\u001b[31mSubmission limit reached for your account, it will reset at 2021-03-01 05:56:57 UTC\u001b[0m\n"],"name":"stderr"}]},{"cell_type":"code","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":17},"id":"t-opL5ZjNDfT","executionInfo":{"status":"ok","timestamp":1614567613583,"user_tz":-300,"elapsed":1039,"user":{"displayName":"Victor Krasilnikov","photoUrl":"https://lh3.googleusercontent.com/a-/AOh14GiFxa-gRgW3RKzTgRp5JjvYbhKtwOWjzHgGrz3i=s64","userId":"12925093041378969437"}},"outputId":"7c33b1f6-ac17-47bc-f100-50a2a0f65723"},"source":["try:\r\n"," \r\n"," from google.colab import files\r\n"," files.download('KT_Reg_submission.csv')\r\n","except ImportError as e:\r\n"," print(\"Only for Colab\") "],"execution_count":30,"outputs":[{"output_type":"display_data","data":{"application/javascript":["\n"," async function download(id, filename, size) {\n"," if (!google.colab.kernel.accessAllowed) {\n"," return;\n"," }\n"," const div = document.createElement('div');\n"," const label = document.createElement('label');\n"," label.textContent = `Downloading \"${filename}\": `;\n"," div.appendChild(label);\n"," const progress = document.createElement('progress');\n"," progress.max = size;\n"," div.appendChild(progress);\n"," document.body.appendChild(div);\n","\n"," const buffers = [];\n"," let downloaded = 0;\n","\n"," const channel = await google.colab.kernel.comms.open(id);\n"," // Send a message to notify the kernel that we're ready.\n"," channel.send({})\n","\n"," for await (const message of channel.messages) {\n"," // Send a message to notify the kernel that we're ready.\n"," channel.send({})\n"," if (message.buffers) {\n"," for (const buffer of message.buffers) {\n"," buffers.push(buffer);\n"," downloaded += buffer.byteLength;\n"," progress.value = downloaded;\n"," }\n"," }\n"," }\n"," const blob = new Blob(buffers, {type: 'application/binary'});\n"," const a = document.createElement('a');\n"," a.href = window.URL.createObjectURL(blob);\n"," a.download = filename;\n"," div.appendChild(a);\n"," a.click();\n"," div.remove();\n"," }\n"," "],"text/plain":["<IPython.core.display.Javascript object>"]},"metadata":{"tags":[]}},{"output_type":"display_data","data":{"application/javascript":["download(\"download_81ae7086-50b7-43d8-bd1f-783ca6caec3b\", \"KT_Reg_submission.csv\", 6639)"],"text/plain":["<IPython.core.display.Javascript object>"]},"metadata":{"tags":[]}}]}]}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment