Answers.Body: <p>You might want to look into <a href="https://en.m.wikipedia.org/wiki/Autoencoder" rel="nofollow noreferrer">autoencoders</a>. What they do is learn the relationship between the input and a simplified version of it, and then try to reconstruct the original version of the input. </p>
  
  <p>The good news about this architecture is that it is not a supervised learning technique, so you can feed it a lot of data without having to construct both input and output. </p>
  
  <p>Hopefully, if you train it right, it will learn that the parts of the image that are not important in the result are the noisy parts that you intend to remove.</p>
  
  <p>Note that autoencoders had already been used to reduce noise in audio and image with great success. </p>
  
  <p><strong>Update:</strong> Here's a quick not-so-technical explanation on why they work.</p>
  
  <p>In the general architecture that auto-encoder networks have, you'll usually find an input layer, a certain amount of hidden layers which usually have less nodes than the input layer, and then a certain amount of hidden layers that gradually grow to have the same amount of input layers in the output layer.</p>
  
  <p><a href="https://i.sstatic.net/SEYOh.png" rel="nofollow noreferrer"><img src="https://i.sstatic.net/SEYOh.png" alt="Autoencoder network structure example"></a></p>
  
  <p>Why they learn to reproduce the input in the output layer, the data representation needs to necessarily go through the narrow middle layer -- at that point, you can consider that the input has been "compressed", usually with a lossly approach to have a representation of the data that can later on use to reproduce the input.</p>
  
  <p>(Side note: this compression feature has been tested in replacement of compression algorithms but they are not so good at performing compression as particular algorithms designed for it.)</p>
  
  <p>When reducing the error between input and output, the network then starts forgetting the pieces that don't add as much information to the input as other bits of data in it. For instance, if you always train these images with figures in white backgrounds, it is likely that the encoded representation of the image will not have any information about the white background itself, since it is not required to be recreated.</p>
  
  <p>As such, the most common pieces will start falling apart, and with the right tuning, a general amount of noise will go away too. Uniform noise is easier to remove (for the very same reason as the white background example), but variable noise can be worked around too with the right training.</p>
  
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-11-25T18:01:50.647Z
Answers.Text: Thanks for your reply. I have a small dataset that could be used for supervised learning, Any good idea to fit them into auto-encoder framework? I could think of "detaching" the output and input and fine-tune the network with my dataset.
Answers.UserDisplayName: Wangsta
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-11-25T18:07:30.203Z
Answers.Text: @Wangsta Yup! Autoencoders don't need labels (correct outputs) so it will be easier for you to gather lots of images for training. Also, check out techniques for data augmentation, which basically means altering your data to generate more examples for training. It's particularly easy for images.
Answers.UserDisplayName: Alpha
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-11-28T21:23:34.400Z
Answers.Text: Recently I read a bit about GANs. It seems like VAEs are sometimes used as the generator for GANs and the noisy images are often used as the input prior for the generator.
Answers.UserDisplayName: Wangsta
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-11-28T22:03:01.640Z
Answers.Text: @Wangsta That could work too — NNs are universal approximators, so with the right input, output, and hyper parameters, any architecture should work. It all depends on what information you have and how much computing power / training time you can afford.
Answers.UserDisplayName: Alpha
Answers.ContentLicense: CC BY-SA 3.0
Answers.CreationDate: 2017-11-25T16:11:40.937Z
Answers.LastActivityDate: 2017-11-25T17:31:32.577Z
Answers.LastEditDate: 2017-11-25T17:31:32.577Z
Answers.UserDisplayName: Alpha
Body: <p>I'd like to explore possibilities of applying deep learning on image noise reduction problem, more on photographic camera noise. What's a good NN architecture to solve problems like this? </p>
  
  <p>EDIT 25,Nov,2017:
  I have a small dataset of clean/noisy reference (~15K 4Kres images) acquired from digital camera. The target is to denoise other images from this camera type but without a reference photo.</p>
  
Tags: <deep-learning>
Title: Applying NNs to 2d image noise reduction?
UserDisplayName: Wangsta
ThreadText: # Applying NNs to 2d image noise reduction?
  
  (Asked by: username_0 on 2017-11-24)
  
  I'd like to explore possibilities of applying deep learning on image noise reduction problem, more on photographic camera noise. What's a good NN architecture to solve problems like this?
  
  EDIT 25,Nov,2017:
  I have a small dataset of clean/noisy reference (~15K 4Kres images) acquired from digital camera. The target is to denoise other images from this camera type but without a reference photo.
  
  **Tags:** deep-learning
  
  ---
  
  ## 1 answers
  
  ### Answer by username_1 on 2017-11-25. Score: 0 | Accepted answer
  
  You might want to look into [autoencoders](https://en.m.wikipedia.org/wiki/Autoencoder). What they do is learn the relationship between the input and a simplified version of it, and then try to reconstruct the original version of the input.
  
  The good news about this architecture is that it is not a supervised learning technique, so you can feed it a lot of data without having to construct both input and output.
  
  Hopefully, if you train it right, it will learn that the parts of the image that are not important in the result are the noisy parts that you intend to remove.
  
  Note that autoencoders had already been used to reduce noise in audio and image with great success.
  
  **Update:** Here's a quick not-so-technical explanation on why they work.
  
  In the general architecture that auto-encoder networks have, you'll usually find an input layer, a certain amount of hidden layers which usually have less nodes than the input layer, and then a certain amount of hidden layers that gradually grow to have the same amount of input layers in the output layer.
  
  [![Autoencoder network structure example](https://i.sstatic.net/SEYOh.png)](https://i.sstatic.net/SEYOh.png)
  
  Why they learn to reproduce the input in the output layer, the data representation needs to necessarily go through the narrow middle layer -- at that point, you can consider that the input has been "compressed", usually with a lossly approach to have a representation of the data that can later on use to reproduce the input.
  
  (Side note: this compression feature has been tested in replacement of compression algorithms but they are not so good at performing compression as particular algorithms designed for it.)
  
  When reducing the error between input and output, the network then starts forgetting the pieces that don't add as much information to the input as other bits of data in it. For instance, if you always train these images with figures in white backgrounds, it is likely that the encoded representation of the image will not have any information about the white background itself, since it is not required to be recreated.
  
  As such, the most common pieces will start falling apart, and with the right tuning, a general amount of noise will go away too. Uniform noise is easier to remove (for the very same reason as the white background example), but variable noise can be worked around too with the right training.
  
  > **Comments:**
  > **username_0**: Thanks for your reply. I have a small dataset that could be used for supervised learning, Any good idea to fit them into auto-encoder framework? I could think of "detaching" the output and input and fine-tune the network with my dataset.  
  > **username_1**: @Wangsta Yup! Autoencoders don't need labels (correct outputs) so it will be easier for you to gather lots of images for training. Also, check out techniques for data augmentation, which basically means altering your data to generate more examples for training. It's particularly easy for images.  
  > **username_0**: Recently I read a bit about GANs. It seems like VAEs are sometimes used as the generator for GANs and the noisy images are often used as the input prior for the generator.  
  > **username_1**: @Wangsta That could work too — NNs are universal approximators, so with the right input, output, and hyper parameters, any architecture should work. It all depends on what information you have and how much computing power / training time you can afford.  
  
  ---
  
  