본문 바로가기

인공지능/Python

(22)
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..
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 에러였다. 에러 전문은 다음과 ..
pytorch_lightning.utilities.exceptions.MisconfigurationException: to use manual_backward, please disable automatic optimization: set model property automatic_optimization as False 에러 해결 @property def automatic_optimization(self) -> bool: return False 목차 Problem 다른 에러를 해결하기 위해 manual_backward를 추가를 해서 발생한 에러이다. pytorch_lightning.utilities.exceptions.MisconfigurationException: to use manual_backward, please disable automatic optimization: set model property `automatic_optimization` as False Solution 에러에서 설명한대로 automatic_optimization을 False로 바꿔주면 해결되는 문제이다. LightningModule 클래스 안에 넣..
RuntimeError: Trying to backward through the graph a second time, but the saved intermediate results have already been freed. Specify retain_graph=True when calling .backward() or autograd.grad() the first time. 에러해결 목차 Problem Pytorch lightning으로 DeepMC 모델을 training하려고 시도하던중에 만난 에러이다. RuntimeError: Trying to backward through the graph a second time, but the saved intermediate results have already been freed. Specify retain_graph=True when calling .backward() or autograd.grad() the first time. optimizer를 호출하기 전에 backward를 2번 호출하면 발생하는 에러라고 말한다. https://github.com/PyTorchLightning/pytorch-lightning/discussion..