pytorch (20) 썸네일형 리스트형 Pytorch - embedding 임베딩 (Embedding) 이라는 말은 자연어처리 분야에서 (NLP) 매우 많이 등장하는 단어로 이산적, 범주형인 변수를 sparse한 one-hot 인코딩 대신 연속적인 값을 가지는 벡터로 표현하는 방법을 말합니다. 즉, 수많은 종류를 가진 단어, 문장에 대해 one-hot 인코딩을 수행하면 수치로는 표현이 가능하겠지만 대부분의 값이 0이 되버려 매우 sparse 해지므로 임의의 길이의 실수 벡터로 밀집되게 표현하는 일련의 방법을 임베딩이라 하고 각 카테고리가 나타내는 실수 벡터를 임베딩 벡터라고 합니다. Pytorch, Tensorflow 딥러닝 프레임워크는 이러한 임베딩을 쉽게 할 수 있는 api 함수를 제공합니다. 임베딩을 할 전체 크기에 대해 각 카테고리 별로 지정한 차원을 가지는 임베딩 벡터.. Vision Transformer (4) - Pytorch 구현 Vision Transformer (1) Vision Transformer (2) Vision Transformer (3) - Attention Map 이번 포스트에서는 Pytorch 프레임워크를 이용하여 Vision Transformer 모델을 구현해보도록 하겠습니다. 복습을 위해 다시 한번 ViT 모델의 구조를 보도록 하겠습니다. Figure 1을 보면 먼저 입력 이미지를 패치 크기만큼 나누어 순서대로 정렬한 후 임베딩을 수행합니다. 이후에 Encoder 에서 Multihead Self-Attention, MLP, Layer Normalization 블락들이 residual connection 과 함께 수행되죠. 최종적인 분류를 위해서는 $z_0^0$에 학습가능한 파라미터로 삽입한 'class tok.. Label Smoothing Multi-class 분류를 위한 cross entropy loss 에서 목적함수의 타겟으로 사용되는 라벨은 일반적으로 정확히 하나의 클래스만 명확히 표현하는 (one-hot vector) hard 라벨이 사용됩니다. Label smoothing 기법은 한 클래스가 전체를 모두 차지하는 hard 라벨을 정답 클래스의 비중을 약간 줄이고 나머지 클래스의 비중을 늘리는 soft 라벨로 변환하는 기법인데요, 처음에는 Inception 구조의 성능을 높이고자 도입되었고 간단한 정규화 방법으로 image classification, speech recognition, machine translation 분야에 Table 1에서 처럼 적극적으로 사용되고 있습니다. $K$개의 클래스에 대해서 라벨을 얼마만큼 부드럽게.. Object Detection - YOLO v3 Pytorch 구현 (1) [Machine Learning/기타] - Object Detection - YOLO v3 이번 포스트에서는 YOLO v3 Pytorch 구현을 해보고자 합니다. Datasets PASCAL VOC 2007 / 2012 데이터셋을 먼저 다운받습니다. YOLO 공식 홈페이지에 접속하면 PASCAL VOC 데이터 처리 방법에 대해 상세히 나와 있습니다. wget 명령어를 이용하여 VOC 데이터셋 tar 파일을 다운받습니다. 구글 코랩을 이용할 경우 '/content' 경로에 다운받아지며 리눅스 CLI로 동작시키기 위해서는 느낌표를 명령어 앞에 붙여야 합니다. !wget https://pjreddie.com/media/files/VOCtrainval_11-May-2012.tar !wget https://pjr.. Object Detection - YOLO v3 지난 포스트 [Machine Learning/기타] - Object Detection - YOLO v2 YOLO v2 가 나온 시점에서는 object detection 알고리즘 내에서 가장 빠르고 정확한 알고리즘 중 하나였지만 이후에 공개된 RetinaNet, SSD 등 다른 object detection 알고리즘에 비해 정확도가 낮고 작은 물체를 잘 탐지하지 못한다는 문제점이 있었습니다. YOLO v3 는 성능을 향상시키기 위한 다양한 업데이트를 YOLO v2 에 반영했는데요, 한번 살펴보도록 하겠습니다. Updates Darknet-53 YOLO v2 포스트에서 살펴봤듯이 YOLO v2 는 이미지 feature 를 추출하기 위해 19-layer 로 되어있는 Darknet-19 를 backbone ne.. Pytorch - autograd 정의 Pytorch 에서는 어떠한 기능을 하는 블록 혹은 함수에 대해 forward() / backward() 를 "torch.autograd" 모듈로 새롭게 정의할 수 있습니다. 이는 "torch.autograd.Function" 클래스를 상속하여 "@staticmethod" 를 이용하여 입력에 대한 함수의 동작을 forward() 함수에, 함수 출력에 대한 기울기를 받아 입력에 대한 기울기를 계산하는 backward() 함수를 새롭게 정의합니다. Example Legendre polynomial $y=a+bP_3 (c+dx)$ 에서 $P_3=\frac{1}{2}(5x^3-3x)$의 Legendre 3차 다항식이라고 가정하겠습니다. $P_3$ 함수에 대한 forward / backward 는 "torch.a.. Pytorch - gather 이번 포스트에서는 Pytorch gather 함수를 알아보도록 하겠습니다. gather 함수는 scatter 함수와 정반대로 동작하는 함수로 주어진 "input" 텐서에서 "dim", "index" 에 맞게 값을 모아주는 역할을 합니다. torch.gather(input, dim, index, *, sparse_grad=False, out=None) → Tensor gather 함수는 "input" 텐서에서 "dim", "index" 에 해당하는 요소값으로 새로운 텐서를 구성합니다. 3차원 텐서에 대해서 다음과 같이 동작합니다. scatter 함수와 반대 동작인 것을 알 수 있습니다. out[i][j][k] = input[index[i][j][k]][j][k] # if dim == 0 out[i][j][.. Pytorch - scatter Pytorch 에는 새롭게 구성한 텐서에 원하는 인덱스에 맞게 값을 할당해주는 scatter 함수가 존재합니다. (Tensorflow 에도 존재합니다.) 이번 포스트에서는 scatter 함수의 동작원리에 대해 알아보도록 하겠습니다. 먼저 Pytorch 공식 문서에는 scatter 함수가 다음과 같이 in-place 함수로 정의되어 있습니다. scatter_(dim, index, src, reduce=None) → Tensor 언더바가 붙었으므로 "tensor.scatter_()" 형태로 동작하며, 파라미터로 주어진 "index" 에 맞게 "src" 의 값을 새로운 "tensor" 로 할당합니다. 예를 들어 3차원 텐서라면 다음과 같이 업데이트 됩니다. tensor[index[i][j][k]][j][k] .. 이전 1 2 3 다음