본문 바로가기

전체 글

(38)
Flexible! Powerful! Einops Einops? tensor의 차원을 원하는대로 바꿀 수 있는 라이브러리 굉장히 직관적이며 빠르게 작동 Example 기본 코드 예시 from einops import rearrange, reduce, repeat # rearrange elements according to the pattern rearrange(torch.zeros((3,244,244)), 'c h w -> h w c').shape #torch.Size([244, 244, 3]) # combine rearrangement and reduction reduce(torch.zeros((16,3,224,224)), 'b c (h h2) (w w2) -> b h w c','mean',h2 = 16, w2 = 16).shape #torch.Siz..
Introduction of Image Segmentation 목차 Image Segmentation이란 이름 그대로 image를 분할하는 방법이다. classification은 한장의 image가 어떤 클래스일지 맞추는 작업이고, object detection은 특정 object의 bounding box를 찾는 작업이다. segmentation은 더 나아가서 image의 모든 픽셀에 대해서 클래스를 예측하는 작업이다. Image Segmentation의 구분 Semantic segmentation, Instance segmentation, Panoptic segmentation으로 구분이 가능하다. 간단히 설명하면 semantic segmentation은 단순히 pixel의 클래스를 구분 하는 작업이고, instance segmentation은 같은 클래스여도 서..
SPP(Spatial Pyramid Pooling) 와 ASPP(Atrous Spatial Pyramid Pooling)의 차이점(Multi-scale representation) 목차 SPP(Spatial Pyramid Pooling) SPP는 CNN에서 입력 이미지의 크기 (H, W)에 상관없이 항상 동일한 feature를 추출하기 위해 고안된 방법으로 FC layer에 들어가기 직전인 CNN의 마지막 레이어의 feature map에 적용된다. 임의의 크기로 입력된 feature map에서 3개의 다른 스케일로 max pooling을 진행한다. 논문에서는 4x4, 2x4, 1x1의 3개의 다른 스케일을 적용했는데 여기서 말하는 4x4, 2x2, 1x1는 픽셀의 크기가 아닌 패치(patch)의 개수를 의미한다. 즉 4x4는 feature맵을 4x4의 패치로 잘라서 maxpooling을 하겠다는 의미이다. 예시를 들면 feature map의 크기가 8,8일 경우 (H,W; 여기서 ..
원본 이미지와 마스크 이미지 합성(with opacity) Problem Image segmentation 결과인 mask를 원본 이미지위에 투명도를 줘서 segment를 확인할 수 있게끔 하려고함. 근데 cv2.drawContours에는 opacity를 줄 수 없기 때문에 찾아보니 cv2.addWeighted를 이용해서 원본이미지 위에 덮어 씌우는 방식으로 해결 Solution # get input image origin = self.get_origin_image() # get score of segment score = self.get_score() # get mask of segment masks = self.get_masks() # black mask for fill polygon blank_mask = np.zeros(origin.shape) # dra..
DeepMC_4 / Decoder 목차 Introduction E) Attention Mechanism과 연결되어있는 F) Decoder 부분을 살펴본다. Decoder의 output이 Attention의 input으로 사용되기 때문에 맨 처음에 Decoder LSTM을 어떻게 구현해야할지 고민을 많이 했다. 일반적인 nn.LSTM을 사용하면 time step별로 output을 뽑을 수 없기 때문이다. Method & Material E) Attention Mechanism은 2 level attention (Position Based Content Attention Layer, Scale Guided Attention Layer)로 이루어져 있고, 각각 Context vector c, c`을 time step 별로 출력해준다. 그리고 ..
Pytorch lightning DDP constant가 device에 할당되지 않는 문제 / Tensor for argument #2 'mat1' is on CPU, but expected it to be on GPU Problem 단일 GPU에서 실행되던 코드를 DDP로 옮기다가 발생한 문제 기존에 init할때 s_i를 to.(device)로 해두었는데, 로그를 print로 찍어보니 cpu로 나와있다. 그렇다. init할때는 GPU에 아직 할당되기 전이라서 device가 cpu로 나온 것이다. forward할때는 device가 CUDA:0 ~ 2로 나오는데 forward에 입력으로 계속 넣어줘서 해결할 수도 있지만 근본적으로 해결을 해야 할 필요가 있었다. Traceback (most recent call last): File "/home/ubuntu/jini1114/DeepMC/trainer.py", line 81, in trainer.fit(deepmc, datamodule=dl) File "/home/ubunt..
Layer List로 이루어진 모델 RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same 오류 해결방법 목차 Problem DeepMC 모델을 구현하던 중, Layer List를 선언해야할 일이 생겼다. WPD를 이용해 다중 스케일로 분류한 입력값으로(실험에서는 7개 스케일) 동일한 구조를 가진 CNN stack를 학습해야하는 상황이다. 그래서 CNN stack을 다음같이 선언했다. self.CNNstacks = [CNNstack(self.num_encoder_feature) for _ in range(self.num_of_CNN_stacks)] 그리고 모델 fit을 진행했더니 뱉는 에러가 RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be the same 에러였다. 에러 전문은 다음과 ..
DeepMC_3 / 2 Levels Attention Mechanism 목차 Introduction 저번 D)Multi-Scale Deep Learning에 이어서 다음 부분인 E)Attention Mechanism부분이다. DeepMC 모델에서 사용된 attention은 2가지 종류로 해당 논문에서는 '2 levels of attention models' 라고 표현하고 있다. 2 levels은 각각 Position Based Content Attention Layer, Scale Guided Attention Layer이다. Method & Metarial D) Multi-scale Deep Learning에서 다중 스케일로 encoding 된 데이터를 attention mechanism을 이용해 Decoder에 입력할 context vector(c)를 계산하는 과정이다...