본문 바로가기

Computer Vision

(15)
[에러해결] nll_loss 2d forward kernel: block: [5,0,0], thread: [845,0,0] Assertion `t >= 0 && t < n_classes` failed. ※ Segmentation / classification 시 target (혹은 ground truth) 의 class label이 범위를 넘어선 경우에 발생 1. 필자 같은 경우는 배경(0), 객체(1~20), 경계선(255)으로 labeling 된 segmenatation mask를 nn.CrossEntropy() 에 target으로 넘겨주면서 상기의 에러메세지 발생 2. Pytorch의 CE는 long 타입으로 입력 받는 target에 대하여 one-hot encoding을 수행하고 이를 input에 대하여 softmax 및 cross entropy를 계산함. 3. 자동으로 one-hot encoding 하는 과정에서 연속적인 레이블(0~20)에 대하여 21개의 channel로 원핫 인코딩 가능하였..
VOCSegmentation DataLoader 버그 ※ pytorch 를 활용하여 VOC 2011를 활용하고자 하는 경우, transforms 옵션으로는 정상적인 data transformation이 수행되지 않는다. VOCSegmentation에 data transform을 적용할 수 있는 option은 'transform', 'transform_target', 'transforms'이다. transform은 원본 RGB 이미지에 대한 data transformation을 적용한다. transform_target은 segmentaition label image에 대한 transformation을 적용한다. transforms은 이미지와 레이블에 대해 모두 transformation을 적용한다. 그러나 실제로는 아래와 같이 transforms 옵션을 활용..
[환경 구축] Windows11 / WSL2 / NVIDIA GeForce GTX 1660 Ti / Pytorch / VS code 환경에서 딥러닝 개발하기 환경에 계속 실패하다가 겨우 성공해서 백업용으로 쓴다. 1. WSL2 설치 2. Ubuntu 18.04 LTS 설치 3. NVIDIA 드라이버 설치 4. CUDA 설치 5. VS code 에서 코드 작성 + WSL에서 돌리기 - NVIDIA GeForce GTX 1660 Ti 1. WSL2 설치 2. Ubuntu 18.04 LTS 설치 3. NVIDIA 드라이버 설치 NVIDIA 드라이버 공홈 접속 : Official Drivers | NVIDIA) Download the latest official NVIDIA drivers Download the latest official NVIDIA drivers www.nvidia.com 현재 스펙이 Windows11/ GTX 1660 Ti 이므로 다음의 스펙으..
[Python] .scatter()함수 이해 요약 1. .scatter(dimension, index, src) 꼴이라면 다음과 같다. dimension은 어느 방향으로 업데이트할지 index는 src의 값을 어떻게 선택할지 src는 어떤 값으로 업데이트를 할지 2. index 텐서의 각 element 의 위치에 대응되는 src의 element가 output의 어느 위치로 갈지 결정한다. 예시1 >>> src = torch.arange(1, 11).reshape((2, 5)) >>> src tensor([[ 1, 2, 3, 4, 5], [ 6, 7, 8, 9, 10]]) >>> index = torch.tensor([[0, 1, 2, 0]]) >>> output = torch.zeros(3, 5, dtype=src.dtype).scatter_(0,..
(pred.argmax(1) == y).type(torch.float).sum().item() 해석 (pred.argmax(1) == y).type(torch.float).sum().item() 해석 1. pred는 model(x)의 출력으로 입력 이미지에 대하여 각 10개 class별 socre를 출력하여 모은 값. [ [img1 10개 스코어], [img2 10개 스코어], [img3 10개 스코어] ... ] 2. pred.argmax(1)은 각 row의 방향에서 가장 큰 값을 찾고 해당 값의 인덱스를 반환함, 즉, 각 이미지가 가장 높은 score를 보인 class가 어딘지를 반환함 3. 높은 값을 보인 class(예측값)이 Groud Truth인 y와 동일한지 확인하여 True/False 를 반환(pred.argmax(1) == y) 각 이미지에 대한 True/Fase이므로 한번에 트레이닝 시..
nn.Module 입력과 forward 함수: Pytorch에서 모델 호출법 nn.Module의 입력은 뭐고, 클래스 메소드 forward()에 모델 입력은 어떻게 전달하는가? (1) 모델의 입력 X가 nn.Module(X)로써 전달이 된다면 이 X는 forward에 입력 인자로 전달된다. forward 함수는 사용자가 직접 호출하지 않기 때문 (2) 이렇게 입력 받은 모델의 input은 자동으로 forward의 함수 입력으로 들어가서 자동으로 forward propagtion한다. (3) 이때 입력의 길이, 갯수는 가변인자(*input) 임 nn.Module을 활용한 모델 디자인 nn.Module을 상속하여 다음과 같이 모델을 디자인할 수 있다. 일반적으로, pytorch의 nn.Module을 사용하여 모델을 디자인 하기 위해서는 (1) nn.Module을 상속하는 모델 클래스..
Python 변수로 Class 명 치환(Instanstiate) 아래의 코드를 보면 마치 self.flatten=nn.Flatten() 이 flatten 변수를 선언했고, 두 번째 노란음영인 x=self.flatten(x)에서 인스턴스 혹은 변수에 값을 넣는 것으로 보인다. 이런 형식을 처음 보면 마치 python이 변수 안에 변수를 인자로 받는 것처럼 느껴질 수 있다. 실제로는 self.flatten은 nn.Flatten이라는 class 명을 치환한 것이고, nn.Flatten 클래스를 호출할때 사용할 수 있다. 즉, x= self.flatten(x)는 nn.Flatten(x)와 동일한 문법이다. 엄밀히 말하면 이건 인스턴스화(instanstiate)이고, 관련 내용은 해당 키워드로 구글링하는 것을 추천 출처: 빠른 시작(Quickstart) — 파이토치 한국어 튜..