[Must Have 텐초의 파이토치 딥러닝 특강] 7장. 이미지 세그멘테이션 : U-Net

Поділитися
Вставка
  • Опубліковано 20 гру 2024

КОМЕНТАРІ • 19

  • @정현지-l8i
    @정현지-l8i Рік тому

    텐초님 덕분에 파이토치랑 딥러닝 공부 입문을 정말 잘했습니다...! 앞으로도 더 많은 책 부탁드립니다. 도움 많이 받았습니다 감사합니다.

  • @sputnik7565
    @sputnik7565 2 роки тому

    텐초님 책과 영상 잘 보고 있습니다.
    모델 평가하는 부분에서 아래와 같이 타입에러 뜨시는 분은 다음과 같이 cpu로 텐서를 바꿔주시면 됩니다.
    에러 내용:
    TypeError: can't convert cuda:0 device type tensor to numpy. Use Tensor.cpu() to copy the tensor to host memory first.
    수정 :
    모델 평가 부분
    pred = model(torch.unsqueeze(data.to(device), dim=0))>0.5 --> pred = model(torch.unsqueeze(data.to(device), dim=0)).cpu()>0.5
    감사합니다.

  • @우보천리-z8o
    @우보천리-z8o 7 місяців тому

    텐초님. 모델 학습과정 손실 계산 부분 loss = nn.BCEWithLogitsLoss() 에서 ValueError: Target size (torch.Size([1, 128, 128])) must be the same as input size (torch.Size([128, 128])) 이 에러가 나고 있습니다. 올려주신 소스 그대로 실행해보고 있습니다. 어떤 부분을 확인해봐야 할까요?

    • @텐초
      @텐초  7 місяців тому

      모델 출력하고 데이터로더가 반환하는 정답의 모양이 일치하지 않는게 문제입니다
      모델의 마지막출력 직전에 unsqueeze같은 함수로 배치 차원을 추가해주세요

    • @텐초
      @텐초  7 місяців тому

      근데 이상하네요
      모델의 순전파쪽에서 squeeze를 해주고
      데이터셋의 preprocess mask함수에서 채널정보를 지울테니
      보통이라면 뜰수없는 에러입니다
      코드에 오타가 없는지 확인해주세요

    • @우보천리-z8o
      @우보천리-z8o 7 місяців тому

      @@텐초 처음부터 나오는 것이 아니라 epoch1 loss:0.5439759492874146: 98%|█████████▊| 62/63 [02:31 8 loss = nn.BCEWithLogitsLoss()(
      9 preds,
      10 label.type(torch.FloatTensor).to(device)) # 손실 계산
      11 loss.backward() # 오차 역전파
      13 optim.step() # 최적화
      File ~/git/python/pytoch/.venv/lib/python3.12/site-packages/torch/nn/modules/module.py:1511, in Module._wrapped_call_impl(self, *args, **kwargs)
      1509 return self._compiled_call_impl(*args, **kwargs) # type: ignore[misc]
      1510 else:
      -> 1511 return self._call_impl(*args, **kwargs)
      File ~/git/python/pytoch/.venv/lib/python3.12/site-packages/torch/nn/modules/module.py:1520, in Module._call_impl(self, *args, **kwargs)
      1515 # If we don't have any hooks, we want to skip the rest of the logic in
      1516 # this function, and just call forward.
      1517 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
      1518 or _global_backward_pre_hooks or _global_backward_hooks
      1519 or _global_forward_hooks or _global_forward_pre_hooks):
      -> 1520 return forward_call(*args, **kwargs)
      1522 try:
      1523 result = None
      ...
      3196 if not (target.size() == input.size()):
      -> 3197 raise ValueError(f"Target size ({target.size()}) must be the same as input size ({input.size()})")
      3199 return torch.binary_cross_entropy_with_logits(input, target, weight, pos_weight, reduction_enum)
      ValueError: Target size (torch.Size([1, 128, 128])) must be the same as input size (torch.Size([128, 128]))

    • @우보천리-z8o
      @우보천리-z8o 7 місяців тому

      @@텐초 처음부터 에러가 나는 거이 아니라 epoch1 loss:0.5439759492874146: 98%|█████████▊| 62/63 [02:31 8 loss = nn.BCEWithLogitsLoss()(
      9 preds,
      10 label.type(torch.FloatTensor).to(device)) # 손실 계산
      11 loss.backward() # 오차 역전파
      13 optim.step() # 최적화
      File ~/git/python/pytoch/.venv/lib/python3.12/site-packages/torch/nn/modules/module.py:1511, in Module._wrapped_call_impl(self, *args, **kwargs)
      1509 return self._compiled_call_impl(*args, **kwargs) # type: ignore[misc]
      1510 else:
      -> 1511 return self._call_impl(*args, **kwargs)
      File ~/git/python/pytoch/.venv/lib/python3.12/site-packages/torch/nn/modules/module.py:1520, in Module._call_impl(self, *args, **kwargs)
      1515 # If we don't have any hooks, we want to skip the rest of the logic in
      1516 # this function, and just call forward.
      1517 if not (self._backward_hooks or self._backward_pre_hooks or self._forward_hooks or self._forward_pre_hooks
      1518 or _global_backward_pre_hooks or _global_backward_hooks
      1519 or _global_forward_hooks or _global_forward_pre_hooks):
      -> 1520 return forward_call(*args, **kwargs)
      1522 try:
      1523 result = None
      ...
      3196 if not (target.size() == input.size()):
      -> 3197 raise ValueError(f"Target size ({target.size()}) must be the same as input size ({input.size()})")
      3199 return torch.binary_cross_entropy_with_logits(input, target, weight, pos_weight, reduction_enum)
      ValueError: Target size (torch.Size([1, 128, 128])) must be the same as input size (torch.Size([128, 128]))

  • @도사남
    @도사남 Рік тому

    안녕하세요. 책과 강의 잘 보고 있습니다.
    혹시 이진 분류를 다중 분류로 변경하는 부분에 대해서 수정 코드를 알 수 있을까요?
    연습 문제에 나와있는 정답을 참고해서 변경해보고 있는데,, 잘안되네요..

    • @도사남
      @도사남 Рік тому

      @@텐초 확인 감사합니다..
      책에 나와있는대로, 출력채널은 1에서 3으로, softmax 추가, CELoss사용하도록 수정은 했습니다. 다만, Label 데이터를 0, 1이 아닌 3개의 classes를 가지도록 해야 할 것 같은데 preprocessmask부분을 어떻게 변경해야 될지 감이 안 옵니다.
      one-hot encoding 을 써야 될까요?
      고견 부탁드립니다.
      감사합니다.

  • @백창현-y2e
    @백창현-y2e 2 роки тому +1

    안녕하세요. 재밌게 따라가고있는데, Unet의 모든 코드를 똑같이 해도 이런오류가발생하는데 해결방법을 아실까요?
    stack expects each tensor to be equal size, but got [3, 128, 128] at entry 0 and [1, 128, 128] at entry 28

    • @가즈아-d8w
      @가즈아-d8w 2 роки тому

      @@텐초 책의 내용을 그대로 따라했는데 학습루프에서 같은 에러가 발생하네요

    • @백창현-y2e
      @백창현-y2e 2 роки тому

      @@텐초 네 감사합니다.

    • @peterpanlab2694
      @peterpanlab2694 2 роки тому +1

      하아... 하루종일 이 에러 찾다가 영상 생각나서 왔는데 관련 해결책이 있네요.
      저는 텐초님 코드가 작동이 않되서 어찌 저찌 찾았습니다.
      아래 파일들이 32bit(4채널), 8bit(1채널) jpg라 차원이 안맞게 되나봅니다. 참고하시기 바랍니다.
      (흑백이야 그렇다치고... 왜 jpg따위에 32bit로 저장을 하는지. ㅠ_ㅠ, 옥스포드 놈들도 밉네요. 기왕에 뿌릴거 정리 좀 더 해주지.. 쩝)
      ./data/oxford/images\Abyssinian_34.jpg (202, 250)
      ./data/oxford/images\Abyssinian_5.jpg (150, 200, 4)
      ./data/oxford/images\Egyptian_Mau_129.jpg (325, 299)
      ./data/oxford/images\Egyptian_Mau_139.jpg (250, 350)
      ./data/oxford/images\Egyptian_Mau_14.jpg (800, 582, 4)
      ./data/oxford/images\Egyptian_Mau_145.jpg (188, 216)
      ./data/oxford/images\Egyptian_Mau_167.jpg (275, 183)
      ./data/oxford/images\Egyptian_Mau_177.jpg (175, 246)
      ./data/oxford/images\Egyptian_Mau_186.jpg (275, 183, 4)
      ./data/oxford/images\Egyptian_Mau_191.jpg (214, 300)
      ./data/oxford/images\staffordshire_bull_terrier_2.jpg (282, 500)
      ./data/oxford/images\staffordshire_bull_terrier_22.jpg (500, 364)

  • @백창현-y2e
    @백창현-y2e 2 роки тому

    이상하게 여기에 코드를 2번이나 올렸는데 사라지내요.. 데이터도 잘 불러와지는데 머때문에 오류가생기는지 잘모르겠어요
    마지막 학습부분에서 오류가발생합니다.

  • @MmX-x1x
    @MmX-x1x Рік тому

    안녕하세요. 클래스를 그대로 3개로 분류하게 코드를 다시 짜고 있는데 몇가지 의문이 있습니다.
    모델의 torch.squeeze 부분과 preprocess 없애고 최종 채널을 3, bce를 ce로 바꾸긴 했는데 softmax 힘수를 코드의 어느부분에 적용시켜야 할지 잘 모르겠습니다...
    그리고 파일을 열어보니까 레이블이 1 2 3 으로 되어 있던데 띠로 0 1 2로 안바꿔도 될까요??

    • @MmX-x1x
      @MmX-x1x Рік тому

      @@텐초 계속 런타임 에러 CUDA error: device-side assert triggered 라고 뜨는데 이유를 모르겠네요 ㅠㅠ

    • @MmX-x1x
      @MmX-x1x Рік тому

      @@텐초 preprocess_mask를 지우고 np.squeeze(label) 하니까 오류 없이 학습이 진행됩니다!! 그런데 loss가 아예 0이 되어 버리네요..

    • @MmX-x1x
      @MmX-x1x Рік тому

      @@텐초 스퀴즈를 안하면 RuntimeError: only batches of spatial targets supported (3D tensors) but got targets of size: : [32, 1, 128, 128] 요런 오류가 떠서요! label은 3차원으로 받아야 한다고 에러가 뜨는거 같습니다

    • @MmX-x1x
      @MmX-x1x Рік тому

      조금 늦었지만 해결이 됐습니다!! 제가 짠 코드가 맞는건진 모르겠지만 일단 돌아가고 결과도 나오네요 정말 감사합니다!!