ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Algorithms] YOLO(You Only Look Once)
    Data Analysis/Algorithms 2021. 2. 13. 23:30

    Table of Contents

    1. Introduction
    2. YOLO(You Only Look Once)란?
    3. YOLO in R
    4. Reference

     

    Introduction

    "김원해 = 변기...?" 이게 무슨 말인가? 2020년 4분기(2020. 10. 17 ~ 2020. 12. 06)에 수지(서달미), 남주혁(남도산), 김선호(한지평), 강한나(원인재) 주연의 스타트업이 tvN에서 방영되었다. 한국의 실리콘 밸리에서 성공을 꿈꾸는 드라마인데, 남주혁 배우가 AI 전문가로 나온다. 이미지 분석을 해서 이미지 스캐너를 이용해서 실시간으로 데이터를 판별하는 서비스를 구현하였다. 이때 사용하는 방식이 어떤 알고리즘을 사용했는지는 알 수 없으나, 이미지 분석을 활용한 비즈니스 모델을 굉장히 상세하게 다뤘다는 점에서 호기심을 자극할 만하다. 더욱이 이 4차 산업혁명 그리고 정부의 뉴딜 정책과 관련해서 AI 스타트업들이 많이 늘어나고 있는 추세이다. 수 많은 데이터 중에서 이미지를 처리하는 알고리즘에 대해 알아보고 다양한 비즈니스 모델에 활용할 수 있기를 기대한다.

    [그림 1] tvN 드라마 스타트업 한 장면

     

    YOLO(You Only Look Once)란?

    YOLO는 2015년 Joseph Redmon에 의해 제안된 실시간 사물 인식 기법이다.  YOLO는 현재 v3까지 나온 상태이고 과거 버전이나 타 모델들과 비교했을 때 속도를 개선하였다. 아쉽게도 최신 모델과 비교했을 때나 작은 사이즈를 디텍팅하는데 있어서 정확도의 한계는 있다. 이미지 디텍팅 과정에서 복잡한 파이프라인을 제거하고 회귀 모형을 선택하였기 때문에 굉장히 빠르다. 더욱이, YOLO 기본 네트워크는 Titan X GPU에서 초당 45프레임을 처리한다. 

    YOLO는 s×s 조각의 이미지를 자르고  각 각의 조각에서 바운딩 되는 영역과 개체 확률 지도를 조합하여 [그림 2]와 같은 최종 결과물을 생성한다.

    [그림 2]

    YOLO in R

    이미지 센싱을 하기 위한 사진을 가져온다.  [그림 2]는 도로를 걷고 있는 사람들의 사진이다. unsplash에서 가져온 사진으로 이미지 센싱이 잘 되는지 확인해보자.

    [그림 3] Photo by justin beck on Unsplash

     

    github에 게시된 패키지를 다운 받기 위해서 R에서 devtools 패키지를 설치한다. install_github("bnosac/imgae", subdir = "image.darknet", build_vignettes = TRUE) 함수를 사용해서 darknet에서 제공하는 이미지 프로세싱 패키지를 다운로드 한다.

    > install.packages("devtools")
    > install_github("bnosac/image", subdir = "image.darknet", build_vignettes = TRUE)

    > library(image.darknet)

    > model = image_darknet_model(type = "detect",
                                                model = "tiny-yolo-voc.cfg",
                                                weights = system.file(package = "image.darknet",
                                                                                                                  "models",
                                                                                                                  "tiny-yolo-voc.weights"),
                                                labels = system.file(package = "image.darknet",
                                                                                                              "include",
                                                                                                              "darknet",
                                                                                                              "data",
                                                                                                              "voc.names"))


    > predict = image_darknet_detect(file = "c:/project/target.png",
                                                                           object = model,
                                                                            threshold = 0.19)

     

    image_darknet_detect()를 통해 나온 결과를 살펴보면, 총 5개의 이미지가 태깅된 것을 확인할 수 있으며, 각 각을 판단하는 확률들이 나타난다. 상당히 정확하게 잡히는 것을 볼 수 있다.

    c:/project/target.png: Predicted in 2.050000 seconds.
    Boxes: 845 of which 5 above the threshold.
    car: 35%
    person: 35%
    car: 57%
    person: 91%
    bicycle: 50%

    [그림 4] 이미지 디텍팅 결과

     

    Joseph이 제안한 YOLO를 R에서 이용해보았다. 비록 단 한장의 사진을 가지고 처리하였다. 그 결과 이미지 디텍션을 빠른 속도로 제공하고 있으며, 향후에는 영상 데이터를 활용해서 태깅하는 것을 테스트해볼 필요가 있다. 뿐만 아니라 다른 알고리즘과도 비교해서 어떤 상황에서 어떤 알고리즘이 더 좋을지 비교해보는 것 도 필요하다.

     

    Reference

    Joseph Redmon 등, "You Only Look Once: Unified, Real-Time Object Detection", arxiv.org/abs/1506.02640

    darknet, "yolo homepage", pjreddie.com/darknet/yolo/

    justin beck, unsplash.com/collections/2704724/my-favorite

    댓글

Designed by Tistory.