Category: Python

  • 오래된(?) PC에 PyTorch, Torchvision 설치하기

    항상 최신의 PC를 이용할 수는 없는 법. 오래된 PC에 PyTorch를 PIP를 이용해서 설치하고 나서, 실행을 하면 오류가 발생한다. 

    [W NNPACK.cpp:80] Could not initialize NNPACK! Reason: Unsupported
    hardware.

    AVX2 명령어를 지원하지 않는 CPU에서 해당 오류가 발생한다고 한다. 구글 검색을 해보면 PyTorch를 소스로 설치하면서 USE_NNPACK=0으로 설치하면 된다고 한다.

    USE_NNPACK=0 python3 setup.py install

    그런데 문제는 지금부터다. Tesla K40c 은 매우 오래된 아키텍쳐 기반이다. 그래서 추가 옵션이 필요하다. Tesla K40c는 3.5라고 한다.

    TORCH_CUDA_ARCH_LIST="3.5" USE_NNPACK=0 python setup.py install

    그 다음에 딥러닝 학습에 필요한 여러 패키지를 설치한다. 대부분 torchvision을 이용할 텐데, torchvision도 소스로 설치해야 한다. 혹시나 싶어서 pytorch와 같은 방법으로 설치했다.

    git clone --recursive https://github.com/pytorch/vision
    cd vision
    TORCH_CUDA_ARCH_LIST="3.5" USE_NNPACK=0 python setup.py install

    재현이 될지는 모르겠다.

    NNPACK은 경고 메세지는 뜨지만, 일단 지나간다.

    YOLOv5가 실행되기 시작했다.

  • YOLO annotation

    YOLO에서 annotation은 다음과 같이 한다. 가장 먼저 명심해두어야 하는 것은 좌상단을 (0,0), 우하단이 (1,1)인 사각형 형태이며, 비율로 해야한다는 것이다.

    • 좌상단을 (0,0), 우하단이 (1,1)인 사각형 형태이다.
    • 입력되는 값은 비율에 해당하는 값이다.
    • txt 포맷(TSV)로 입력할 수 있다.
    • 첫 번째는 클래스
    • 두 번째는 형태 중심의 X
    • 세 번째는 형태 중심의 Y
    • 네 번째는 가로 폭
    • 다섯 번째는 세로 폭

    OpenCV에서 boundingRect 를 이용할 경우 출력 값은 Contour의 좌상단 X좌표, Y좌표, 폭, 높이이다. 보통 x y, w, h로 결과를 받는다.

    x, y, w, h = cv2.boundingRect(contour)

    간단한 식으로 결과를 변환하여 입력해주면 된다.

  • OpenCV 에서 zero-padding

    YOLOv5에서 100×100 pixel 이미지로 학습시키면 128로 변환된다. 오류 메세지를 보면 32배수를 이어야 한다고 한다. OpenCV에서 zero-padding은 다음과 같이 해결한다. 순서는, 위-아래-왼쪽-오른쪽이다.

    cv2.copyMakeBorder(img, 14, 14, 14, 14, cv2.BORDER_CONSTANT, value=[0,0,0])
    
  • YOLOv5 테스트 셋 결과

    https://www.bbc.com/korean/international-56290833

    지난 주말에 학습시킨 사람/차를 학습 시킨 모델을 이용하여 새로운 사진을 평가해 보았다. 이 사진은 오늘 BBC에 실린 사진이니 모델은 처음 본 사진이다.

    잘 동작하는 것을 볼 수 있다.

    YOLOv5 학습과 관련되어 많은 도움이 된 곳의 링크는 다음이다.

    https://bigdata-analyst.tistory.com/195?category=883085