{
  "id": 161665,
  "title": "denoising approach",
  "url": "/competitions/alaska2-image-steganalysis/discussion/161665",
  "author_name": "",
  "post_date": "2020-06-25T16:21:04.338972600Z",
  "votes": 11,
  "comment_count": 13,
  "views": 0,
  "content": "<p>Did anyone try denoising approach?\nAs a stego image can be considered as a degraded version of cover image, we might utilize denoising model to detect steganography.\nA straightforward way is to train a denoising model whose inputs are stego or cover images and whose outputs are corresponding cover images (denoised images).\nAt test time, each test image is denoised, and then original and denoised test images are compared; if their difference is large, the test image would be stego image.</p>\n\n<p>I tried this idea for a while but the results were not satisfactory...</p>",
  "messages": [
    {
      "id": "901669",
      "postDate": "06/25/2020 16:21:04",
      "content": "<p>Did anyone try denoising approach?\nAs a stego image can be considered as a degraded version of cover image, we might utilize denoising model to detect steganography.\nA straightforward way is to train a denoising model whose inputs are stego or cover images and whose outputs are corresponding cover images (denoised images).\nAt test time, each test image is denoised, and then original and denoised test images are compared; if their difference is large, the test image would be stego image.</p>\n\n<p>I tried this idea for a while but the results were not satisfactory...</p>",
      "rawMarkdown": "Did anyone try denoising approach?\nAs a stego image can be considered as a degraded version of cover image, we might utilize denoising model to detect steganography.\nA straightforward way is to train a denoising model whose inputs are stego or cover images and whose outputs are corresponding cover images (denoised images).\nAt test time, each test image is denoised, and then original and denoised test images are compared; if their difference is large, the test image would be stego image.\n\nI tried this idea for a while but the results were not satisfactory...",
      "votes": null
    },
    {
      "id": "902226",
      "postDate": "06/26/2020 02:32:12",
      "content": "<p>It is a very natural idea to try, indeed. However, what you are suggesting is a much more difficult problem ( removing the \"stego noise\" ) to solve a simpler problem, which is already hard enough: to tell cover and stego images apart.</p>",
      "rawMarkdown": "It is a very natural idea to try, indeed. However, what you are suggesting is a much more difficult problem ( removing the \"stego noise\" ) to solve a simpler problem, which is already hard enough: to tell cover and stego images apart.",
      "votes": null
    },
    {
      "id": "902266",
      "postDate": "06/26/2020 03:21:19",
      "content": "<p>Thank you for your comment!\nI agree with you that denoising approach is solving a more difficult problem.\nMy expectation here is that we can teach the model richer supervised information (stego-cover image pairs) than class label.\nIt might be better to use as auxiliary loss.</p>",
      "rawMarkdown": "Thank you for your comment!\nI agree with you that denoising approach is solving a more difficult problem.\nMy expectation here is that we can teach the model richer supervised information (stego-cover image pairs) than class label.\nIt might be better to use as auxiliary loss.",
      "votes": null
    },
    {
      "id": "902304",
      "postDate": "06/26/2020 04:11:47",
      "content": "<p>You are right that you can use richer supervised info, such as the embedded payload or the energy of the stego signal, and turn the classifier into a regressor to estimate how much is hidden rather than cover/stego class. This is also done in steganalysis. Such detectors are called quantitative.</p>",
      "rawMarkdown": "You are right that you can use richer supervised info, such as the embedded payload or the energy of the stego signal, and turn the classifier into a regressor to estimate how much is hidden rather than cover/stego class. This is also done in steganalysis. Such detectors are called quantitative.",
      "votes": null
    },
    {
      "id": "902324",
      "postDate": "06/26/2020 04:45:42",
      "content": "<p>This is an interesting idea ! I haven't tried it though.\nI spent a lot of time approaching it as a segmentation problem. The idea is the following:\n- For each image we have cover and steganographic version with some hidden payload. We can create a groundtruth set (with binary labels) by finding difference between the modified and original image.\n- Then, we can try to learn a model that takes rgb images as input and outputs pixels which it thinks contains payload.\n- The competition metric requires us to output a single value for each image. So, we take the neural network predictions (which is a HXW binary map) and sum the number of activated pixels.  (We can imagine this to be a proxy for data payload.) The total number of activate pixels will be our final prediction.</p>\n\n<p>Sadly, this approach doesn't seem to work.</p>",
      "rawMarkdown": "This is an interesting idea ! I haven't tried it though.\nI spent a lot of time approaching it as a segmentation problem. The idea is the following:\n- For each image we have cover and steganographic version with some hidden payload. We can create a groundtruth set (with binary labels) by finding difference between the modified and original image.\n- Then, we can try to learn a model that takes rgb images as input and outputs pixels which it thinks contains payload.\n- The competition metric requires us to output a single value for each image. So, we take the neural network predictions (which is a HXW binary map) and sum the number of activated pixels.  (We can imagine this to be a proxy for data payload.) The total number of activate pixels will be our final prediction.\n\nSadly, this approach doesn't seem to work.",
      "votes": null
    },
    {
      "id": "902426",
      "postDate": "06/26/2020 06:23:34",
      "content": "<p><a href=\"/agnethajf\">@agnethajf</a> wow, it is an honor to see you here :) welcome!</p>",
      "rawMarkdown": "agnethajf wow, it is an honor to see you here :) welcome!",
      "votes": null
    },
    {
      "id": "902821",
      "postDate": "06/26/2020 11:35:14",
      "content": "<p>I also thought about such approach to solve this problem. Interesting what models you tried to implement, maybe we should consider it as signal cleaning and use signal models (e.g. WaveNet). Anyway even it doesn't work now, I think it is more interesting than just train another EfficientNet</p>",
      "rawMarkdown": "I also thought about such approach to solve this problem. Interesting what models you tried to implement, maybe we should consider it as signal cleaning and use signal models (e.g. WaveNet). Anyway even it doesn't work now, I think it is more interesting than just train another EfficientNet",
      "votes": null
    },
    {
      "id": "902867",
      "postDate": "06/26/2020 12:10:04",
      "content": "<p>In addition to the denoising approach, I also tried the similar approach as yours.\nThe model is trained so that it can estimate the distortion of the stego image brought by steganography. My model estimates distortion for every 8x8 blocks (MAE) because it would be difficult to estimate pixel-level distortion.</p>",
      "rawMarkdown": "In addition to the denoising approach, I also tried the similar approach as yours.\nThe model is trained so that it can estimate the distortion of the stego image brought by steganography. My model estimates distortion for every 8x8 blocks (MAE) because it would be difficult to estimate pixel-level distortion.",
      "votes": null
    },
    {
      "id": "902871",
      "postDate": "06/26/2020 12:13:11",
      "content": "<p>I simply used UNet.\nSRResNet or the other models used in image enhancement or denoising might be more appropriate.</p>",
      "rawMarkdown": "I simply used UNet.\nSRResNet or the other models used in image enhancement or denoising might be more appropriate.",
      "votes": null
    },
    {
      "id": "902912",
      "postDate": "06/26/2020 12:54:42",
      "content": "<p>So, how was the performance ?</p>",
      "rawMarkdown": "So, how was the performance ?",
      "votes": null
    },
    {
      "id": "903029",
      "postDate": "06/26/2020 14:31:28",
      "content": "<p>Really disappointing.</p>",
      "rawMarkdown": "Really disappointing.",
      "votes": null
    },
    {
      "id": "903126",
      "postDate": "06/26/2020 15:33:38",
      "content": "<p>I got the same result, seem not work well. I tried 64x64, 32x32,16x16, for segmentation output,  all of them are not work well.</p>",
      "rawMarkdown": "I got the same result, seem not work well. I tried 64x64, 32x32,16x16, for segmentation output,  all of them are not work well.",
      "votes": null
    },
    {
      "id": "903214",
      "postDate": "06/26/2020 16:38:18",
      "content": "<p>Hi!\nDid you try with a simple auto-encoder without the skip connections? \nPlease correct me if I am wrong, the skips help the decoder of the UNet to retain the original input state, which doesn't require the bottleneck to learn that good general representation of the distribution. </p>",
      "rawMarkdown": "Hi!\nDid you try with a simple auto-encoder without the skip connections? \nPlease correct me if I am wrong, the skips help the decoder of the UNet to retain the original input state, which doesn't require the bottleneck to learn that good general representation of the distribution.",
      "votes": null
    },
    {
      "id": "903304",
      "postDate": "06/26/2020 18:05:24",
      "content": "<p>Can you refer to the notebook using U-Net</p>",
      "rawMarkdown": "Can you refer to the notebook using U-Net",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 902226,
      "author_name": "agnethajf",
      "author_url": "",
      "post_date": "06/26/2020 02:32:12",
      "content": "<p>It is a very natural idea to try, indeed. However, what you are suggesting is a much more difficult problem ( removing the \"stego noise\" ) to solve a simpler problem, which is already hard enough: to tell cover and stego images apart.</p>",
      "votes": null,
      "replies": [
        {
          "id": 902266,
          "author_name": "ren4yu",
          "author_url": "",
          "post_date": "06/26/2020 03:21:19",
          "content": "<p>Thank you for your comment!\nI agree with you that denoising approach is solving a more difficult problem.\nMy expectation here is that we can teach the model richer supervised information (stego-cover image pairs) than class label.\nIt might be better to use as auxiliary loss.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 902304,
          "author_name": "agnethajf",
          "author_url": "",
          "post_date": "06/26/2020 04:11:47",
          "content": "<p>You are right that you can use richer supervised info, such as the embedded payload or the energy of the stego signal, and turn the classifier into a regressor to estimate how much is hidden rather than cover/stego class. This is also done in steganalysis. Such detectors are called quantitative.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 902426,
          "author_name": "nuller",
          "author_url": "",
          "post_date": "06/26/2020 06:23:34",
          "content": "<p><a href=\"/agnethajf\">@agnethajf</a> wow, it is an honor to see you here :) welcome!</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 902324,
      "author_name": "meaninglesslives",
      "author_url": "",
      "post_date": "06/26/2020 04:45:42",
      "content": "<p>This is an interesting idea ! I haven't tried it though.\nI spent a lot of time approaching it as a segmentation problem. The idea is the following:\n- For each image we have cover and steganographic version with some hidden payload. We can create a groundtruth set (with binary labels) by finding difference between the modified and original image.\n- Then, we can try to learn a model that takes rgb images as input and outputs pixels which it thinks contains payload.\n- The competition metric requires us to output a single value for each image. So, we take the neural network predictions (which is a HXW binary map) and sum the number of activated pixels.  (We can imagine this to be a proxy for data payload.) The total number of activate pixels will be our final prediction.</p>\n\n<p>Sadly, this approach doesn't seem to work.</p>",
      "votes": null,
      "replies": [
        {
          "id": 902867,
          "author_name": "ren4yu",
          "author_url": "",
          "post_date": "06/26/2020 12:10:04",
          "content": "<p>In addition to the denoising approach, I also tried the similar approach as yours.\nThe model is trained so that it can estimate the distortion of the stego image brought by steganography. My model estimates distortion for every 8x8 blocks (MAE) because it would be difficult to estimate pixel-level distortion.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 902912,
          "author_name": "meaninglesslives",
          "author_url": "",
          "post_date": "06/26/2020 12:54:42",
          "content": "<p>So, how was the performance ?</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 903029,
          "author_name": "ren4yu",
          "author_url": "",
          "post_date": "06/26/2020 14:31:28",
          "content": "<p>Really disappointing.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 903126,
          "author_name": "liangzi",
          "author_url": "",
          "post_date": "06/26/2020 15:33:38",
          "content": "<p>I got the same result, seem not work well. I tried 64x64, 32x32,16x16, for segmentation output,  all of them are not work well.</p>",
          "votes": null,
          "replies": []
        }
      ]
    },
    {
      "id": 902821,
      "author_name": "aybatov",
      "author_url": "",
      "post_date": "06/26/2020 11:35:14",
      "content": "<p>I also thought about such approach to solve this problem. Interesting what models you tried to implement, maybe we should consider it as signal cleaning and use signal models (e.g. WaveNet). Anyway even it doesn't work now, I think it is more interesting than just train another EfficientNet</p>",
      "votes": null,
      "replies": [
        {
          "id": 902871,
          "author_name": "ren4yu",
          "author_url": "",
          "post_date": "06/26/2020 12:13:11",
          "content": "<p>I simply used UNet.\nSRResNet or the other models used in image enhancement or denoising might be more appropriate.</p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 903214,
          "author_name": "mightyrains",
          "author_url": "",
          "post_date": "06/26/2020 16:38:18",
          "content": "<p>Hi!\nDid you try with a simple auto-encoder without the skip connections? \nPlease correct me if I am wrong, the skips help the decoder of the UNet to retain the original input state, which doesn't require the bottleneck to learn that good general representation of the distribution. </p>",
          "votes": null,
          "replies": []
        },
        {
          "id": 903304,
          "author_name": "tasnimnishatislam",
          "author_url": "",
          "post_date": "06/26/2020 18:05:24",
          "content": "<p>Can you refer to the notebook using U-Net</p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "901669": "Did anyone try denoising approach?\nAs a stego image can be considered as a degraded version of cover image, we might utilize denoising model to detect steganography.\nA straightforward way is to train a denoising model whose inputs are stego or cover images and whose outputs are corresponding cover images (denoised images).\nAt test time, each test image is denoised, and then original and denoised test images are compared; if their difference is large, the test image would be stego image.\n\nI tried this idea for a while but the results were not satisfactory...",
    "902226": "It is a very natural idea to try, indeed. However, what you are suggesting is a much more difficult problem ( removing the \"stego noise\" ) to solve a simpler problem, which is already hard enough: to tell cover and stego images apart.",
    "902266": "Thank you for your comment!\nI agree with you that denoising approach is solving a more difficult problem.\nMy expectation here is that we can teach the model richer supervised information (stego-cover image pairs) than class label.\nIt might be better to use as auxiliary loss.",
    "902304": "You are right that you can use richer supervised info, such as the embedded payload or the energy of the stego signal, and turn the classifier into a regressor to estimate how much is hidden rather than cover/stego class. This is also done in steganalysis. Such detectors are called quantitative.",
    "902324": "This is an interesting idea ! I haven't tried it though.\nI spent a lot of time approaching it as a segmentation problem. The idea is the following:\n- For each image we have cover and steganographic version with some hidden payload. We can create a groundtruth set (with binary labels) by finding difference between the modified and original image.\n- Then, we can try to learn a model that takes rgb images as input and outputs pixels which it thinks contains payload.\n- The competition metric requires us to output a single value for each image. So, we take the neural network predictions (which is a HXW binary map) and sum the number of activated pixels.  (We can imagine this to be a proxy for data payload.) The total number of activate pixels will be our final prediction.\n\nSadly, this approach doesn't seem to work.",
    "902426": "agnethajf wow, it is an honor to see you here :) welcome!",
    "902821": "I also thought about such approach to solve this problem. Interesting what models you tried to implement, maybe we should consider it as signal cleaning and use signal models (e.g. WaveNet). Anyway even it doesn't work now, I think it is more interesting than just train another EfficientNet",
    "902867": "In addition to the denoising approach, I also tried the similar approach as yours.\nThe model is trained so that it can estimate the distortion of the stego image brought by steganography. My model estimates distortion for every 8x8 blocks (MAE) because it would be difficult to estimate pixel-level distortion.",
    "902871": "I simply used UNet.\nSRResNet or the other models used in image enhancement or denoising might be more appropriate.",
    "902912": "So, how was the performance ?",
    "903029": "Really disappointing.",
    "903126": "I got the same result, seem not work well. I tried 64x64, 32x32,16x16, for segmentation output,  all of them are not work well.",
    "903214": "Hi!\nDid you try with a simple auto-encoder without the skip connections? \nPlease correct me if I am wrong, the skips help the decoder of the UNet to retain the original input state, which doesn't require the bottleneck to learn that good general representation of the distribution.",
    "903304": "Can you refer to the notebook using U-Net"
  },
  "source": "meta"
}