반응형

분류 전체보기 823

[논문 읽기] DeConvNet(2015) 리뷰, Learning Deconvolution Network for Semantic Segmentation

이번에 읽어볼 논문은 DeepConvNet, 'Learning Deconvolution Network for Semantic Segmentation' 입니다. DeepConvNet은 Convolution network와 Deconvolution network, 두 파트로 구성되어 있습니다. Convolution network로 feature을 추출하고, Deconvolution network로 feature에 대한 object segmentation을 생성합니다. 이 DeepConvNet은 FCN의 한계를 개선하기 위해 제안되었는데요. 우선 FCN의 한계를 먼저 살펴보겠습니다. Limitations of FCN FCN는 심각한 단점을 갖고 있습니다. 첫 번째는 fixed-size receptive fie..

[논문 읽기] DeepLabV1(2014) 리뷰, Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs

두 번째 semantic segmentation 논문입니다. semantic segmentation 논문은 읽어도 이해가 잘 안되네요. 배경지식이 부족해서 그런 것 같습니다. 논문을 많이 읽을수록 배경지식이 쌓이므로, 열심히 읽도록 하겠습니다. Astract Deep Convolutional Neural Networks(DCNNs)를 pixel-level classification 문제를 해결하기 위해 사용합니다. DCNNs의 마지막 레이어에서의 특징은 정확한 object segmentation을 포착하기에 부족합니다. 이것은 DCNNs의 invariance 특징 때문입니다. 부정확한 localization문제를 DCNNs의 마지막 레이어에서의 responses와 fully connected Condit..

[논문 구현] PyTorch로 EfficientNet(2019) 구현하고 학습하기

이번에 구현해볼 모델은 EfficientNet(2019) 입니다. EfficientNet은 강화학습으로 최적의 모델을 찾는 MnasNet의 구조를 사용합니다. MnasNet 구조에서 compound scaling을 적용하여 성능을 끌어올린 것이 EfficientNet입니다. compound scaling은 width, deepth, resolution 3가지 요소의 관계를 수식으로 정의해서 주어진 연산량에 맞게 효율적으로 width, deepth ,resolution를 조절하는 방법입니다. 자세한 논문 리뷰는 아래 포스팅에서 확인하실 수 있습니다. [논문 읽기] EfficientNet(2019) 리뷰, Rethinking Model Scaling for Convolutional Neural Network..

논문 구현 2021.03.30

[논문 읽기] FCN(2015) 리뷰, Fully Convolutional Networks for Semantic Segmentation

공부 목적으로 FCN 논문을 읽어보았습니다. Abstract FCN은 end-to-end, pixels-to-pixels 학습이 되는 convolutional network입니다. 핵심 아이디어는 임의의 크기로 입력 값을 받고, 그에 해당하는 출력값을 생성하는 'fully convolutional network' 입니다. AlexNet, GoogLeNet, VGGnet과 같은 classification 신경망을 사용하고, 이들을 segmentation task에 맞게 fine-tunning 합니다. 그리고나서 shallow의 정보와 deep의 정보를 결합하는 새로운 구조를 정의합니다. 1. Introduction Semantic segmentation은 coarse부터 fine까지 inference를 통..

[논문 구현] PyTorch로 SENet(2018) 구현하고 학습하기

안녕하세요. 파이토치로 SENet을 구현하고 학습해보도록 하겠습니다. SENet은 SEBlock을 제안한 신경망입니다. SEBlock은 피쳐맵의 채널별 가중치를 계산하고, 이 가중치를 residual unit의 출력 피쳐맵에 곱해줍니다. 이 방법으로 모델의 성능을 개선할 수 있었습니다. SEBlock의 장점은 CNN 구조라면 어떤 모델이든지 사용할 수 있다는 점입니다. resnet, mobilenet, efficientnet 등등 여러 모델에 부착하여 사용할 수 있습니다. 자세한 논문 리뷰는 아래 포스팅에서 확인하실 수 있습니다. [논문 읽기] SENet(2018) 리뷰, Squeeze-and-Excitation Networks 이번에 읽어볼 논문은 SENet, Squeeze-and-Excitation ..

