Category: Python

  • diarium

    diarium

    YOLOv5는 모델의 크기에 따라서 s, m, l, x 4가지가 있다. 큰 모델을 이용할 수록 검출을 잘 하는 것으로 알려져 있으나, 반대 급부로 학습에 더 많은 시간이 소요되고, 속도가 느리다고 한다. 속도가 중요한 문제가 되는 이유는 실시간 검출을 하는 경우가 많기 때문이다. 초당 많은 이미지를 평가할 수 있을 수록 실전에서는 유용해지기 때문이다. 운전을 예로 들면 초당 1회 검출하는 것보다는 10번이, 10번 보다는 30번이 훨씬 더 안전하게 운전이 가능할 것으로 예상되는 것과 같다.

    어제 처음 학습을 시킬 때에는 s를 이용했는데, 오늘 시간이 조금 남아서 일단 x로 다시 학습을 시키도록 하고 집으로 왔다. 배치 크기를 거의 10% 수준으로 낮춰야 하는 문제가 있기는 하지만, 실제로 현저한 분석 시간의 저하는 없는 것 같다.

  • Jupyter Lab 설치

    Jupyter Lab 설치

    Jupyter Notebook에서 업그레이드한 것이 Jupyter Lab 이라고 하길래 설치해 보려고 한다. pip를 이용해서 간단하게 설치할 수 있다.

    pip3 install jupyterlab

    원격 접속을 위해서 우선 환경 설정 파일을 만든다. notebook과 동일하게 하면 된다.

    jupyter lab --generate-config

    비밀번호 키를 생성한다. Python에서 다음의 명령어를 입력하고 나오는 결과물을 복사해 둔다.

    from jupyter_server.auth import passwd; passwd()

    ~/.jupyter/jupyter_lab_config.py를 수정한다. 다음의 부분을 찾아서 수정해 주면 된다.

    c.ServerApp.password = 'sha1: ....'
    c.ServerApp.root_dir = ' '

  • Instance segmentation

    Image classificiation과 segmentation을 설명하기 좋은 그림이라서 나중을 대비해서 미리 기록하려고 한다.

    semantic segmentation과 instance segmentation을 차이를 보고 싶다면 우측 하단의 겹치는 cube를 분별할 수 있느냐 없느냐로 이해하면 된다.

  • Mask R-CNN 시작하기

    Image classification을 했으니 object detection으로 넘어가야 한다. 가르침을 받을만한 책이 없기 때문에 맨 땅에 헤딩하면서 배우기로 한다. 다행히 PyTorch에서 제공하는 한글 메뉴얼이 있다.

    https://tutorials.pytorch.kr/intermediate/torchvision_tutorial.html

    PennFudan 이라는 데이터셋을 이용한 설명이 있다. Custom 데이터를 이용해야 하므로 mask를 어떻게 구성해야 하는지 파악해 보기로 한다. Colab 코드에서 정보를 좀 얻어보기로 한다.

    https://colab.research.google.com/github/pytorch/vision/blob/temp-tutorial/tutorials/torchvision_finetuning_instance_segmentation.ipynb

    from PIL import Image
    Image.open('PennFudanPed/PNGImages/FudanPed00001.png')

    Jupyter Notebook에서 이 코드를 실행하면 다음의 그림 파일인 것을 알 수 있다.

    그리고 같은 형식의 이름 파일이 mask 인 것 같다.

    mask = Image.open('PennFudanPed/PedMasks/FudanPed00001_mask.png')

    검은색이다. 분명히 정보가 있을 것 같지만 검은색으로 보인다. 익숙한 R을 이용하여 그림 파일을 분석해 보았다.

    library('png')
    a=readPNG('FudanPed00001_mask.png')

    Matrix 형식으로 불러오면 분석이 어려우니까 numeric 으로 변환하여 확인해 본다. 즉, 이 그림 파일은 3개의 값으로만 구성되어 있다.

    unique(as.numeric(a))
    [1] 0.000000000 0.003921569 0.007843137

    좀 더 이해하기 쉽도록 자료를 변경하여 보자.

    unique(as.numeric(a)) * 255
    [1] 0 1 2

    즉, 배경인 0과 1(1/255), 2(2/255)로 표시된 정보임을 알 수 있다. 프로그램의 관점에서는 분명하게 구분되지만 그림 파일 뷰어에서는 그렇게 보이지 않는 그런 것임을 알 수 있다.

    답답해 하지 말고 다음 단계로 넘어가면 될 것 같다.