{
  "id": 243390,
  "title": "Bird Song Recognition App with H2O Wave",
  "url": "/competitions/birdclef-2021/discussion/243390",
  "author_name": "",
  "post_date": "2021-06-02T10:54:02.666970Z",
  "votes": 48,
  "comment_count": 10,
  "views": 0,
  "content": "<p>Congratulations everyone! The competition was fierce and soundcapes are always difficult to tackle. I can't wait to read the solution summaries!</p>\n<p>We did not have too much time for the model training this time but I wanted to share a demo app I created based on last year <a href=\"https://www.kaggle.com/c/birdsong-recognition\" target=\"_blank\">Cornell Birdcall Identification</a>. It was mostly inspired by ebird.org and it works well with cleaner xeno canto like recordings.</p>\n<h2>Explore</h2>\n<p><img src=\"https://github.com/gaborfodor/wave-bird-recognition/blob/main/data/explore2.gif?raw=true\" alt=\"\"></p>\n<h2>Recognize</h2>\n<p><img src=\"https://github.com/gaborfodor/wave-bird-recognition/blob/main/data/recognize1.gif?raw=true\" alt=\"\"></p>\n<p><strong>Code</strong>: <a href=\"https://github.com/gaborfodor/wave-bird-recognition\" target=\"_blank\">https://github.com/gaborfodor/wave-bird-recognition</a></p>\n<p>Based on the results it looks like the top teams managed to improve the Cornell results (not as much as I expected based on the public LB though). It would be cool to update the app with some of the improvements. Since inference time is important I prefer single best models over crazy ensembles :)</p>\n<p><strong>Let me know if anyone is interested in collaborating on the app!</strong></p>",
  "messages": [
    {
      "id": "1332851",
      "postDate": "06/02/2021 10:54:02",
      "content": "<p>Congratulations everyone! The competition was fierce and soundcapes are always difficult to tackle. I can't wait to read the solution summaries!</p>\n<p>We did not have too much time for the model training this time but I wanted to share a demo app I created based on last year <a href=\"https://www.kaggle.com/c/birdsong-recognition\" target=\"_blank\">Cornell Birdcall Identification</a>. It was mostly inspired by ebird.org and it works well with cleaner xeno canto like recordings.</p>\n<h2>Explore</h2>\n<p><img src=\"https://github.com/gaborfodor/wave-bird-recognition/blob/main/data/explore2.gif?raw=true\" alt=\"\"></p>\n<h2>Recognize</h2>\n<p><img src=\"https://github.com/gaborfodor/wave-bird-recognition/blob/main/data/recognize1.gif?raw=true\" alt=\"\"></p>\n<p><strong>Code</strong>: <a href=\"https://github.com/gaborfodor/wave-bird-recognition\" target=\"_blank\">https://github.com/gaborfodor/wave-bird-recognition</a></p>\n<p>Based on the results it looks like the top teams managed to improve the Cornell results (not as much as I expected based on the public LB though). It would be cool to update the app with some of the improvements. Since inference time is important I prefer single best models over crazy ensembles :)</p>\n<p><strong>Let me know if anyone is interested in collaborating on the app!</strong></p>",
      "rawMarkdown": "Congratulations everyone! The competition was fierce and soundcapes are always difficult to tackle. I can't wait to read the solution summaries!\n\nWe did not have too much time for the model training this time but I wanted to share a demo app I created based on last year [Cornell Birdcall Identification](https://www.kaggle.com/c/birdsong-recognition). It was mostly inspired by ebird.org and it works well with cleaner xeno canto like recordings.\n\n\n## Explore\n![](https://github.com/gaborfodor/wave-bird-recognition/blob/main/data/explore2.gif?raw=true)\n\n## Recognize\n![](https://github.com/gaborfodor/wave-bird-recognition/blob/main/data/recognize1.gif?raw=true)\n\n**Code**: https://github.com/gaborfodor/wave-bird-recognition\n\nBased on the results it looks like the top teams managed to improve the Cornell results (not as much as I expected based on the public LB though). It would be cool to update the app with some of the improvements. Since inference time is important I prefer single best models over crazy ensembles :)\n\n**Let me know if anyone is interested in collaborating on the app!**",
      "votes": null
    },
    {
      "id": "1333021",
      "postDate": "06/02/2021 12:42:05",
      "content": "<p>Really cool app! Thanks for sharing.</p>",
      "rawMarkdown": "Really cool app! Thanks for sharing.",
      "votes": null
    },
    {
      "id": "1333160",
      "postDate": "06/02/2021 14:16:52",
      "content": "<p>Thanks for sharing. :)</p>",
      "rawMarkdown": "Thanks for sharing. :)",
      "votes": null
    },
    {
      "id": "1333321",
      "postDate": "06/02/2021 16:20:51",
      "content": "<p>That's impressive! Thanks for sharing!</p>",
      "rawMarkdown": "That's impressive! Thanks for sharing!",
      "votes": null
    },
    {
      "id": "1334741",
      "postDate": "06/03/2021 18:24:59",
      "content": "<p>Looks great, thanks for sharing! I wonder if the same could be done in <a href=\"https://streamlit.io/\" target=\"_blank\">streamlit</a> and how the code compares? </p>",
      "rawMarkdown": "Looks great, thanks for sharing! I wonder if the same could be done in [streamlit](https://streamlit.io/) and how the code compares?",
      "votes": null
    },
    {
      "id": "1334844",
      "postDate": "06/03/2021 20:06:07",
      "content": "<p>Very cool!<br>\nIn case it's of interest to you, Rainforest Connection is doing cool work on persistent monitoring, which involves tying together audio collection, classification, and interesting UX wrangling. I bet you'd be a great contributor to their work, if you're interested in teaming up with an existing effort:<br>\n<a href=\"https://rfcx.org/\" target=\"_blank\">https://rfcx.org/</a></p>",
      "rawMarkdown": "Very cool!\nIn case it's of interest to you, Rainforest Connection is doing cool work on persistent monitoring, which involves tying together audio collection, classification, and interesting UX wrangling. I bet you'd be a great contributor to their work, if you're interested in teaming up with an existing effort:\nhttps://rfcx.org/",
      "votes": null
    },
    {
      "id": "1335763",
      "postDate": "06/04/2021 12:24:46",
      "content": "<p>I am asking this but I might attempt to do it myself this weekend. I have already made an audio app with streamlit here: <a href=\"https://github.com/yassineAlouini/rfcx-species-audio-detection-streamlit\" target=\"_blank\">https://github.com/yassineAlouini/rfcx-species-audio-detection-streamlit</a> </p>",
      "rawMarkdown": "I am asking this but I might attempt to do it myself this weekend. I have already made an audio app with streamlit here: https://github.com/yassineAlouini/rfcx-species-audio-detection-streamlit",
      "votes": null
    },
    {
      "id": "1335781",
      "postDate": "06/04/2021 12:37:49",
      "content": "<p>Cool! Tbh I haven't used streamlit yet. I checked a few examples and it should be possible with some simplification/modification.</p>\n<p>Most of the plots were created by plotly or matplotlib…</p>",
      "rawMarkdown": "Cool! Tbh I haven't used streamlit yet. I checked a few examples and it should be possible with some simplification/modification.\n\nMost of the plots were created by plotly or matplotlib...",
      "votes": null
    },
    {
      "id": "1336142",
      "postDate": "06/04/2021 16:52:51",
      "content": "<p>These are my thoughts as well. Since both offer wrappers around most of the plotting  libraries, it should be fine. Will see how it goes. :D</p>",
      "rawMarkdown": "These are my thoughts as well. Since both offer wrappers around most of the plotting  libraries, it should be fine. Will see how it goes. :D",
      "votes": null
    },
    {
      "id": "1337137",
      "postDate": "06/05/2021 12:44:30",
      "content": "<p>By the way <a href=\"https://www.kaggle.com/gaborfodor\" target=\"_blank\">@gaborfodor</a>, where can I find the weights? <a href=\"https://github.com/gaborfodor/wave-bird-recognition/tree/main/models\" target=\"_blank\">https://github.com/gaborfodor/wave-bird-recognition/tree/main/models</a> (if you plan on sharing them of course).</p>",
      "rawMarkdown": "By the way @gaborfodor, where can I find the weights? https://github.com/gaborfodor/wave-bird-recognition/tree/main/models (if you plan on sharing them of course).",
      "votes": null
    },
    {
      "id": "1337160",
      "postDate": "06/05/2021 12:59:54",
      "content": "<p>I think I found it: <code>MODEL_URI = 'https://s3.amazonaws.com/data.h2o.ai/qbirds/models_CNN14_CV1_C262_M1_N0_7028_15123910.pth'</code>. Sorry for my previous message. </p>\n<p>For those that are curious, here is how the weights get downloaded: </p>\n<pre><code>    if not os.path.exists(model_path):\n        print('Downloading model')\n        urllib.request.urlretrieve(MODEL_URI, model_path)\n</code></pre>",
      "rawMarkdown": "I think I found it: `MODEL_URI = 'https://s3.amazonaws.com/data.h2o.ai/qbirds/models_CNN14_CV1_C262_M1_N0_7028_15123910.pth'`. Sorry for my previous message. \n\nFor those that are curious, here is how the weights get downloaded: \n\n```\n    if not os.path.exists(model_path):\n        print('Downloading model')\n        urllib.request.urlretrieve(MODEL_URI, model_path)\n```",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 1333021,
      "author_name": "sgalib",
      "author_url": "",
      "post_date": "06/02/2021 12:42:05",
      "content": "<p>Really cool app! Thanks for sharing.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1333160,
      "author_name": "piantic",
      "author_url": "",
      "post_date": "06/02/2021 14:16:52",
      "content": "<p>Thanks for sharing. :)</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1333321,
      "author_name": "stefankahl",
      "author_url": "",
      "post_date": "06/02/2021 16:20:51",
      "content": "<p>That's impressive! Thanks for sharing!</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1334741,
      "author_name": "yassinealouini",
      "author_url": "",
      "post_date": "06/03/2021 18:24:59",
      "content": "<p>Looks great, thanks for sharing! I wonder if the same could be done in <a href=\"https://streamlit.io/\" target=\"_blank\">streamlit</a> and how the code compares? </p>",
      "votes": null,
      "replies": [
        {
          "id": 1335763,
          "author_name": "yassinealouini",
          "author_url": "",
          "post_date": "06/04/2021 12:24:46",
          "content": "<p>I am asking this but I might attempt to do it myself this weekend. I have already made an audio app with streamlit here: <a href=\"https://github.com/yassineAlouini/rfcx-species-audio-detection-streamlit\" target=\"_blank\">https://github.com/yassineAlouini/rfcx-species-audio-detection-streamlit</a> </p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1335781,
          "author_name": "gaborfodor",
          "author_url": "",
          "post_date": "06/04/2021 12:37:49",
          "content": "<p>Cool! Tbh I haven't used streamlit yet. I checked a few examples and it should be possible with some simplification/modification.</p>\n<p>Most of the plots were created by plotly or matplotlib…</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1336142,
          "author_name": "yassinealouini",
          "author_url": "",
          "post_date": "06/04/2021 16:52:51",
          "content": "<p>These are my thoughts as well. Since both offer wrappers around most of the plotting  libraries, it should be fine. Will see how it goes. :D</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1337137,
          "author_name": "yassinealouini",
          "author_url": "",
          "post_date": "06/05/2021 12:44:30",
          "content": "<p>By the way <a href=\"https://www.kaggle.com/gaborfodor\" target=\"_blank\">@gaborfodor</a>, where can I find the weights? <a href=\"https://github.com/gaborfodor/wave-bird-recognition/tree/main/models\" target=\"_blank\">https://github.com/gaborfodor/wave-bird-recognition/tree/main/models</a> (if you plan on sharing them of course).</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 1337160,
          "author_name": "yassinealouini",
          "author_url": "",
          "post_date": "06/05/2021 12:59:54",
          "content": "<p>I think I found it: <code>MODEL_URI = 'https://s3.amazonaws.com/data.h2o.ai/qbirds/models_CNN14_CV1_C262_M1_N0_7028_15123910.pth'</code>. Sorry for my previous message. </p>\n<p>For those that are curious, here is how the weights get downloaded: </p>\n<pre><code>    if not os.path.exists(model_path):\n        print('Downloading model')\n        urllib.request.urlretrieve(MODEL_URI, model_path)\n</code></pre>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 1334844,
      "author_name": "tomdenton",
      "author_url": "",
      "post_date": "06/03/2021 20:06:07",
      "content": "<p>Very cool!<br>\nIn case it's of interest to you, Rainforest Connection is doing cool work on persistent monitoring, which involves tying together audio collection, classification, and interesting UX wrangling. I bet you'd be a great contributor to their work, if you're interested in teaming up with an existing effort:<br>\n<a href=\"https://rfcx.org/\" target=\"_blank\">https://rfcx.org/</a></p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "1332851": "Congratulations everyone! The competition was fierce and soundcapes are always difficult to tackle. I can't wait to read the solution summaries!\n\nWe did not have too much time for the model training this time but I wanted to share a demo app I created based on last year [Cornell Birdcall Identification](https://www.kaggle.com/c/birdsong-recognition). It was mostly inspired by ebird.org and it works well with cleaner xeno canto like recordings.\n\n\n## Explore\n![](https://github.com/gaborfodor/wave-bird-recognition/blob/main/data/explore2.gif?raw=true)\n\n## Recognize\n![](https://github.com/gaborfodor/wave-bird-recognition/blob/main/data/recognize1.gif?raw=true)\n\n**Code**: https://github.com/gaborfodor/wave-bird-recognition\n\nBased on the results it looks like the top teams managed to improve the Cornell results (not as much as I expected based on the public LB though). It would be cool to update the app with some of the improvements. Since inference time is important I prefer single best models over crazy ensembles :)\n\n**Let me know if anyone is interested in collaborating on the app!**",
    "1333021": "Really cool app! Thanks for sharing.",
    "1333160": "Thanks for sharing. :)",
    "1333321": "That's impressive! Thanks for sharing!",
    "1334741": "Looks great, thanks for sharing! I wonder if the same could be done in [streamlit](https://streamlit.io/) and how the code compares?",
    "1334844": "Very cool!\nIn case it's of interest to you, Rainforest Connection is doing cool work on persistent monitoring, which involves tying together audio collection, classification, and interesting UX wrangling. I bet you'd be a great contributor to their work, if you're interested in teaming up with an existing effort:\nhttps://rfcx.org/",
    "1335763": "I am asking this but I might attempt to do it myself this weekend. I have already made an audio app with streamlit here: https://github.com/yassineAlouini/rfcx-species-audio-detection-streamlit",
    "1335781": "Cool! Tbh I haven't used streamlit yet. I checked a few examples and it should be possible with some simplification/modification.\n\nMost of the plots were created by plotly or matplotlib...",
    "1336142": "These are my thoughts as well. Since both offer wrappers around most of the plotting  libraries, it should be fine. Will see how it goes. :D",
    "1337137": "By the way @gaborfodor, where can I find the weights? https://github.com/gaborfodor/wave-bird-recognition/tree/main/models (if you plan on sharing them of course).",
    "1337160": "I think I found it: `MODEL_URI = 'https://s3.amazonaws.com/data.h2o.ai/qbirds/models_CNN14_CV1_C262_M1_N0_7028_15123910.pth'`. Sorry for my previous message. \n\nFor those that are curious, here is how the weights get downloaded: \n\n```\n    if not os.path.exists(model_path):\n        print('Downloading model')\n        urllib.request.urlretrieve(MODEL_URI, model_path)\n```"
  },
  "source": "meta"
}