분류 전체보기
ConvNeXt 는 Attention 을 제외한 Convolution 연산만을 사용하는 모델로서, 여전히 Convolution 연산이 CV 분야에 유용하다는 것을 알렸습니다. 이번 포스팅에서는 ConvNeXt 를 구현해보겠습니다. ConvNeXt 리뷰는 아래 링크에서 확인할 수 있습니다. https://dreamrunning.tistory.com/15 1. 구현방법 기본적으로, ConvNeXt 는 ResNet 구조를 개량한 구조이기 때문에 ResNet 과 비슷하게 구현할 수 있습니다. 이 포스팅에서는 ResNet 과 유사한 방법으로 구현하겠습니다. 공식 GitHub 이 공개되어있으므로, 공식 구현 방법이 궁금하시면 찾아보면 되겠습니다. 2. LayerNorm ConvNeXt 에서는 Normalizaito..
1. 초록 시각 인식의 '활기찬 20년대'는 비전 트랜스포머(ViT)의 도입으로 시작되었으며, 이는 최첨단 이미지 분류 모델로서 ConvNet을 빠르게 대체했습니다. 반면에 바닐라 ViT는 Object Detection 및 semantic segmentation과 같은 일반적인 컴퓨터 비전 작업에 적용할 때 어려움을 겪습니다. Hierarchical Transformer(계층형 트랜스포머)(예: Swin Transformer)는 여러 ConvNet 선행 모델을 재도입하여 트랜스포머를 일반 비전 백본으로 실질적으로 사용할 수 있게 하고 다양한 비전 작업에서 놀라운 성능을 보여주었습니다. 그러나 이러한 하이브리드 접근 방식의 효과는 컨볼루션의 내재된 귀납적 편향보다는 트랜스포머의 본질적인 우수성 때문인 경우..
이번 포스팅에서는 ResNet 을 Pytorch로 구현해보겠습니다. 이전 ResNet 논문 리뷰 링크 https://dreamrunning.tistory.com/10 ResNet 은 2015년에 나온 CNN 모델로서, 현재도 다양한 분야에서 많이 쓰이는 모델입니다. 특히 ResNet 에서 처음 제안하고 사용한 Residual Learning 개념은 현재에도 다양하게 응용되고 있습니다. 우선 필요 패키지를 불러옵니다. import torch import torch.nn as nn import torch.nn.functional as F 1. Basic Building Block 및 Bottleneck Building Block ResNet 의 가장 기본 구조인 Basic Building Block 및 Bo..
이전 포스팅에서 클래스와 인스턴스에 대해서 알아보았습니다. 이번 포스팅에서는 클래스와 인스턴스 기초 문법에 대해 이야기해보겠습니다. 이번에는 숫자로 간단한 연산을 할 수 있는 계산기를 클래스로 구현해 보겠습니다. 데이터는 숫자이고 메소드(함수) 는 연산기능이라 할 수 있습니다. 한 가지 도움되는 팁을 드리자면, 다루는 데이터가 어떤 데이터인지, 그 데이터로 어떤 작업을 해야할 것인지 정리 후 코드를 짤지 생각을 한다면 클래스를 다룰 때 좀 더 쉽게 이해를 할 수 있을 것입니다. 1. 클래스 설계하기 코드를 짜기 전 이 코드가 어떤 목적으로 하는지, 어떻게 동작을 하는지 정해놓는지 확실하게 정해놓는것이 필수입니다. 계산기 클래스를 쓸 것이므로, 어떤 데이터를 다룰 것인지, 어떤 작업을 할 것인지 정해둡시다..
파이썬 재미있는 기능을 하나 찾았기 때문에 포스팅 합니다. 마지막 인덱싱이 0 부터 시작하는 ~ 인덱싱입니다. 일반적으로 Python 의 리스트 인덱싱을 사용할 때, 처음부터 인덱싱 하는 경우 0부터 시작하고, 마지막부터 인덱싱 하는 경우 -1 부터 시작한다고 배웁니다. nums = [1, 2, 3, 4, 5] # 처음부터 인덱싱 할 경우 nums[0] = 1 nums[1] = 2 ... # 마지막부터 인덱싱 할 경우 nums[-1] = 5 nums[-2] = 4 ... 뒤에서 시작할 경우 -1부터 -len(list) 까지 인덱싱 숫자가 부여됩니다. 그런데, '-' 대신 '~' 를 붙이면 뒤에서 시작할 때 -1 이 아닌 0 부터 시작합니다. nums = [1, 2, 3, 4, 5] # ~ indexing..
ResNet 은 2015년에 나온 CNN 모델로서, 현재도 다양한 분야에서 많이 쓰이는 모델입니다. 특히 ResNet 에서 처음 제안하고 사용한 Residual Learning 개념은 현재에도 다양하게 응용되고 있습니다. ResNet 논문을 리뷰해보겠습니다. 1. 초록 더 깊은 신경망은 훈련하기가 더 어렵습니다. 저희는 이전에 사용된 네트워크보다 훨씬 더 심층적인 네트워크를 쉽게 훈련할 수 있도록 residual learning framework를 제시합니다. 참조되지 않은 함수를 학습하는 대신 레이어 입력을 참조하여 잔여 함수를 학습하는 방식으로 레이어를 명시적으로 재구성합니다. 이러한 residual network가 더 쉽게 최적화할 수 있으며, 상당히 깊어진 심도를 통해 정확도를 높일 수 있음을 보..
프로그래밍을 공부하다 보면 Class(클래스)와 Instance(인스턴스) 라는 것으로 객체 지향 프로그래밍을 구현한다는 것을 접하기 마련입니다.처음 프로그래밍을 공부하기 시작한 사람들에게는 정말 생소한 개념으로 큰 난관으로 다가옵니다. 저도 그랬습니다. 이번 포스팅에서는 Class(클래스) 와 Instance(인스턴스) 에 대해 이야기해보겠습니다. 1. 붕어빵과 붕어빵틀? 클래스와 인스턴스에 대한 비유 중 한국에서는 아마 가장 유명한 비유이지 않을까 싶습니다. 쿨래스는 붕어빵 틀이고 인스턴스는 붕어빵 틀로 찍어낸 붕어빵이라고요. 그래서 하나의 붕어빵 틀로 여러개의 붕어빵을 찍어낼 수 있다고 합니다. 마찬가지로 하나의 클래스로 여러개의 인스턴스를 만들수 있다고 합니다. 제가 처음 봤을 떄 이 비유를 보고..
Pytorch 를 사용하며 Tensor 의 차원을 바꾸거나 변화시키는 등의 조작을 할 떄, 가끔씩 다음과 같은 에러가 발생할 때가 있습니다. RuntimeError: input is not contiguous contiguous 를 Pytorch 공식 문서에서 살펴보면 다음과 같은 설명이 나옵니다. Returns a contiguous in memory tensor containing the same data as self tensor. If self tensor is already in the specified memory format, this function returns the self tensor. contiguous 란 어떤 의미일까? contiguous 의 의미는 인접한, 근접한 이라고 한다..
Attention 을 Pytorch 를 통해 구현해보겠습니다. Transformer 는 크게 Encoder 와 Decoder 로 나뉘고, 각각 내부에는 Attention 및 Feedforward Network 구조로 이루어져 있습니다. 그리고 가장 핵심은 Attention 구조입니다. Scaled Dot Product Attention 을 구현하는 것이 핵심입니다. 1. 필요 패키지 import Pytorch 로 구현을 하기 때문에 다음과 같이 패키지를 import 합니다. import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F 2. Scaled Dot-Product Attention (SD..



