- Today
- Total
목록전체 글 (384)
작심삼일
My Summary & Opinion MSE처럼 기존의 pixel-wise 한 방식은 high-frequency 성분을 제대로 살리지 못한다. PSNR과 SSIM도 human visual system과 비례하는 것이 아니다. 이 논문에서는 이런 문제들에 대한 해법으로 GAN을 사용해서 더 realistic한 이미지를 생성하도록 했다. 또한, loss도 기존의 MSE가 아닌 perceptual loss(content loss + adversarial loss)를 사용했다. MSE는 평균을 내는 방식이므로 over-smoothing 된다. 하지만 content loss는 VGG network의 feature map을 이용한 euclidean distance를 사용하기 때문에 pixel의 정확도보다 perce..
Image Restoration Using Very Deep Convolutional Encoder-Decoder Networks with Symmetric Skip Connections My Summary & Opinion RED-Net에서 계속 반복적으로 말하고 있는 두 가지 특징이 있다. 첫째, convolution과 deconvolution을 symmetric 하게 쌓았다는 점이고, 둘째, symmetric 하게 쌓았으니 그에 대응하는 conv와 deconv 사이에 skip-connection을 사용한 것이다. Conv와 deconv를 symmetric 하게 쌓은 것은 인코더-디코더의 역할을 한다. Skip-connection은 다른 논문에서도 그렇듯이 feature map을 pass 시켜줘서 d..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 틀린 부분은 알려주시면 감사하겠습니다. 어떤 패턴인가 하나의 System이 여러 sub-module들로 구성되어 있다고 하자. 성적을 잘 받아 높은 등수를 얻기 위해서는 한 과목만 공부하면 안 된다. 모든 과목을 다 공부해야 한다. '공부하기'라는 시스템을 실행시킬 때 그 안에 속한 '수학', '물리', '화학'을 모두 실행시켜야 하는 것이 Abstract Factory Pattern이다. 비슷한 제품 군을 묶어주는 역할을 하며, 내부를 건드리지 않을 수 있다는 것이 장점이다. 후에 서술할 Factory mathod를 한 번 더 추상화한다. 어떻게 쓰는가 Abstract Factory Pattern을 사용하면 실제 객..
My Summary & Opinion SRCNN을 만든 저자가 그 성능을 높이기 위해 만든 것이 FSRCNN(Fast-SRCNN)이다. 이름이 '빠른 SRCNN'인 것에서부터 알 수 있다시피 SRCNN의 속도를 높이는 데 중점을 뒀다. ESPCN처럼 LR 이미지를 그대로 네트워크의 입력으로 넣고, 마지막에 upsampling 한다. 하지만 ESPCN이 Sub-Pixel Convolution layer를 사용한 것과 달리, deconvolution layer를 사용했다. Convolution을 반대로 진행한다는 아이디어는 괜찮아 보이지만, Sub-Pixel Convolution의 콘셉트가 더 효율적으로 다가온다. 그 외에 shrinking & expanding layer도 시간을 줄이는데 효과적이겠지만, ..
My Summary & Opinion SRCNN의 실험을 기반으로 성능을 더 높이기 위해 층을 많이 쌓아 깊은 네트워크를 제안했다. 깊은 네트워크는 그 깊이 때문에 gradient가 끝에서 끝까지 전달되기가 힘든데, 이 문제를 residual-learning으로 해결했다. 또한 학습 속도를 높이기 위해 높은 learning rate를 사용했고, 20 epoch마다 업데이트를 함으로써 vanishing/exploding gradient 문제를 예방했다. 그리고 한 네트워크가 multi-scale을 다룰 수 있도록 학습했다. 단순히 깊게 쌓은 네트워크로 기억하기 보다는 학습 테크닉 위주로 보면 좋을 것이다. Introduction 이전 글에서 소개했던 SRCNN은 SR 문제에 딥러닝을 잘 사용했지만 세 가지..
디자인 패턴을 모르는 사람이 스터디를 하며 적은 것이라 틀린 부분이 있을 수 있습니다. 나쁜 코드란 무엇인가 좋은 코드란 직관적으로 이해할 수 있는 코드다. 그럼 나쁜 코드란 무엇일까? 나쁜 코드라는 것은 수많은 예시가 있지만 한마디로 정리하자면 한눈에 들어오지 않거나 설명이 많이 필요한 코드라고 생각한다. 구체적으로 생각해보면 여러 가지가 있을 수 있다. 첫째, 이름을 직관적으로 짓지 않는다. 흔히 코딩을 하다보면 나만 아는 이름이나 편한 이름으로 변수명을 짓는 경우가 많다. 혹은 함수명을 정해두고 코딩을 하고 있는데 어쩌다보니 점점 그 함수가 하는 일이 많아지기도 한다. 이런 경우 모두 타인이 봤을 때 그 코드를 이해하는 데 시간이 많이 걸리게 된다. 전자의 경우에 대한 예시를 들어보면 다음과 같다...
Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network My Summary & Opinion 기존의 다른 SISR network와는 다른 upscaling layer를 사용했다. 이전 네트워크들은 네트워크로 하여금 image enhancement 하는 과정을 배우게 하기 위해 네트워크의 시작 전이나 앞부분에서 upscaling을 진행한다. 하지만 이렇게하면 계산량이 증가한다는 단점이 생긴다. 이 문제를 해결하기 위해 sub-pixel layer를 제안한다. Sub-pixel layer는 그림 1만 보면 이해할 수 있을 정도로 간단하게 구성되어 있다. 제일 마지막에 나오..
My Summary & Opinion SRCNN은 3개의 conv layers만 사용했기에 구조는 매우 간단하고 그 속도가 빠름에도 불구하고 그 성능이 이전 SOTA들과 비교했을 때 뛰어나다. 흥미로운 점은 필터들을 봤을 때, 필터들마다 edge detector 등 각각의 특색을 보인다. 이 논문에 적힌 실험에 따르면 이미지의 양이 많아질수록, 필터의 크기를 키울수록 성능이 향상되지만 층을 깊게 쌓을수록 항상 성능이 향상되는 것은 아니다. Layer를 3개만 사용해서 이미지 양을 많이 사용해도 over-fitting이 되기 어렵기 때문에 꽤 많은 양의 데이터를 사용해도 성능이 향상될 것이라 예상하지만, 이 모델의 크기가 작기 때문에 너무 많은 데이터를 다 학습하기에는 어려울 것 같다. 필터의 크기를 키울..