Category: Python

  • Python은 문자로 결과가 나오더라도 문자가 아닌 것 같은 경우가 있다. 문자인 숫자를 숫자로 인식시켜주려면 int()로 변경을 해야 하듯이 문자열 결과를 기반으로 조건을 확인하려면 문자열로 변경시켜 주어야 한다.

    device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
    
    if str(device) == 'cpu':
        model = torch.load('model_class9_entire.pt', map_location='cpu')
        model = model.to(device)
        model.eval()
    elif str(device) == 'cuda':
        model = torch.load('model_class9_entire.pt')
        model = model.to(device)
        model.eval()
  • PyTorch upgrade

    PyTorch 1.7.0 버젼이 나왔다고 한다. 아직 버젼에 의존하는 그런 고급(?)은 아니니 최신으로 업그레이드 해보기로 했다. PIP로 패키지를 관리하는데 이 프로그램은 놀랍게도 upgrade에 대한 설명이 없다! 하지만, 해야 한다면 다음과 같은 형식으로 한다. 셀프 업그레이드 및 패키지 업그레이느는 다음과 같다.

    pip3 install --upgrade pip
    pip3 install --upgrade 패키지

    PyTorch 버젼은 다음과 같이 확인한다. Python에서 확인해야 한다.

    import torch
    print(torch.__version__)

    근데 PyTorch는 그렇게 하면 안되고 홈페이지에서 조건에 맞춰 다시 설치하면 된다.

    pip install torch==1.7.0+cpu torchvision==0.8.1+cpu torchaudio===0.7.0 -f https://download.pytorch.org/whl/torch_stable.html

  • torch 모델 불러오기

    GPU 에서 작업하고 저장한 모델이다. 하지만 GPU가 없는 컴퓨터에서 작업을 하기 위해서 모델을 불러오면 오류가 발생한다. 오류 메세지에 어떻게 하라는 설명이 나오기는 하니까 어렵지 않게 해결할 수 있다. map_location = ‘cpu’를 명시하면서 불러오면 된다.

    model = torch.load('model.pt', map_location='cpu')
  • 두 개의 이미지 겹치기

    img1이 있고, img2에 해당하는 부분을 흐리게 보일 때 사용하는 방법이다. 여러가지 방법이 있을 것 같으나, 내가 사용한 방법은 다음과 같다.

    보통 마스킹 이미지는 배경이 검고, 보여줄 부분은 하얗게 만든다. bitwise를 이용하면 어떻게 하던지 한 쪽 밖에는 볼 수 없다. 그래서 두 장의 이미지를 서로 겹치게 하는 addWeighted를 이용한다.

    원래 이미지와 같은 크기를 가지는 3채널 이미지 array를 만든다. zeros_like를 이용하면 0 값을 가진 것을 쉽게 만들 수 있다.

    img2 = numpy.zeros_like(img1)

    본인이 원하는 부분에 적절히 흰색의 값인 255를 입력해 둔다. 그리고 반전한다. 반전을 해야 관심이 없는 부분을 흐리게 만들기가 수월하다. 반전 이미지는 img2에 bitwise_not를 적용시키면 얻을 수 얻을 수 있다.

    img2 = cv2.bitwise_not(img2)
    

    다음과 같이 img1과 img2를 겹친다.

    masked = cv2.addWeighted(img1, 1, img2, 0.1, 0)
    

    이러면 예쁘지는 않지만 관심없는 부분을 조금 옅게 볼 수 있다.