{
  "id": 16684,
  "title": "Alternative approaches to whale localization",
  "url": "/competitions/noaa-right-whale-recognition/discussion/16684",
  "author_name": "",
  "post_date": "2015-09-26T22:35:04.527Z",
  "votes": 1,
  "comment_count": 13,
  "views": 4756,
  "content": "<p>So I've been wondering if anybody's using techniques other than LBP model described by organizers. Personally I immediately rushed for a convolutional network, and surprisingly, ended up with nice enough looking results... although, of course, not perfect. The false positive cases have already been briefly discussed before, I guess - those situations where a head is obscured and some other body part (like a tail) is surrounded by foam and makes a distinct white-gray pattern. </p>\n\n<p>And then there's an idea - maybe extracting and processing local head/background patches just doesn't give you enough information. Maybe we have to consider the spatial stucture of the body first - and direct our attention at one of it's narrow ends. The body should be relatively easy to detect; and then it's only a matter of determining its orientation and distinguishing a head from a tail...</p>",
  "messages": [
    {
      "id": "93511",
      "postDate": "09/26/2015 22:35:04",
      "content": "<p>So I've been wondering if anybody's using techniques other than LBP model described by organizers. Personally I immediately rushed for a convolutional network, and surprisingly, ended up with nice enough looking results... although, of course, not perfect. The false positive cases have already been briefly discussed before, I guess - those situations where a head is obscured and some other body part (like a tail) is surrounded by foam and makes a distinct white-gray pattern. </p>\n\n<p>And then there's an idea - maybe extracting and processing local head/background patches just doesn't give you enough information. Maybe we have to consider the spatial stucture of the body first - and direct our attention at one of it's narrow ends. The body should be relatively easy to detect; and then it's only a matter of determining its orientation and distinguishing a head from a tail...</p>",
      "rawMarkdown": "So I've been wondering if anybody's using techniques other than LBP model described by organizers. Personally I immediately rushed for a convolutional network, and surprisingly, ended up with nice enough looking results... although, of course, not perfect. The false positive cases have already been briefly discussed before, I guess - those situations where a head is obscured and some other body part (like a tail) is surrounded by foam and makes a distinct white-gray pattern. \r\n\r\nAnd then there's an idea - maybe extracting and processing local head/background patches just doesn't give you enough information. Maybe we have to consider the spatial stucture of the body first - and direct our attention at one of it's narrow ends. The body should be relatively easy to detect; and then it's only a matter of determining its orientation and distinguishing a head from a tail...",
      "votes": null
    },
    {
      "id": "93546",
      "postDate": "09/27/2015 19:14:05",
      "content": "<p>[quote=Artem Khurshudov;93511]</p>\n\n<p>Personally I immediately rushed for a convolutional network, and surprisingly, ended up with nice enough looking results... although, of course, not perfect. </p>\n\n<p>[/quote]</p>\n\n<p>If you don't mind saying, are you localizing using a convnet by regressing a bounding box or are you using a convnet as a classifier and doing some kind of sliding window approach?  The results are pretty good!  I am going to try the regression approach.</p>",
      "rawMarkdown": "[quote=Artem Khurshudov;93511]\r\n\r\nPersonally I immediately rushed for a convolutional network, and surprisingly, ended up with nice enough looking results... although, of course, not perfect. \r\n\r\n[/quote]\r\n\r\nIf you don't mind saying, are you localizing using a convnet by regressing a bounding box or are you using a convnet as a classifier and doing some kind of sliding window approach?  The results are pretty good!  I am going to try the regression approach.",
      "votes": null
    },
    {
      "id": "93548",
      "postDate": "09/27/2015 20:51:54",
      "content": "<p>I use the sliding window approach, and actually I don't like it much - it still produces a lot of false detections, so I had to set a threshold for network's output value. And by &quot;regressing a bounding box&quot; do you mean something like Yann LeCun's <a href=\"http://arxiv.org/abs/1312.6229\">OverFeat</a> framework, or do you plan to make a network that directly outputs bounding box parameters? I thought about the latter myself, but not quite sure that'll work...</p>",
      "rawMarkdown": "I use the sliding window approach, and actually I don't like it much - it still produces a lot of false detections, so I had to set a threshold for network's output value. And by \"regressing a bounding box\" do you mean something like Yann LeCun's [OverFeat][1] framework, or do you plan to make a network that directly outputs bounding box parameters? I thought about the latter myself, but not quite sure that'll work...\r\n\r\n\r\n  [1]: http://arxiv.org/abs/1312.6229",
      "votes": null
    },
    {
      "id": "93550",
      "postDate": "09/27/2015 20:55:28",
      "content": "<p>I mean more like the R-CNN approach. So getting candidate detections from some other method, e.g. cascades, and then simultaneously mitigating false alarms and regressing the bounding box using a CNN</p>",
      "rawMarkdown": "I mean more like the R-CNN approach. So getting candidate detections from some other method, e.g. cascades, and then simultaneously mitigating false alarms and regressing the bounding box using a CNN",
      "votes": null
    },
    {
      "id": "93551",
      "postDate": "09/27/2015 20:59:23",
      "content": "<p>Huh. Never heard of it before, so thanks, I guess I have a paper to read tonight. :-)</p>",
      "rawMarkdown": "Huh. Never heard of it before, so thanks, I guess I have a paper to read tonight. :-)",
      "votes": null
    },
    {
      "id": "97367",
      "postDate": "10/26/2015 14:22:17",
      "content": "<p>So, a little update on my approach, if anyone's interested: instead of using sliding windows/OverFeat/RCNN I focused on a mask regression technique described by <a href=\"http://papers.nips.cc/paper/5207-deep-neural-networks-for-object-detection.pdf\">Szegedy et al</a>. Basically you make a binary black and white mask where everything inside the object's bounding box is white and everything else is black. Then you train the network to predict a mask from raw pixel image (obviously, you need to prepare a training set of masks). I spent almost 3 weeks trying to make make it work, and the key to success seems to be augmenting your training set 10x more and adding lots of dropout, and then even a fairly shallow convnet does the trick. </p>\n\n<p>Then another idea I dwelled on for a while was to detect not the head specifically but the whole whale body instead, because I thought it will be much easier since heads are sometimes hardly distinguishable from the water-and-foam pattern. And here are some results: &quot;mask1-2-3&quot; displays mask prediction accuracy and how a bounded box is fitted to the predicted mask again (nothing fancy, some linear algebra and PCA), and &quot;predicted_bbox-1-2-3&quot; demonstrates the final result so far, separating whales from background.</p>\n\n<p>...as a side note, anybody who isn't in the team yet and likes the mask regression approach, is interested to team up? I'm a PhD student in machine learning and computer vision, who uses python/Theano/Lasagne/Keras, and this is my first Kaggle competition, so not much experience so far.</p>",
      "rawMarkdown": "So, a little update on my approach, if anyone's interested: instead of using sliding windows/OverFeat/RCNN I focused on a mask regression technique described by [Szegedy et al][1]. Basically you make a binary black and white mask where everything inside the object's bounding box is white and everything else is black. Then you train the network to predict a mask from raw pixel image (obviously, you need to prepare a training set of masks). I spent almost 3 weeks trying to make make it work, and the key to success seems to be augmenting your training set 10x more and adding lots of dropout, and then even a fairly shallow convnet does the trick. \r\n\r\nThen another idea I dwelled on for a while was to detect not the head specifically but the whole whale body instead, because I thought it will be much easier since heads are sometimes hardly distinguishable from the water-and-foam pattern. And here are some results: \"mask1-2-3\" displays mask prediction accuracy and how a bounded box is fitted to the predicted mask again (nothing fancy, some linear algebra and PCA), and \"predicted_bbox-1-2-3\" demonstrates the final result so far, separating whales from background.\r\n\r\n...as a side note, anybody who isn't in the team yet and likes the mask regression approach, is interested to team up? I'm a PhD student in machine learning and computer vision, who uses python/Theano/Lasagne/Keras, and this is my first Kaggle competition, so not much experience so far.\r\n\r\n  [1]: http://papers.nips.cc/paper/5207-deep-neural-networks-for-object-detection.pdf",
      "votes": null
    },
    {
      "id": "97386",
      "postDate": "10/26/2015 20:02:32",
      "content": "<p>Artem, </p>\n\n<p>The results you got seem interesting. I'm interested to team up if you are open.</p>\n\n<p>Basically, I'm trying to build a ConvNet using Matlab (I know this is a hard task, but not impossible). I have decent computing power to do some test runs on my end. On the side, I'm also trying to build a similar technique to isolate the whales but your method seems to produce better results.</p>\n\n<p>We can take this conversation private if you have any further questions. I hope to hear from you soon.</p>\n\n<p>Thanks</p>",
      "rawMarkdown": "Artem, \r\n\r\nThe results you got seem interesting. I'm interested to team up if you are open.\r\n\r\nBasically, I'm trying to build a ConvNet using Matlab (I know this is a hard task, but not impossible). I have decent computing power to do some test runs on my end. On the side, I'm also trying to build a similar technique to isolate the whales but your method seems to produce better results.\r\n\r\nWe can take this conversation private if you have any further questions. I hope to hear from you soon.\r\n\r\nThanks",
      "votes": null
    },
    {
      "id": "97388",
      "postDate": "10/26/2015 20:24:15",
      "content": "<p>Hi! It seems I have trouble trying to verify my account, so I'll contact you as soon as the support team resolves my issue. :-)</p>",
      "rawMarkdown": "Hi! It seems I have trouble trying to verify my account, so I'll contact you as soon as the support team resolves my issue. :-)",
      "votes": null
    },
    {
      "id": "97389",
      "postDate": "10/26/2015 20:48:46",
      "content": "<p>Sounds good</p>",
      "rawMarkdown": "Sounds good",
      "votes": null
    },
    {
      "id": "97446",
      "postDate": "10/27/2015 16:51:50",
      "content": "<p>Hey, i am interested in cv and machine learning. And I also use the theano and keras. Could I join your team and how could i contact you</p>",
      "rawMarkdown": "Hey, i am interested in cv and machine learning. And I also use the theano and keras. Could I join your team and how could i contact you",
      "votes": null
    },
    {
      "id": "97490",
      "postDate": "10/27/2015 21:52:44",
      "content": "<p>OK, now I feel really stupid, because somehow I thought that verifying my account will give me the access to the private messaging system, which apparently it does not. :-) So you can reach me by email (art1783@gmail.com) or Skype (tragedist) or Facebook (just look my name up).</p>",
      "rawMarkdown": "OK, now I feel really stupid, because somehow I thought that verifying my account will give me the access to the private messaging system, which apparently it does not. :-) So you can reach me by email (art1783@gmail.com) or Skype (tragedist) or Facebook (just look my name up).",
      "votes": null
    },
    {
      "id": "98781",
      "postDate": "11/13/2015 14:57:33",
      "content": "<p>@vbk, speaking about matlab and convnet...<a href=\"http://www.vlfeat.org/matconvnet/\">http://www.vlfeat.org/matconvnet/</a></p>",
      "rawMarkdown": "vbk, speaking about matlab and convnet...http://www.vlfeat.org/matconvnet/",
      "votes": null
    },
    {
      "id": "98782",
      "postDate": "11/13/2015 15:43:52",
      "content": "<p>Thanks @old-ufo</p>\n\n<p>I already know about matconvnet. I use my own code (part of my own learning).</p>",
      "rawMarkdown": "Thanks @old-ufo\r\n\r\nI already know about matconvnet. I use my own code (part of my own learning).",
      "votes": null
    },
    {
      "id": "99560",
      "postDate": "11/26/2015 13:39:06",
      "content": "<p>I've summed up my progress so far in a <a href=\"http://rocknrollnerd.github.io/ml/2015/11/26/right-whales.html\">blog post</a>, just in case that maybe somebody'll find it useful.</p>",
      "rawMarkdown": "I've summed up my progress so far in a [blog post][1], just in case that maybe somebody'll find it useful.\r\n\r\n\r\n  [1]: http://rocknrollnerd.github.io/ml/2015/11/26/right-whales.html",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 93546,
      "author_name": "senecaur",
      "author_url": "",
      "post_date": "09/27/2015 19:14:05",
      "content": "<p>[quote=Artem Khurshudov;93511]</p>\n\n<p>Personally I immediately rushed for a convolutional network, and surprisingly, ended up with nice enough looking results... although, of course, not perfect. </p>\n\n<p>[/quote]</p>\n\n<p>If you don't mind saying, are you localizing using a convnet by regressing a bounding box or are you using a convnet as a classifier and doing some kind of sliding window approach?  The results are pretty good!  I am going to try the regression approach.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 93548,
      "author_name": "rocknrollnerd",
      "author_url": "",
      "post_date": "09/27/2015 20:51:54",
      "content": "<p>I use the sliding window approach, and actually I don't like it much - it still produces a lot of false detections, so I had to set a threshold for network's output value. And by &quot;regressing a bounding box&quot; do you mean something like Yann LeCun's <a href=\"http://arxiv.org/abs/1312.6229\">OverFeat</a> framework, or do you plan to make a network that directly outputs bounding box parameters? I thought about the latter myself, but not quite sure that'll work...</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 93550,
      "author_name": "senecaur",
      "author_url": "",
      "post_date": "09/27/2015 20:55:28",
      "content": "<p>I mean more like the R-CNN approach. So getting candidate detections from some other method, e.g. cascades, and then simultaneously mitigating false alarms and regressing the bounding box using a CNN</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 93551,
      "author_name": "rocknrollnerd",
      "author_url": "",
      "post_date": "09/27/2015 20:59:23",
      "content": "<p>Huh. Never heard of it before, so thanks, I guess I have a paper to read tonight. :-)</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 97367,
      "author_name": "rocknrollnerd",
      "author_url": "",
      "post_date": "10/26/2015 14:22:17",
      "content": "<p>So, a little update on my approach, if anyone's interested: instead of using sliding windows/OverFeat/RCNN I focused on a mask regression technique described by <a href=\"http://papers.nips.cc/paper/5207-deep-neural-networks-for-object-detection.pdf\">Szegedy et al</a>. Basically you make a binary black and white mask where everything inside the object's bounding box is white and everything else is black. Then you train the network to predict a mask from raw pixel image (obviously, you need to prepare a training set of masks). I spent almost 3 weeks trying to make make it work, and the key to success seems to be augmenting your training set 10x more and adding lots of dropout, and then even a fairly shallow convnet does the trick. </p>\n\n<p>Then another idea I dwelled on for a while was to detect not the head specifically but the whole whale body instead, because I thought it will be much easier since heads are sometimes hardly distinguishable from the water-and-foam pattern. And here are some results: &quot;mask1-2-3&quot; displays mask prediction accuracy and how a bounded box is fitted to the predicted mask again (nothing fancy, some linear algebra and PCA), and &quot;predicted_bbox-1-2-3&quot; demonstrates the final result so far, separating whales from background.</p>\n\n<p>...as a side note, anybody who isn't in the team yet and likes the mask regression approach, is interested to team up? I'm a PhD student in machine learning and computer vision, who uses python/Theano/Lasagne/Keras, and this is my first Kaggle competition, so not much experience so far.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 97386,
      "author_name": "kolachalama",
      "author_url": "",
      "post_date": "10/26/2015 20:02:32",
      "content": "<p>Artem, </p>\n\n<p>The results you got seem interesting. I'm interested to team up if you are open.</p>\n\n<p>Basically, I'm trying to build a ConvNet using Matlab (I know this is a hard task, but not impossible). I have decent computing power to do some test runs on my end. On the side, I'm also trying to build a similar technique to isolate the whales but your method seems to produce better results.</p>\n\n<p>We can take this conversation private if you have any further questions. I hope to hear from you soon.</p>\n\n<p>Thanks</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 97388,
      "author_name": "rocknrollnerd",
      "author_url": "",
      "post_date": "10/26/2015 20:24:15",
      "content": "<p>Hi! It seems I have trouble trying to verify my account, so I'll contact you as soon as the support team resolves my issue. :-)</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 97389,
      "author_name": "kolachalama",
      "author_url": "",
      "post_date": "10/26/2015 20:48:46",
      "content": "<p>Sounds good</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 97446,
      "author_name": "wcskkk375",
      "author_url": "",
      "post_date": "10/27/2015 16:51:50",
      "content": "<p>Hey, i am interested in cv and machine learning. And I also use the theano and keras. Could I join your team and how could i contact you</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 97490,
      "author_name": "rocknrollnerd",
      "author_url": "",
      "post_date": "10/27/2015 21:52:44",
      "content": "<p>OK, now I feel really stupid, because somehow I thought that verifying my account will give me the access to the private messaging system, which apparently it does not. :-) So you can reach me by email (art1783@gmail.com) or Skype (tragedist) or Facebook (just look my name up).</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 98781,
      "author_name": "oldufo",
      "author_url": "",
      "post_date": "11/13/2015 14:57:33",
      "content": "<p>@vbk, speaking about matlab and convnet...<a href=\"http://www.vlfeat.org/matconvnet/\">http://www.vlfeat.org/matconvnet/</a></p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 98782,
      "author_name": "kolachalama",
      "author_url": "",
      "post_date": "11/13/2015 15:43:52",
      "content": "<p>Thanks @old-ufo</p>\n\n<p>I already know about matconvnet. I use my own code (part of my own learning).</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 99560,
      "author_name": "rocknrollnerd",
      "author_url": "",
      "post_date": "11/26/2015 13:39:06",
      "content": "<p>I've summed up my progress so far in a <a href=\"http://rocknrollnerd.github.io/ml/2015/11/26/right-whales.html\">blog post</a>, just in case that maybe somebody'll find it useful.</p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "93511": "So I've been wondering if anybody's using techniques other than LBP model described by organizers. Personally I immediately rushed for a convolutional network, and surprisingly, ended up with nice enough looking results... although, of course, not perfect. The false positive cases have already been briefly discussed before, I guess - those situations where a head is obscured and some other body part (like a tail) is surrounded by foam and makes a distinct white-gray pattern. \r\n\r\nAnd then there's an idea - maybe extracting and processing local head/background patches just doesn't give you enough information. Maybe we have to consider the spatial stucture of the body first - and direct our attention at one of it's narrow ends. The body should be relatively easy to detect; and then it's only a matter of determining its orientation and distinguishing a head from a tail...",
    "93546": "[quote=Artem Khurshudov;93511]\r\n\r\nPersonally I immediately rushed for a convolutional network, and surprisingly, ended up with nice enough looking results... although, of course, not perfect. \r\n\r\n[/quote]\r\n\r\nIf you don't mind saying, are you localizing using a convnet by regressing a bounding box or are you using a convnet as a classifier and doing some kind of sliding window approach?  The results are pretty good!  I am going to try the regression approach.",
    "93548": "I use the sliding window approach, and actually I don't like it much - it still produces a lot of false detections, so I had to set a threshold for network's output value. And by \"regressing a bounding box\" do you mean something like Yann LeCun's [OverFeat][1] framework, or do you plan to make a network that directly outputs bounding box parameters? I thought about the latter myself, but not quite sure that'll work...\r\n\r\n\r\n  [1]: http://arxiv.org/abs/1312.6229",
    "93550": "I mean more like the R-CNN approach. So getting candidate detections from some other method, e.g. cascades, and then simultaneously mitigating false alarms and regressing the bounding box using a CNN",
    "93551": "Huh. Never heard of it before, so thanks, I guess I have a paper to read tonight. :-)",
    "97367": "So, a little update on my approach, if anyone's interested: instead of using sliding windows/OverFeat/RCNN I focused on a mask regression technique described by [Szegedy et al][1]. Basically you make a binary black and white mask where everything inside the object's bounding box is white and everything else is black. Then you train the network to predict a mask from raw pixel image (obviously, you need to prepare a training set of masks). I spent almost 3 weeks trying to make make it work, and the key to success seems to be augmenting your training set 10x more and adding lots of dropout, and then even a fairly shallow convnet does the trick. \r\n\r\nThen another idea I dwelled on for a while was to detect not the head specifically but the whole whale body instead, because I thought it will be much easier since heads are sometimes hardly distinguishable from the water-and-foam pattern. And here are some results: \"mask1-2-3\" displays mask prediction accuracy and how a bounded box is fitted to the predicted mask again (nothing fancy, some linear algebra and PCA), and \"predicted_bbox-1-2-3\" demonstrates the final result so far, separating whales from background.\r\n\r\n...as a side note, anybody who isn't in the team yet and likes the mask regression approach, is interested to team up? I'm a PhD student in machine learning and computer vision, who uses python/Theano/Lasagne/Keras, and this is my first Kaggle competition, so not much experience so far.\r\n\r\n  [1]: http://papers.nips.cc/paper/5207-deep-neural-networks-for-object-detection.pdf",
    "97386": "Artem, \r\n\r\nThe results you got seem interesting. I'm interested to team up if you are open.\r\n\r\nBasically, I'm trying to build a ConvNet using Matlab (I know this is a hard task, but not impossible). I have decent computing power to do some test runs on my end. On the side, I'm also trying to build a similar technique to isolate the whales but your method seems to produce better results.\r\n\r\nWe can take this conversation private if you have any further questions. I hope to hear from you soon.\r\n\r\nThanks",
    "97388": "Hi! It seems I have trouble trying to verify my account, so I'll contact you as soon as the support team resolves my issue. :-)",
    "97389": "Sounds good",
    "97446": "Hey, i am interested in cv and machine learning. And I also use the theano and keras. Could I join your team and how could i contact you",
    "97490": "OK, now I feel really stupid, because somehow I thought that verifying my account will give me the access to the private messaging system, which apparently it does not. :-) So you can reach me by email (art1783@gmail.com) or Skype (tragedist) or Facebook (just look my name up).",
    "98781": "vbk, speaking about matlab and convnet...http://www.vlfeat.org/matconvnet/",
    "98782": "Thanks @old-ufo\r\n\r\nI already know about matconvnet. I use my own code (part of my own learning).",
    "99560": "I've summed up my progress so far in a [blog post][1], just in case that maybe somebody'll find it useful.\r\n\r\n\r\n  [1]: http://rocknrollnerd.github.io/ml/2015/11/26/right-whales.html"
  },
  "source": "meta"
}