Blog

  • 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)로 표시된 정보임을 알 수 있다. 프로그램의 관점에서는 분명하게 구분되지만 그림 파일 뷰어에서는 그렇게 보이지 않는 그런 것임을 알 수 있다.

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

  • RStudio Server 포트 변경

    RStudio의 기본 포트는 8787이다. 부득이하게 변경해야 할 경우에는 다음의 파일을 수정한다.

    /etc/rstudio/rserver.conf
    www-port=포트번호
  • 워드프레스 Cloudfront

    워드프레스 Cloudfront

    왜 내가 AWS에서 블로그를 운영하면서 Ireland 리전을 선택했는지는 아직도 모르겠다. 아마, 신청 당시에 무료 사용은 Ireland였기 때문에 그렇게 하지 않았을까 싶다. 그리고 굳이 빠른 서비스를 위해서 인근 지역을 선택할 이유는 없었기 때문이다. 사용에는 문제가 없으나 그림 파일이 있을 경우 미묘하게 느리게 뜨는 기분이 든다. 실제로 거리가 있으니 그럴 것이다. S3를 이용하면서 CDN도 이용해 보기로 했다. 개인 블로그이니 만큼 사용료가 그렇게까지 비쌀 것 같지는 않았기 때문이다.

    사용한 플러그인은 Amazon AWS CDN이다. IAM을 통하여 별도의 사용자를 추가하면 잘 되는 것 같고, S3 사용자에 추가하는 식은 잘 안되는 것 같다.

    CDN 서비스는 HTTPS로만 제공이 된다. 나의 경우에는 Let’s Encrypt의 인증서를 이용하고 있는데, 이럴 경우 cloudfront.net 도메일을 이용하는 것으로 설정을 해야 한다. 적용이 성공적으로 되었다면 소스보기를 하면 cloudfront.net 으로 연결된 파일들을 볼 수 있게 된다.

    AWS의 기본 설정은 AWS origin일 경우 Cloudfront를 적용하지 않도록 되어 있다.

    S3로 링크가 걸린 이미지 파일은 Cloudfront 적용이 되지 않는다.

  • 수직 histogram 그리기

    수직 histogram 그리기

    산점도와 같은 그래프 옆에 수직 방향으로 density plot이나 histogram을 그리고 싶을 때가 있다. Density plot은 지난번에 언급하였으니 이번에는 histogram을 그리는 방법으로 구글에서 찾아보았다. Histogram은 수직 방향으로 그려주는 옵션이 없기 때문에 이와 유사한 barplot을 이용한 방법이다. dplyr도 배웠으니, ggplot2도 배워야 하나 싶기도 하지만, 일단 기본 기능으로 그려보았다.

    왼쪽 그래프의 우측 margin과 우측 그래프의 좌측 margin을 0으로 두면 볼만하다.

    layout(matrix(data=c(1, 1, 1, 1, 1, 2),  nrow=1, byrow=T))
    
    par(mar=c(5, 4, 4, 0)+ 0.1)
    boxplot(
      데이터
      ,axes = F
    )
    axis(1, at = c(seq(1, 100, 10), 100), c(seq(1, 100, 10), 100))
    axis(2, at = seq(0, 1, 0.2), seq(0, 1, 0.2), las = 1)
    
    par(mar=c(5, 0, 4, 3)+ 0.1)
    barplot(hist(데이터, plot = FALSE, breaks = seq(0, 1, 0.01))$counts, axes = F, space = 0, horiz=TRUE, xlab= "", ylab="")