{
  "id": 69955,
  "title": "ideas and discussion",
  "url": "/competitions/human-protein-atlas-image-classification/discussion/69955",
  "author_name": "hengck23",
  "post_date": "2018-10-29T08:06:16.623000",
  "votes": 63,
  "comment_count": 40,
  "views": 0,
  "content": "<p>\"HUMAN-LEVEL PROTEIN LOCALIZATION WITH CONVOLUTIONAL\nNEURAL NETWORKS\" - submission to ICLR 2019</p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/a95f150c7153a17538b074def2255e21/GAP.png\" alt=\"enter image description here\"></p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/9795b07359474ede3d94fe8a0631a0da/gap3.png\" alt=\"enter image description here\"></p>\n\n<p><a href=\"https://openreview.net/forum?id=ryl5khRcKm\">https://openreview.net/forum?id=ryl5khRcKm</a></p>\n\n<p><a href=\"https://openreview.net/forum?id=S1gBgnR9Y7\">https://openreview.net/forum?id=S1gBgnR9Y7</a></p>",
  "messages": [
    {
      "id": 411924,
      "postDate": "2018-10-29T08:06:16.623Z",
      "content": "<p>\"HUMAN-LEVEL PROTEIN LOCALIZATION WITH CONVOLUTIONAL\nNEURAL NETWORKS\" - submission to ICLR 2019</p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/a95f150c7153a17538b074def2255e21/GAP.png\" alt=\"enter image description here\"></p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/9795b07359474ede3d94fe8a0631a0da/gap3.png\" alt=\"enter image description here\"></p>\n\n<p><a href=\"https://openreview.net/forum?id=ryl5khRcKm\">https://openreview.net/forum?id=ryl5khRcKm</a></p>\n\n<p><a href=\"https://openreview.net/forum?id=S1gBgnR9Y7\">https://openreview.net/forum?id=S1gBgnR9Y7</a></p>",
      "rawMarkdown": "\"HUMAN-LEVEL PROTEIN LOCALIZATION WITH CONVOLUTIONAL\nNEURAL NETWORKS\" - submission to ICLR 2019\n\n\n  ![enter image description here][1]\n\n\n  ![enter image description here][2]\n\n\n\nhttps://openreview.net/forum?id=ryl5khRcKm\n\nhttps://openreview.net/forum?id=S1gBgnR9Y7\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/a95f150c7153a17538b074def2255e21/GAP.png\n  [2]: https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/9795b07359474ede3d94fe8a0631a0da/gap3.png",
      "votes": 63
    },
    {
      "id": 411930,
      "postDate": "2018-10-29T08:28:02.107Z",
      "content": "<p><a href=\"https://simplecore.intel.com/nervana/wp-content/uploads/sites/53/2018/06/IntelAIDC18_Datta_Theatre_052418_final.pdf\">https://simplecore.intel.com/nervana/wp-content/uploads/sites/53/2018/06/IntelAIDC18_Datta_Theatre_052418_final.pdf</a></p>\n\n<p>Godinez et al, A multi-scale convolutional neural network for phenotyping high-content cellular images. Bioinformatics, 2017</p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/40f9c5c1d93aa5459c31d6f1d6e7818a/multi_scale1.png\" alt=\"enter image description here\"></p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/69a157f64133c0eff9f20a74b8713f08/multi_scale2.png\" alt=\"enter image description here\"></p>",
      "rawMarkdown": "https://simplecore.intel.com/nervana/wp-content/uploads/sites/53/2018/06/IntelAIDC18_Datta_Theatre_052418_final.pdf\n\nGodinez et al, A multi-scale convolutional neural network for phenotyping high-content cellular images. Bioinformatics, 2017\n\n\n   ![enter image description here][1]\n\n   ![enter image description here][2]\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/40f9c5c1d93aa5459c31d6f1d6e7818a/multi_scale1.png\n  [2]: https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/69a157f64133c0eff9f20a74b8713f08/multi_scale2.png",
      "votes": 9,
      "replies": [
        {
          "id": 417881,
          "postDate": "2018-11-08T23:37:18.857Z",
          "content": "<p>Very interesting. I think that something like this will be very helpful here.</p>",
          "rawMarkdown": "Very interesting. I think that something like this will be very helpful here."
        },
        {
          "id": 437984,
          "postDate": "2018-12-12T22:17:24.193Z",
          "content": "<p>My own opinion on this article:\nAs far as I understood from the article, their custom network doest not outperform GoogleNet for different tasks. And they have not used any modern architectures , that, presumably will be much better than GoogleNet</p>",
          "rawMarkdown": "My own opinion on this article:\nAs far as I understood from the article, their custom network doest not outperform GoogleNet for different tasks. And they have not used any modern architectures , that, presumably will be much better than GoogleNet"
        }
      ]
    },
    {
      "id": 411972,
      "postDate": "2018-10-29T10:20:33.903Z",
      "content": "<p>Tried M-CNN on 512*512 images. Got max of 0.402 on LB. Locally it also performs not better than xception or resnet. But I kind of like the idea of using features from different resolutions.</p>\n\n<p>It also hard to say if GapNet-PL is better, as local and LB scores are very depends on how you select thresholds and gap between them is not consistent (I think I should change my validation approach some how...). Maybe it worth to try that architectures on higher resolution.</p>",
      "rawMarkdown": "Tried M-CNN on 512*512 images. Got max of 0.402 on LB. Locally it also performs not better than xception or resnet. But I kind of like the idea of using features from different resolutions.\n\nIt also hard to say if GapNet-PL is better, as local and LB scores are very depends on how you select thresholds and gap between them is not consistent (I think I should change my validation approach some how...). Maybe it worth to try that architectures on higher resolution.",
      "votes": 7
    },
    {
      "id": 416094,
      "postDate": "2018-11-06T07:27:42.130Z",
      "content": "<p>Cell organelle classification with fully convolutional neural networks\n- Kaisa Liimatainen</p>\n\n<p>winning solution from  CYTO 2017</p>\n\n<p><a href=\"http://cytoconference.org/2017/Program/Image-Analysis-Challenge.aspx\">http://cytoconference.org/2017/Program/Image-Analysis-Challenge.aspx</a>\n  <img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/416094/10620/win.png\" alt=\"enter image description here\"></p>",
      "rawMarkdown": "Cell organelle classification with fully convolutional neural networks\n- Kaisa Liimatainen\n\nwinning solution from  CYTO 2017\n\nhttp://cytoconference.org/2017/Program/Image-Analysis-Challenge.aspx\n  ![enter image description here][1]\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/416094/10620/win.png",
      "votes": 6
    },
    {
      "id": 413628,
      "postDate": "2018-11-01T09:01:32.180Z",
      "content": "<p>Thanks for posting. Tried GapNet-PL in this public kernel: <a href=\"https://www.kaggle.com/rejpalcz/gapnet-pl-lb-0-353\">https://www.kaggle.com/rejpalcz/gapnet-pl-lb-0-353</a>\nGot to LB 0.353 so far on 512x512x4 images and 30 epochs. I was able to achieve similar score on 128x128x4 with much simpler CNN. But will try to play around still.</p>",
      "rawMarkdown": "Thanks for posting. Tried GapNet-PL in this public kernel: https://www.kaggle.com/rejpalcz/gapnet-pl-lb-0-353\nGot to LB 0.353 so far on 512x512x4 images and 30 epochs. I was able to achieve similar score on 128x128x4 with much simpler CNN. But will try to play around still.",
      "votes": 3,
      "replies": [
        {
          "id": 413996,
          "postDate": "2018-11-01T23:14:04.970Z",
          "content": "<p>My top model on 512x512x3 is similar to gap net. It is a convnet encoder + one gap at the end + dense layers + sigmoid. I've trained it for hundreds of epochs at least.</p>\n\n<p>Today starting over with a new model using the high res images scaled to 1024x1024. It will also be similar to GapNet.</p>",
          "rawMarkdown": "My top model on 512x512x3 is similar to gap net. It is a convnet encoder + one gap at the end + dense layers + sigmoid. I've trained it for hundreds of epochs at least.\n\nToday starting over with a new model using the high res images scaled to 1024x1024. It will also be similar to GapNet.",
          "votes": 4
        },
        {
          "id": 414181,
          "postDate": "2018-11-02T09:20:09.167Z",
          "content": "<p>You built your structure from scratch or do you use some pretrained models? I find hard to use standard pretrained models - Keras vs. Pytorch performance for same pretrained models differ hugely and I cannot find why...</p>",
          "rawMarkdown": "You built your structure from scratch or do you use some pretrained models? I find hard to use standard pretrained models - Keras vs. Pytorch performance for same pretrained models differ hugely and I cannot find why...",
          "votes": 1
        },
        {
          "id": 416349,
          "postDate": "2018-11-06T15:21:43.007Z",
          "content": "<p><a href=\"/ldm314\">@ldm314</a> may I ask what loss function you are using ? I'd understand if don't want to share this part...</p>",
          "rawMarkdown": "@ldm314 may I ask what loss function you are using ? I'd understand if don't want to share this part...",
          "votes": 1
        },
        {
          "id": 417780,
          "postDate": "2018-11-08T19:14:27.570Z",
          "content": "<p><a href=\"/rejpalcz\">@rejpalcz</a>, I tried pretty much all of the Keras pretrained models initially. I was not able to get past .5 public LB. I also don't think models with so many parameters would be fast enough for the special prize. My top LB score so far is my own structure, trained from scratch.</p>\n\n<p><a href=\"/areveillon\">@areveillon</a>, That is a really good question. I do think part of this competition is finding a good loss function. I've created a nonlinear function that incorporates weighted BCE and F1 per batch. The weighted BCE metric I use is:</p>\n\n<pre>POS_WEIGHT = 10  # multiplier for positive targets, needs to be tuned\n\ndef weighted_binary_crossentropy(target, output):\n    \"\"\"\n    Weighted binary crossentropy between an output tensor \n    and a target tensor. POS_WEIGHT is used as a multiplier \n    for the positive targets.\n\n    Combination of the following functions:\n    * keras.losses.binary_crossentropy\n    * keras.backend.tensorflow_backend.binary_crossentropy\n    * tf.nn.weighted_cross_entropy_with_logits\n    \"\"\"\n    # transform back to logits\n    _epsilon = tfb._to_tensor(tfb.epsilon(), output.dtype.base_dtype)\n    output = tf.clip_by_value(output, _epsilon, 1 - _epsilon)\n    output = tf.log(output / (1 - output))\n    # compute weighted loss\n    loss = tf.nn.weighted_cross_entropy_with_logits(targets=target,\n                                                    logits=output,\n                                                    pos_weight=POS_WEIGHT)\n    return tf.reduce_mean(loss, axis=-1)\n\n</pre>\n\n<p>I've posted this part in another thread somewhere. The binaryRound came from an example I found online. It has the gradient replaced with Identity so it can be used in a loss function.</p>\n\n<pre>import tensorflow as tf\nfrom tensorflow.python.framework import ops\nfrom functools import reduce\n\ndef binaryRound(x):\n    \"\"\"\n    Rounds a tensor whose values are in [0,1] to a tensor with values in {0, 1},\n    using the straight through estimator for the gradient.\n    \"\"\"\n    g = tf.get_default_graph()\n\n    with ops.name_scope(\"BinaryRound\") as name:\n        with g.gradient_override_map({\"Round\": \"Identity\"}):\n            return tf.round(x, name=name)\n\n        # For Tensorflow v0.11 and below use:\n        #with g.gradient_override_map({\"Floor\": \"Identity\"}):\n        #    return tf.round(x, name=name)\n\ndef f1_score_diff(y_true, y_pred):\n    y_pred = binaryRound(y_pred)\n    tp = K.sum(K.cast(y_true*y_pred, 'float'), axis=0)\n    tn = K.sum(K.cast((1-y_true)*(1-y_pred), 'float'), axis=0)\n    fp = K.sum(K.cast((1-y_true)*y_pred, 'float'), axis=0)\n    fn = K.sum(K.cast(y_true*(1-y_pred), 'float'), axis=0)\n\n    p = tp / (tp + fp + K.epsilon())\n    r = tp / (tp + fn + K.epsilon())\n\n    f1 = 2*p*r / (p+r+K.epsilon())\n    f1 = tf.where(tf.is_nan(f1), tf.zeros_like(f1), f1)\n    return K.mean(f1)\n</pre>",
          "rawMarkdown": "@rejpalcz, I tried pretty much all of the Keras pretrained models initially. I was not able to get past .5 public LB. I also don't think models with so many parameters would be fast enough for the special prize. My top LB score so far is my own structure, trained from scratch.\n\n@areveillon, That is a really good question. I do think part of this competition is finding a good loss function. I've created a nonlinear function that incorporates weighted BCE and F1 per batch. The weighted BCE metric I use is:\n\n<pre>POS_WEIGHT = 10  # multiplier for positive targets, needs to be tuned\n\ndef weighted_binary_crossentropy(target, output):\n    \"\"\"\n    Weighted binary crossentropy between an output tensor \n    and a target tensor. POS_WEIGHT is used as a multiplier \n    for the positive targets.\n\n    Combination of the following functions:\n    * keras.losses.binary_crossentropy\n    * keras.backend.tensorflow_backend.binary_crossentropy\n    * tf.nn.weighted_cross_entropy_with_logits\n    \"\"\"\n    # transform back to logits\n    _epsilon = tfb._to_tensor(tfb.epsilon(), output.dtype.base_dtype)\n    output = tf.clip_by_value(output, _epsilon, 1 - _epsilon)\n    output = tf.log(output / (1 - output))\n    # compute weighted loss\n    loss = tf.nn.weighted_cross_entropy_with_logits(targets=target,\n                                                    logits=output,\n                                                    pos_weight=POS_WEIGHT)\n    return tf.reduce_mean(loss, axis=-1)\n\n</pre>\n\nI've posted this part in another thread somewhere. The binaryRound came from an example I found online. It has the gradient replaced with Identity so it can be used in a loss function.\n\n<pre>import tensorflow as tf\nfrom tensorflow.python.framework import ops\nfrom functools import reduce\n\ndef binaryRound(x):\n    \"\"\"\n    Rounds a tensor whose values are in [0,1] to a tensor with values in {0, 1},\n    using the straight through estimator for the gradient.\n    \"\"\"\n    g = tf.get_default_graph()\n\n    with ops.name_scope(\"BinaryRound\") as name:\n        with g.gradient_override_map({\"Round\": \"Identity\"}):\n            return tf.round(x, name=name)\n\n        # For Tensorflow v0.11 and below use:\n        #with g.gradient_override_map({\"Floor\": \"Identity\"}):\n        #    return tf.round(x, name=name)\n\ndef f1_score_diff(y_true, y_pred):\n    y_pred = binaryRound(y_pred)\n    tp = K.sum(K.cast(y_true*y_pred, 'float'), axis=0)\n    tn = K.sum(K.cast((1-y_true)*(1-y_pred), 'float'), axis=0)\n    fp = K.sum(K.cast((1-y_true)*y_pred, 'float'), axis=0)\n    fn = K.sum(K.cast(y_true*(1-y_pred), 'float'), axis=0)\n\n    p = tp / (tp + fp + K.epsilon())\n    r = tp / (tp + fn + K.epsilon())\n\n    f1 = 2*p*r / (p+r+K.epsilon())\n    f1 = tf.where(tf.is_nan(f1), tf.zeros_like(f1), f1)\n    return K.mean(f1)\n</pre>",
          "votes": 8
        },
        {
          "id": 417829,
          "postDate": "2018-11-08T20:50:29.477Z",
          "content": "<p>@Brian <code>I tried pretty much all of the Keras pretrained models initially.</code> Are you using 3 channel vice 4?</p>",
          "rawMarkdown": "@Brian ```I tried pretty much all of the Keras pretrained models initially.``` Are you using 3 channel vice 4?"
        },
        {
          "id": 417843,
          "postDate": "2018-11-08T21:19:44.777Z",
          "content": "<p>3 channel, RGB images. Currently not using the yellow images.</p>",
          "rawMarkdown": "3 channel, RGB images. Currently not using the yellow images.",
          "votes": 1
        },
        {
          "id": 417846,
          "postDate": "2018-11-08T21:28:45.367Z",
          "content": "<p>Thank you</p>",
          "rawMarkdown": "Thank you"
        },
        {
          "id": 417853,
          "postDate": "2018-11-08T21:44:28.713Z",
          "content": "<p>Thanks a lot Brian for taking the time to share so many great ideas... </p>",
          "rawMarkdown": "Thanks a lot Brian for taking the time to share so many great ideas... "
        },
        {
          "id": 419646,
          "postDate": "2018-11-12T10:58:49.813Z",
          "content": "<p>Hi @Brian，what is the appropriate value for POS_WEIGHT in this case？And why？\nThanks！</p>",
          "rawMarkdown": "Hi @Brian，what is the appropriate value for POS_WEIGHT in this case？And why？\nThanks！"
        },
        {
          "id": 420130,
          "postDate": "2018-11-13T05:30:42.050Z",
          "content": "<p>POS_WEIGHT is passed to the tensorflow object, the documentation for it is here: <a href=\"https://www.tensorflow.org/api_docs/python/tf/nn/weighted_cross_entropy_with_logits\">https://www.tensorflow.org/api_docs/python/tf/nn/weighted_cross_entropy_with_logits</a></p>\n\n<p>Basically, if it is greater than 1 it is decreasing false negatives to increase the recall. Lower than 1 it decreases false positives which increases precision. I have it set higher than 1 because each target has only 1-4 classes out of 28.</p>",
          "rawMarkdown": "POS_WEIGHT is passed to the tensorflow object, the documentation for it is here: https://www.tensorflow.org/api_docs/python/tf/nn/weighted_cross_entropy_with_logits\n\nBasically, if it is greater than 1 it is decreasing false negatives to increase the recall. Lower than 1 it decreases false positives which increases precision. I have it set higher than 1 because each target has only 1-4 classes out of 28."
        }
      ]
    },
    {
      "id": 411931,
      "postDate": "2018-10-29T08:30:35.923Z",
      "content": "<p>Learning unsupervised feature representations for single cell microscopy images with paired cell inpainting\nAlex Lu, Oren Z Kraus, Sam Cooper, Alan M Moses</p>\n\n<p><a href=\"https://doi.org/10.1101/395954\">https://doi.org/10.1101/395954</a></p>\n\n<p><a href=\"http://www.moseslab.csb.utoronto.ca/alexlu/\">http://www.moseslab.csb.utoronto.ca/alexlu/</a></p>",
      "rawMarkdown": "Learning unsupervised feature representations for single cell microscopy images with paired cell inpainting\nAlex Lu, Oren Z Kraus, Sam Cooper, Alan M Moses\n\nhttps://doi.org/10.1101/395954\n\n\nhttp://www.moseslab.csb.utoronto.ca/alexlu/\n\n \n",
      "votes": 3,
      "replies": [
        {
          "id": 414245,
          "postDate": "2018-11-02T12:01:40.037Z",
          "content": "<p>Has anyone tried generative models in this competition?</p>",
          "rawMarkdown": "Has anyone tried generative models in this competition?",
          "votes": 1
        }
      ]
    },
    {
      "id": 416091,
      "postDate": "2018-11-06T07:25:07.803Z",
      "content": "<p>how accuracy is affected by image size:</p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/416091/10619/image_size.png\" alt=\"enter image description here\"></p>",
      "rawMarkdown": "how accuracy is affected by image size:\n\n  ![enter image description here][1]\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/416091/10619/image_size.png",
      "votes": 4,
      "replies": [
        {
          "id": 416519,
          "postDate": "2018-11-06T19:49:30.797Z",
          "content": "<p>I hope this holds true. 1024x1024 is pushing it for my video card. So far my best is still at 512x512.</p>",
          "rawMarkdown": "I hope this holds true. 1024x1024 is pushing it for my video card. So far my best is still at 512x512."
        },
        {
          "id": 419799,
          "postDate": "2018-11-12T15:15:43.787Z",
          "content": "<p>Brian,</p>\n\n<p>What video card are you using that lets you get to 1024x1024 or are you doing something in your code to accommodate such large images? I am using an Nvidia 1060 with 6 GB RAM and my max image size is 425x425.  I started out at 224x224 and it is very clear that my scores have improved with each tweak to the image size but I think I am now out of gas from a hardware perspective.</p>\n\n<p>tx</p>\n\n<p>Kickback</p>",
          "rawMarkdown": "Brian,\n\nWhat video card are you using that lets you get to 1024x1024 or are you doing something in your code to accommodate such large images? I am using an Nvidia 1060 with 6 GB RAM and my max image size is 425x425.  I started out at 224x224 and it is very clear that my scores have improved with each tweak to the image size but I think I am now out of gas from a hardware perspective.\n\ntx\n\nKickback"
        },
        {
          "id": 419902,
          "postDate": "2018-11-12T18:35:36.103Z",
          "content": "<p>It really depends on the model you are running. I am running my own models that have only a few convolutions layers at full resolution before maxpooling down to smaller sizes. I found working at 1024x1024 would bottleneck my cpu and ssd more than the video card. Currently I've backed down to 768x768 while trying new ideas.</p>\n\n<p>The video card I'm using for higher resolution is a GTX Titan X Maxwell with 12GB. At 768x768 I can run batch sizes of 48 with my most recent model. My best score so far came from a 512x512 model that ran on my 2nd GPU, a GTX 970 with 4GB ram.</p>",
          "rawMarkdown": "It really depends on the model you are running. I am running my own models that have only a few convolutions layers at full resolution before maxpooling down to smaller sizes. I found working at 1024x1024 would bottleneck my cpu and ssd more than the video card. Currently I've backed down to 768x768 while trying new ideas.\n\nThe video card I'm using for higher resolution is a GTX Titan X Maxwell with 12GB. At 768x768 I can run batch sizes of 48 with my most recent model. My best score so far came from a 512x512 model that ran on my 2nd GPU, a GTX 970 with 4GB ram.",
          "votes": 1
        },
        {
          "id": 420086,
          "postDate": "2018-11-13T03:15:18.403Z",
          "content": "<p>you only need to detect one instance of the object in the image to give the image label. You need not detect all instance.</p>\n\n<p>Hence you can divide the big image into overlapping regions of smaller size and do some pooling on the smaller regions.</p>",
          "rawMarkdown": "you only need to detect one instance of the object in the image to give the image label. You need not detect all instance.\n\nHence you can divide the big image into overlapping regions of smaller size and do some pooling on the smaller regions.",
          "votes": 2
        }
      ]
    },
    {
      "id": 415369,
      "postDate": "2018-11-05T02:12:02.033Z",
      "content": "<p>fyi</p>\n\n<p>PatternNet: Visual Pattern Mining with Deep Neural Network.  Li, Hongzhi, Joseph G. Ellis, Lei Zhang, and Shih-Fu Chang  In International Conference on Multimedia Retrieval (ICMR)   Yokohama, Japan   June, 2018   [arxiv]  </p>\n\n<p><img src=\"http://dvmmweb.cs.columbia.edu/files/li2018patternnet.JPG\" alt=\"enter image description here\"></p>",
      "rawMarkdown": "fyi\n\n\nPatternNet: Visual Pattern Mining with Deep Neural Network.  Li, Hongzhi, Joseph G. Ellis, Lei Zhang, and Shih-Fu Chang  In International Conference on Multimedia Retrieval (ICMR)   Yokohama, Japan   June, 2018   [arxiv]  \n\n![enter image description here][1]\n\n\n  [1]: http://dvmmweb.cs.columbia.edu/files/li2018patternnet.JPG",
      "votes": 2
    },
    {
      "id": 411961,
      "postDate": "2018-10-29T09:55:43.827Z",
      "content": "<p>Thanks for the share <a href=\"/hengck23\">@hengck23</a>. </p>\n\n<p>I've also heard about a Loc-CAT, mentioned here.</p>\n\n<p><a href=\"https://www.nature.com/articles/nbt.4225\">Sullivan, D. P. et al. <em>Deep learning is combined with massive-scale citizen science to improve large-scale image classification.</em></a></p>",
      "rawMarkdown": "Thanks for the share @hengck23. \n\nI've also heard about a Loc-CAT, mentioned here.\n\n[Sullivan, D. P. et al. _Deep learning is combined with massive-scale citizen science to improve large-scale image classification._](https://www.nature.com/articles/nbt.4225)",
      "votes": 2
    },
    {
      "id": 412077,
      "postDate": "2018-10-29T14:39:35.923Z",
      "content": "<p>Seems like size is a big problem. Due to memory limit (which is closely related to speed and therefore prototyping cycle) I'm currently running experiments only on 512*512. Later on, with a stronger pipeline I will definitely move to 1024*1024 and even 2048*2048.</p>\n\n<p>My take on the limit of 512*512 images: 0.6 LB maybe? A good clue would be that my current LB is achieved by a naive architecture with no hyperparameter fine-tuning.</p>",
      "rawMarkdown": "Seems like size is a big problem. Due to memory limit (which is closely related to speed and therefore prototyping cycle) I'm currently running experiments only on 512*512. Later on, with a stronger pipeline I will definitely move to 1024*1024 and even 2048*2048.\n\nMy take on the limit of 512*512 images: 0.6 LB maybe? A good clue would be that my current LB is achieved by a naive architecture with no hyperparameter fine-tuning.",
      "replies": [
        {
          "id": 412086,
          "postDate": "2018-10-29T14:53:14.890Z",
          "content": "<p>@ Alexander Liao</p>\n\n<p>the trick to big size image classification problem is:</p>\n\n<ol>\n<li><p>if there the image contain e.g. \"one\" object of type A, it is has a label A.\nif it contains two, three, .... objects, it is  has still a label A</p></li>\n<li><p>you can always break the image into smaller image an ensemble back again. My CDiscount challenge solution gives you a clue on how to do it!</p></li>\n</ol>\n\n<p>good luck!</p>",
          "rawMarkdown": "@ Alexander Liao\n \nthe trick to big size image classification problem is:\n\n1. if there the image contain e.g. \"one\" object of type A, it is has a label A.\n    if it contains two, three, .... objects, it is  has still a label A\n\n2. you can always break the image into smaller image an ensemble back again. My CDiscount challenge solution gives you a clue on how to do it!\n\ngood luck!",
          "votes": 6
        },
        {
          "id": 412094,
          "postDate": "2018-10-29T15:00:10.147Z",
          "content": "<p>If you don't mind me asking, what's your hardware for processing the 512x512's?</p>",
          "rawMarkdown": "If you don't mind me asking, what's your hardware for processing the 512x512's?"
        },
        {
          "id": 412097,
          "postDate": "2018-10-29T15:04:03.083Z",
          "content": "<p>But it also creates problem for training, because you can't say which crop contains which classes. That is the main point to use not cropped images (as suggested in papers).</p>",
          "rawMarkdown": "But it also creates problem for training, because you can't say which crop contains which classes. That is the main point to use not cropped images (as suggested in papers)."
        },
        {
          "id": 412101,
          "postDate": "2018-10-29T15:08:53.747Z",
          "content": "<p>you have to modify your loss a bit</p>\n\n<p>the label loss is computed over all divided images in stage 1 training.</p>\n\n<p>... think a long the line of \"multiple instance training\", \"noisy or model\"</p>",
          "rawMarkdown": "you have to modify your loss a bit\n\nthe label loss is computed over all divided images in stage 1 training.\n\n\n... think a long the line of \"multiple instance training\", \"noisy or model\""
        },
        {
          "id": 417679,
          "postDate": "2018-11-08T16:24:27.313Z",
          "content": "<p>You could incorporate a strategy of computing your loss over all split image segments if you are really fussy, but I reckon you could just run them as individual examples and will likely not run into too many issues...</p>\n\n<p>There are several cells in each image. From a  biological perspective <em>most</em> proteins stained with these dyes will localise to the same compartments in most cells in the image (unless the staining is performed on a very diverse population). Manually looking at the green channel for the images we have been provided, I think this theory <em>generally</em> holds true.</p>\n\n<p>Therefore, as long as there are enough cells in each split image segment, it is extremely likely that class labels will be shared across all segments. This won't hold true in every case, but I am doubtful that the error added from this would outweigh the benefit if you are primarily aiming for a higher Kaggle LB. I wouldn't go smaller than ~2-3 cells per segment on average. I think quarters should be okay.</p>\n\n<p>That said, I will perform some tests at some point and see if what I'm saying is reasonable or just BS!</p>",
          "rawMarkdown": "You could incorporate a strategy of computing your loss over all split image segments if you are really fussy, but I reckon you could just run them as individual examples and will likely not run into too many issues...\n\nThere are several cells in each image. From a  biological perspective *most* proteins stained with these dyes will localise to the same compartments in most cells in the image (unless the staining is performed on a very diverse population). Manually looking at the green channel for the images we have been provided, I think this theory *generally* holds true.\n\nTherefore, as long as there are enough cells in each split image segment, it is extremely likely that class labels will be shared across all segments. This won't hold true in every case, but I am doubtful that the error added from this would outweigh the benefit if you are primarily aiming for a higher Kaggle LB. I wouldn't go smaller than ~2-3 cells per segment on average. I think quarters should be okay.\n\nThat said, I will perform some tests at some point and see if what I'm saying is reasonable or just BS!"
        }
      ]
    },
    {
      "id": 414518,
      "postDate": "2018-11-02T23:02:14.947Z",
      "content": "<p>Thanks for sharing, you always share good ideas and I learn a lot from them.</p>",
      "rawMarkdown": "Thanks for sharing, you always share good ideas and I learn a lot from them."
    },
    {
      "id": 414257,
      "postDate": "2018-11-02T12:36:35.580Z",
      "content": "<p>Thanks for posting, this is really interesting :D</p>",
      "rawMarkdown": "Thanks for posting, this is really interesting :D"
    },
    {
      "id": 413987,
      "postDate": "2018-11-01T22:42:09.223Z",
      "content": "<p>nice</p>",
      "rawMarkdown": "nice"
    },
    {
      "id": 413947,
      "postDate": "2018-11-01T21:04:16.387Z",
      "content": "<p>My network I've made from scratch seems similar to GapNet. The last few days I've been working on a new model using the high resolution images. I'm definitely going to incorporate some of the ideas here and see how it goes.</p>",
      "rawMarkdown": "My network I've made from scratch seems similar to GapNet. The last few days I've been working on a new model using the high resolution images. I'm definitely going to incorporate some of the ideas here and see how it goes."
    },
    {
      "id": 412100,
      "postDate": "2018-10-29T15:06:13.480Z",
      "content": "<p>Thanks for the share. Can you please tell me the difference between two type of convolution stride(Blue and White)?</p>",
      "rawMarkdown": "Thanks for the share. Can you please tell me the difference between two type of convolution stride(Blue and White)?",
      "replies": [
        {
          "id": 412952,
          "postDate": "2018-10-31T03:20:39.777Z",
          "content": "<p>As show in the fig, the stride is different</p>",
          "rawMarkdown": "As show in the fig, the stride is different"
        }
      ]
    },
    {
      "id": 411947,
      "postDate": "2018-10-29T09:23:53.983Z",
      "content": "<p>Wow, thanks for sharing! Well summarized as always ... </p>",
      "rawMarkdown": "Wow, thanks for sharing! Well summarized as always ... "
    },
    {
      "id": 909777,
      "postDate": "2020-06-30T20:19:19.393Z",
      "rawMarkdown": "",
      "isDeleted": true
    },
    {
      "id": 437723,
      "postDate": "2018-12-12T11:13:26.567Z",
      "content": "<p>Very good!\nThank for share!</p>",
      "rawMarkdown": "Very good!\nThank for share!"
    }
  ],
  "comments": [
    {
      "id": 411930,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2018-10-29T08:28:02.107000",
      "content": "<p><a href=\"https://simplecore.intel.com/nervana/wp-content/uploads/sites/53/2018/06/IntelAIDC18_Datta_Theatre_052418_final.pdf\">https://simplecore.intel.com/nervana/wp-content/uploads/sites/53/2018/06/IntelAIDC18_Datta_Theatre_052418_final.pdf</a></p>\n\n<p>Godinez et al, A multi-scale convolutional neural network for phenotyping high-content cellular images. Bioinformatics, 2017</p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/40f9c5c1d93aa5459c31d6f1d6e7818a/multi_scale1.png\" alt=\"enter image description here\"></p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/69a157f64133c0eff9f20a74b8713f08/multi_scale2.png\" alt=\"enter image description here\"></p>",
      "votes": 9,
      "replies": [
        {
          "id": 417881,
          "author_name": "pete",
          "author_url": "",
          "post_date": "2018-11-08T23:37:18.857000",
          "content": "<p>Very interesting. I think that something like this will be very helpful here.</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 437984,
          "author_name": "Vaagn Minasian",
          "author_url": "",
          "post_date": "2018-12-12T22:17:24.193000",
          "content": "<p>My own opinion on this article:\nAs far as I understood from the article, their custom network doest not outperform GoogleNet for different tasks. And they have not used any modern architectures , that, presumably will be much better than GoogleNet</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 411972,
      "author_name": "Aleksandr Kiselev",
      "author_url": "",
      "post_date": "2018-10-29T10:20:33.903000",
      "content": "<p>Tried M-CNN on 512*512 images. Got max of 0.402 on LB. Locally it also performs not better than xception or resnet. But I kind of like the idea of using features from different resolutions.</p>\n\n<p>It also hard to say if GapNet-PL is better, as local and LB scores are very depends on how you select thresholds and gap between them is not consistent (I think I should change my validation approach some how...). Maybe it worth to try that architectures on higher resolution.</p>",
      "votes": 7,
      "replies": []
    },
    {
      "id": 416094,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2018-11-06T07:27:42.130000",
      "content": "<p>Cell organelle classification with fully convolutional neural networks\n- Kaisa Liimatainen</p>\n\n<p>winning solution from  CYTO 2017</p>\n\n<p><a href=\"http://cytoconference.org/2017/Program/Image-Analysis-Challenge.aspx\">http://cytoconference.org/2017/Program/Image-Analysis-Challenge.aspx</a>\n  <img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/416094/10620/win.png\" alt=\"enter image description here\"></p>",
      "votes": 6,
      "replies": []
    },
    {
      "id": 413628,
      "author_name": "Michal Haltuf",
      "author_url": "",
      "post_date": "2018-11-01T09:01:32.180000",
      "content": "<p>Thanks for posting. Tried GapNet-PL in this public kernel: <a href=\"https://www.kaggle.com/rejpalcz/gapnet-pl-lb-0-353\">https://www.kaggle.com/rejpalcz/gapnet-pl-lb-0-353</a>\nGot to LB 0.353 so far on 512x512x4 images and 30 epochs. I was able to achieve similar score on 128x128x4 with much simpler CNN. But will try to play around still.</p>",
      "votes": 3,
      "replies": [
        {
          "id": 413996,
          "author_name": "Brian",
          "author_url": "",
          "post_date": "2018-11-01T23:14:04.970000",
          "content": "<p>My top model on 512x512x3 is similar to gap net. It is a convnet encoder + one gap at the end + dense layers + sigmoid. I've trained it for hundreds of epochs at least.</p>\n\n<p>Today starting over with a new model using the high res images scaled to 1024x1024. It will also be similar to GapNet.</p>",
          "votes": 4,
          "replies": []
        },
        {
          "id": 414181,
          "author_name": "Michal Haltuf",
          "author_url": "",
          "post_date": "2018-11-02T09:20:09.167000",
          "content": "<p>You built your structure from scratch or do you use some pretrained models? I find hard to use standard pretrained models - Keras vs. Pytorch performance for same pretrained models differ hugely and I cannot find why...</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 416349,
          "author_name": "Antoine",
          "author_url": "",
          "post_date": "2018-11-06T15:21:43.007000",
          "content": "<p><a href=\"/ldm314\">@ldm314</a> may I ask what loss function you are using ? I'd understand if don't want to share this part...</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 417780,
          "author_name": "Brian",
          "author_url": "",
          "post_date": "2018-11-08T19:14:27.570000",
          "content": "<p><a href=\"/rejpalcz\">@rejpalcz</a>, I tried pretty much all of the Keras pretrained models initially. I was not able to get past .5 public LB. I also don't think models with so many parameters would be fast enough for the special prize. My top LB score so far is my own structure, trained from scratch.</p>\n\n<p><a href=\"/areveillon\">@areveillon</a>, That is a really good question. I do think part of this competition is finding a good loss function. I've created a nonlinear function that incorporates weighted BCE and F1 per batch. The weighted BCE metric I use is:</p>\n\n<pre>POS_WEIGHT = 10  # multiplier for positive targets, needs to be tuned\n\ndef weighted_binary_crossentropy(target, output):\n    \"\"\"\n    Weighted binary crossentropy between an output tensor \n    and a target tensor. POS_WEIGHT is used as a multiplier \n    for the positive targets.\n\n    Combination of the following functions:\n    * keras.losses.binary_crossentropy\n    * keras.backend.tensorflow_backend.binary_crossentropy\n    * tf.nn.weighted_cross_entropy_with_logits\n    \"\"\"\n    # transform back to logits\n    _epsilon = tfb._to_tensor(tfb.epsilon(), output.dtype.base_dtype)\n    output = tf.clip_by_value(output, _epsilon, 1 - _epsilon)\n    output = tf.log(output / (1 - output))\n    # compute weighted loss\n    loss = tf.nn.weighted_cross_entropy_with_logits(targets=target,\n                                                    logits=output,\n                                                    pos_weight=POS_WEIGHT)\n    return tf.reduce_mean(loss, axis=-1)\n\n</pre>\n\n<p>I've posted this part in another thread somewhere. The binaryRound came from an example I found online. It has the gradient replaced with Identity so it can be used in a loss function.</p>\n\n<pre>import tensorflow as tf\nfrom tensorflow.python.framework import ops\nfrom functools import reduce\n\ndef binaryRound(x):\n    \"\"\"\n    Rounds a tensor whose values are in [0,1] to a tensor with values in {0, 1},\n    using the straight through estimator for the gradient.\n    \"\"\"\n    g = tf.get_default_graph()\n\n    with ops.name_scope(\"BinaryRound\") as name:\n        with g.gradient_override_map({\"Round\": \"Identity\"}):\n            return tf.round(x, name=name)\n\n        # For Tensorflow v0.11 and below use:\n        #with g.gradient_override_map({\"Floor\": \"Identity\"}):\n        #    return tf.round(x, name=name)\n\ndef f1_score_diff(y_true, y_pred):\n    y_pred = binaryRound(y_pred)\n    tp = K.sum(K.cast(y_true*y_pred, 'float'), axis=0)\n    tn = K.sum(K.cast((1-y_true)*(1-y_pred), 'float'), axis=0)\n    fp = K.sum(K.cast((1-y_true)*y_pred, 'float'), axis=0)\n    fn = K.sum(K.cast(y_true*(1-y_pred), 'float'), axis=0)\n\n    p = tp / (tp + fp + K.epsilon())\n    r = tp / (tp + fn + K.epsilon())\n\n    f1 = 2*p*r / (p+r+K.epsilon())\n    f1 = tf.where(tf.is_nan(f1), tf.zeros_like(f1), f1)\n    return K.mean(f1)\n</pre>",
          "votes": 8,
          "replies": []
        },
        {
          "id": 417829,
          "author_name": "William Green",
          "author_url": "",
          "post_date": "2018-11-08T20:50:29.477000",
          "content": "<p>@Brian <code>I tried pretty much all of the Keras pretrained models initially.</code> Are you using 3 channel vice 4?</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 417843,
          "author_name": "Brian",
          "author_url": "",
          "post_date": "2018-11-08T21:19:44.777000",
          "content": "<p>3 channel, RGB images. Currently not using the yellow images.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 417846,
          "author_name": "William Green",
          "author_url": "",
          "post_date": "2018-11-08T21:28:45.367000",
          "content": "<p>Thank you</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 417853,
          "author_name": "Antoine",
          "author_url": "",
          "post_date": "2018-11-08T21:44:28.713000",
          "content": "<p>Thanks a lot Brian for taking the time to share so many great ideas... </p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 419646,
          "author_name": "vikeezhou",
          "author_url": "",
          "post_date": "2018-11-12T10:58:49.813000",
          "content": "<p>Hi @Brian，what is the appropriate value for POS_WEIGHT in this case？And why？\nThanks！</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 420130,
          "author_name": "Brian",
          "author_url": "",
          "post_date": "2018-11-13T05:30:42.050000",
          "content": "<p>POS_WEIGHT is passed to the tensorflow object, the documentation for it is here: <a href=\"https://www.tensorflow.org/api_docs/python/tf/nn/weighted_cross_entropy_with_logits\">https://www.tensorflow.org/api_docs/python/tf/nn/weighted_cross_entropy_with_logits</a></p>\n\n<p>Basically, if it is greater than 1 it is decreasing false negatives to increase the recall. Lower than 1 it decreases false positives which increases precision. I have it set higher than 1 because each target has only 1-4 classes out of 28.</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 411931,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2018-10-29T08:30:35.923000",
      "content": "<p>Learning unsupervised feature representations for single cell microscopy images with paired cell inpainting\nAlex Lu, Oren Z Kraus, Sam Cooper, Alan M Moses</p>\n\n<p><a href=\"https://doi.org/10.1101/395954\">https://doi.org/10.1101/395954</a></p>\n\n<p><a href=\"http://www.moseslab.csb.utoronto.ca/alexlu/\">http://www.moseslab.csb.utoronto.ca/alexlu/</a></p>",
      "votes": 3,
      "replies": [
        {
          "id": 414245,
          "author_name": "TomomiMoriyama",
          "author_url": "",
          "post_date": "2018-11-02T12:01:40.037000",
          "content": "<p>Has anyone tried generative models in this competition?</p>",
          "votes": 1,
          "replies": []
        }
      ]
    },
    {
      "id": 416091,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2018-11-06T07:25:07.803000",
      "content": "<p>how accuracy is affected by image size:</p>\n\n<p><img src=\"https://storage.googleapis.com/kaggle-forum-message-attachments/416091/10619/image_size.png\" alt=\"enter image description here\"></p>",
      "votes": 4,
      "replies": [
        {
          "id": 416519,
          "author_name": "Brian",
          "author_url": "",
          "post_date": "2018-11-06T19:49:30.797000",
          "content": "<p>I hope this holds true. 1024x1024 is pushing it for my video card. So far my best is still at 512x512.</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 419799,
          "author_name": "kickback",
          "author_url": "",
          "post_date": "2018-11-12T15:15:43.787000",
          "content": "<p>Brian,</p>\n\n<p>What video card are you using that lets you get to 1024x1024 or are you doing something in your code to accommodate such large images? I am using an Nvidia 1060 with 6 GB RAM and my max image size is 425x425.  I started out at 224x224 and it is very clear that my scores have improved with each tweak to the image size but I think I am now out of gas from a hardware perspective.</p>\n\n<p>tx</p>\n\n<p>Kickback</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 419902,
          "author_name": "Brian",
          "author_url": "",
          "post_date": "2018-11-12T18:35:36.103000",
          "content": "<p>It really depends on the model you are running. I am running my own models that have only a few convolutions layers at full resolution before maxpooling down to smaller sizes. I found working at 1024x1024 would bottleneck my cpu and ssd more than the video card. Currently I've backed down to 768x768 while trying new ideas.</p>\n\n<p>The video card I'm using for higher resolution is a GTX Titan X Maxwell with 12GB. At 768x768 I can run batch sizes of 48 with my most recent model. My best score so far came from a 512x512 model that ran on my 2nd GPU, a GTX 970 with 4GB ram.</p>",
          "votes": 1,
          "replies": []
        },
        {
          "id": 420086,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2018-11-13T03:15:18.403000",
          "content": "<p>you only need to detect one instance of the object in the image to give the image label. You need not detect all instance.</p>\n\n<p>Hence you can divide the big image into overlapping regions of smaller size and do some pooling on the smaller regions.</p>",
          "votes": 2,
          "replies": []
        }
      ]
    },
    {
      "id": 415369,
      "author_name": "hengck23",
      "author_url": "",
      "post_date": "2018-11-05T02:12:02.033000",
      "content": "<p>fyi</p>\n\n<p>PatternNet: Visual Pattern Mining with Deep Neural Network.  Li, Hongzhi, Joseph G. Ellis, Lei Zhang, and Shih-Fu Chang  In International Conference on Multimedia Retrieval (ICMR)   Yokohama, Japan   June, 2018   [arxiv]  </p>\n\n<p><img src=\"http://dvmmweb.cs.columbia.edu/files/li2018patternnet.JPG\" alt=\"enter image description here\"></p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 411961,
      "author_name": "Vig",
      "author_url": "",
      "post_date": "2018-10-29T09:55:43.827000",
      "content": "<p>Thanks for the share <a href=\"/hengck23\">@hengck23</a>. </p>\n\n<p>I've also heard about a Loc-CAT, mentioned here.</p>\n\n<p><a href=\"https://www.nature.com/articles/nbt.4225\">Sullivan, D. P. et al. <em>Deep learning is combined with massive-scale citizen science to improve large-scale image classification.</em></a></p>",
      "votes": 2,
      "replies": []
    },
    {
      "id": 412077,
      "author_name": "Peiyuan Liao",
      "author_url": "",
      "post_date": "2018-10-29T14:39:35.923000",
      "content": "<p>Seems like size is a big problem. Due to memory limit (which is closely related to speed and therefore prototyping cycle) I'm currently running experiments only on 512*512. Later on, with a stronger pipeline I will definitely move to 1024*1024 and even 2048*2048.</p>\n\n<p>My take on the limit of 512*512 images: 0.6 LB maybe? A good clue would be that my current LB is achieved by a naive architecture with no hyperparameter fine-tuning.</p>",
      "votes": 0,
      "replies": [
        {
          "id": 412086,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2018-10-29T14:53:14.890000",
          "content": "<p>@ Alexander Liao</p>\n\n<p>the trick to big size image classification problem is:</p>\n\n<ol>\n<li><p>if there the image contain e.g. \"one\" object of type A, it is has a label A.\nif it contains two, three, .... objects, it is  has still a label A</p></li>\n<li><p>you can always break the image into smaller image an ensemble back again. My CDiscount challenge solution gives you a clue on how to do it!</p></li>\n</ol>\n\n<p>good luck!</p>",
          "votes": 6,
          "replies": []
        },
        {
          "id": 412094,
          "author_name": "Vig",
          "author_url": "",
          "post_date": "2018-10-29T15:00:10.147000",
          "content": "<p>If you don't mind me asking, what's your hardware for processing the 512x512's?</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 412097,
          "author_name": "Aleksandr Kiselev",
          "author_url": "",
          "post_date": "2018-10-29T15:04:03.083000",
          "content": "<p>But it also creates problem for training, because you can't say which crop contains which classes. That is the main point to use not cropped images (as suggested in papers).</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 412101,
          "author_name": "hengck23",
          "author_url": "",
          "post_date": "2018-10-29T15:08:53.747000",
          "content": "<p>you have to modify your loss a bit</p>\n\n<p>the label loss is computed over all divided images in stage 1 training.</p>\n\n<p>... think a long the line of \"multiple instance training\", \"noisy or model\"</p>",
          "votes": 0,
          "replies": []
        },
        {
          "id": 417679,
          "author_name": "DStjhb",
          "author_url": "",
          "post_date": "2018-11-08T16:24:27.313000",
          "content": "<p>You could incorporate a strategy of computing your loss over all split image segments if you are really fussy, but I reckon you could just run them as individual examples and will likely not run into too many issues...</p>\n\n<p>There are several cells in each image. From a  biological perspective <em>most</em> proteins stained with these dyes will localise to the same compartments in most cells in the image (unless the staining is performed on a very diverse population). Manually looking at the green channel for the images we have been provided, I think this theory <em>generally</em> holds true.</p>\n\n<p>Therefore, as long as there are enough cells in each split image segment, it is extremely likely that class labels will be shared across all segments. This won't hold true in every case, but I am doubtful that the error added from this would outweigh the benefit if you are primarily aiming for a higher Kaggle LB. I wouldn't go smaller than ~2-3 cells per segment on average. I think quarters should be okay.</p>\n\n<p>That said, I will perform some tests at some point and see if what I'm saying is reasonable or just BS!</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 414518,
      "author_name": "MengYe",
      "author_url": "",
      "post_date": "2018-11-02T23:02:14.947000",
      "content": "<p>Thanks for sharing, you always share good ideas and I learn a lot from them.</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 414257,
      "author_name": "M Iqbal Arrafii",
      "author_url": "",
      "post_date": "2018-11-02T12:36:35.580000",
      "content": "<p>Thanks for posting, this is really interesting :D</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 413987,
      "author_name": "LuckyLearner",
      "author_url": "",
      "post_date": "2018-11-01T22:42:09.223000",
      "content": "<p>nice</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 413947,
      "author_name": "Brian",
      "author_url": "",
      "post_date": "2018-11-01T21:04:16.387000",
      "content": "<p>My network I've made from scratch seems similar to GapNet. The last few days I've been working on a new model using the high resolution images. I'm definitely going to incorporate some of the ideas here and see how it goes.</p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 412100,
      "author_name": "Sajratul Yakin Rubaiat",
      "author_url": "",
      "post_date": "2018-10-29T15:06:13.480000",
      "content": "<p>Thanks for the share. Can you please tell me the difference between two type of convolution stride(Blue and White)?</p>",
      "votes": 0,
      "replies": [
        {
          "id": 412952,
          "author_name": "GhMa",
          "author_url": "",
          "post_date": "2018-10-31T03:20:39.777000",
          "content": "<p>As show in the fig, the stride is different</p>",
          "votes": 0,
          "replies": []
        }
      ]
    },
    {
      "id": 411947,
      "author_name": "khyeh",
      "author_url": "",
      "post_date": "2018-10-29T09:23:53.983000",
      "content": "<p>Wow, thanks for sharing! Well summarized as always ... </p>",
      "votes": 0,
      "replies": []
    },
    {
      "id": 909777,
      "author_name": "",
      "author_url": "",
      "post_date": "2020-06-30T20:19:19.393000",
      "content": "",
      "votes": 0,
      "replies": []
    },
    {
      "id": 437723,
      "author_name": "Hung The Nguyen",
      "author_url": "",
      "post_date": "2018-12-12T11:13:26.567000",
      "content": "<p>Very good!\nThank for share!</p>",
      "votes": 0,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "411924": "\"HUMAN-LEVEL PROTEIN LOCALIZATION WITH CONVOLUTIONAL\nNEURAL NETWORKS\" - submission to ICLR 2019\n\n\n  ![enter image description here][1]\n\n\n  ![enter image description here][2]\n\n\n\nhttps://openreview.net/forum?id=ryl5khRcKm\n\nhttps://openreview.net/forum?id=S1gBgnR9Y7\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/a95f150c7153a17538b074def2255e21/GAP.png\n  [2]: https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/9795b07359474ede3d94fe8a0631a0da/gap3.png",
    "411930": "https://simplecore.intel.com/nervana/wp-content/uploads/sites/53/2018/06/IntelAIDC18_Datta_Theatre_052418_final.pdf\n\nGodinez et al, A multi-scale convolutional neural network for phenotyping high-content cellular images. Bioinformatics, 2017\n\n\n   ![enter image description here][1]\n\n   ![enter image description here][2]\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/40f9c5c1d93aa5459c31d6f1d6e7818a/multi_scale1.png\n  [2]: https://storage.googleapis.com/kaggle-forum-message-attachments/inbox/113660/69a157f64133c0eff9f20a74b8713f08/multi_scale2.png",
    "411972": "Tried M-CNN on 512*512 images. Got max of 0.402 on LB. Locally it also performs not better than xception or resnet. But I kind of like the idea of using features from different resolutions.\n\nIt also hard to say if GapNet-PL is better, as local and LB scores are very depends on how you select thresholds and gap between them is not consistent (I think I should change my validation approach some how...). Maybe it worth to try that architectures on higher resolution.",
    "416094": "Cell organelle classification with fully convolutional neural networks\n- Kaisa Liimatainen\n\nwinning solution from  CYTO 2017\n\nhttp://cytoconference.org/2017/Program/Image-Analysis-Challenge.aspx\n  ![enter image description here][1]\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/416094/10620/win.png",
    "413628": "Thanks for posting. Tried GapNet-PL in this public kernel: https://www.kaggle.com/rejpalcz/gapnet-pl-lb-0-353\nGot to LB 0.353 so far on 512x512x4 images and 30 epochs. I was able to achieve similar score on 128x128x4 with much simpler CNN. But will try to play around still.",
    "411931": "Learning unsupervised feature representations for single cell microscopy images with paired cell inpainting\nAlex Lu, Oren Z Kraus, Sam Cooper, Alan M Moses\n\nhttps://doi.org/10.1101/395954\n\n\nhttp://www.moseslab.csb.utoronto.ca/alexlu/\n\n \n",
    "416091": "how accuracy is affected by image size:\n\n  ![enter image description here][1]\n\n\n  [1]: https://storage.googleapis.com/kaggle-forum-message-attachments/416091/10619/image_size.png",
    "415369": "fyi\n\n\nPatternNet: Visual Pattern Mining with Deep Neural Network.  Li, Hongzhi, Joseph G. Ellis, Lei Zhang, and Shih-Fu Chang  In International Conference on Multimedia Retrieval (ICMR)   Yokohama, Japan   June, 2018   [arxiv]  \n\n![enter image description here][1]\n\n\n  [1]: http://dvmmweb.cs.columbia.edu/files/li2018patternnet.JPG",
    "411961": "Thanks for the share @hengck23. \n\nI've also heard about a Loc-CAT, mentioned here.\n\n[Sullivan, D. P. et al. _Deep learning is combined with massive-scale citizen science to improve large-scale image classification._](https://www.nature.com/articles/nbt.4225)",
    "412077": "Seems like size is a big problem. Due to memory limit (which is closely related to speed and therefore prototyping cycle) I'm currently running experiments only on 512*512. Later on, with a stronger pipeline I will definitely move to 1024*1024 and even 2048*2048.\n\nMy take on the limit of 512*512 images: 0.6 LB maybe? A good clue would be that my current LB is achieved by a naive architecture with no hyperparameter fine-tuning.",
    "414518": "Thanks for sharing, you always share good ideas and I learn a lot from them.",
    "414257": "Thanks for posting, this is really interesting :D",
    "413987": "nice",
    "413947": "My network I've made from scratch seems similar to GapNet. The last few days I've been working on a new model using the high resolution images. I'm definitely going to incorporate some of the ideas here and see how it goes.",
    "412100": "Thanks for the share. Can you please tell me the difference between two type of convolution stride(Blue and White)?",
    "411947": "Wow, thanks for sharing! Well summarized as always ... ",
    "909777": "",
    "437723": "Very good!\nThank for share!"
  }
}