논문 구현 2021.03.30

[논문 읽기] Meta Pseudo Labels(2020)

안녕하세요! 이번에 읽어볼 논문은 현재, Classification 분야에서 SOTA를 차지하고 있는 Meta Pseudo Labels 입니다. Meta Pseudo Labels는 semi-supervised learning 기법으로 SOTA를 달성했습니다. Noisy Student에서의 단점을 개선했는데요. Noisy Student가 무엇인지 살펴보겠습니다. Noisy Student Noisy Student에는 labeled image로 teacher를 학습시키고, teacher로 unlabeled image에 대한 pseudo label를 생성합니다. teacher로 생성한 pseudo labeled image와 labeled image로 student를 학습합니다. 이 student를 teacher..

[PyTorch] torch.bernoulli 를 활용한 Stochastic depth 학습

안녕하세요! torch.bernoulli 함수를 활용해서 Stochastic depth 학습 하는 법을 알아보겠습니다. 이 포스팅은 stochastic depth 학습을 구현하는 법을 잊을까봐 기록합니다. 아래 class는 efficientnet에서 사용하는 bottlenet 입니다. class BottleNeck(nn.Module): expand = 6 def __init__(self, in_channels, out_channels, kernel_size, stride=1, se_ratio=4, p=0.5): super().__init__() self.p = torch.tensor(p).float() if stride == 1 else torch.tensor(1).float() self.residual..

[논문 구현] PyTorch로 ResNext(2017) 구현하고 학습하기

안녕하세요! 이번 포스팅에서는 ResNext(2017)을 구현하고 학습까지 해보도록 하겠습니다. 작업 환경은 Google Colab에서 진행했습니다. ResNext는 Group Convolution을 제안한 논문입니다. Group Convolution을 활용하면, Conv 연산에서 필요한 연산량이 감소하게 되어서, 동일한 연산량 내에 더 많은 피쳐맵을 활용할 수 있는 이점이 있습니다. ResNext에서 사용하는 Group Convolution이 현재 최신 모델까지 이용하고 있는 것을 보면 영향력이 대단한 것 같네요ㅎㅎ 아래 포스팅에서 논문 리뷰를 확인하실 수 있습니다. [논문 읽기] ResNext(2017) 리뷰, Aggregated Residual Transformations for Deep Neura..

논문 구현 2021.03.29

[논문 읽기] FixEfficientNet(2020), Fixing the train-test resolution discrepancy

안녕하세요! 이번에 읽어볼 논문은 2020년에 Noisy Student의 성능을 뛰어넘고 SOTA를 달성한 FixEfficientNet, Fixing the train-test resolution 입니다. train data 수를 늘리기 위해서 random crop augmentation을 적용합니다. crop을 한 뒤에 resize로 크기를 조정하여 CNN 입력으로 넣어주는 것이 random crop 입니다. 하지만 test dataset에는 random crop을 적용하지 않고, 그냥 center crop만 적용하여 입력으로 넣어줍니다. 이때문에 train dataset의 분포와 test dataset의 분포에 차이가 생깁니다. 그리고 이 차이는 모델의 성능 하락으로 이어집니다. 이 문제를 해결하기 ..

[PyTorch] Swish 활성화 함수 정의해서 사용하기

안녕하세요! PyTorch로 Swish 함수를 정의해서 사용하는 법을 알아보겠습니다ㅎㅎ Swish 함수는 깊은 신경망에서 ReLU보다 좋은 성능을 나타내는데요, 실제로 EfficientNet은 Swish 활성화 함수를 사용하고 MobileNetV3은 Swish 함수를 수정해서 h-Swish 함수를 사용하고 있습니다. 이 Swish 함수는 파이토치 공식 문서에서 명령어를 제공하고 있지 않아 직접 정의해서 사용해야 합니다. 아래와 같이 Swish 함수 클래스를 정의할 수 있습니다. # Swish activation function class Swish(nn.Module): def __init__(self): super().__init__() self.sigmoid = nn.Sigmoid() def forwa..

반응형