ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [ 딥러닝 ](이미지)Object Detector -시작하기
    Tech/머신러닝 2020. 2. 24. 17:29
    반응형

    딥러닝이 가장많이 쓰이는 부분은 이미지 처리 인거 같다. 실제 지금 다니는 회사에서도 가장 메인으로 개발중인건 이미지에서 무엇인가를 찾는것이다. 

     

    그래서 여기에 내가 현재까지 이해한 부분들을 기록으로 남기려고 한다. 머리가 나빠서 자꾸 까먹는다... 

     일단 여기서 무엇인가가 중요한거 같다. 딥러닝은 말그대로 정답지를 무수히 인공지능에게 보여줘서 이 화면에 있는것이 어떤 물건인지 알려주는것이다. 

     

     그렇다면 어떤방식으로 학습을 시키고 그 결과를 확인하고 테스트하고 사용할지 , 일반적인 사람들 생각에는 굉장히 막연할거 같다. 나도 물론 처음 접할땐 막연했고 인공지능은 수학에 가까운것이 아닌가 ? 라는 생각을 했다. 

     인공지능 = 알파고 라고 보통 생각을 많이 하고 있고, 개발자들에게는 미래가 유망한 분야이지만 나랑은 상관없는 분야라고 생각을 대부분 하는거 같다. 나도 물론 내가 인공지능을 공부하기 시작할지 몰랐다.... 

     

    일단 이미지 디텍팅을 하기 위해선 여러가지 준비 사항이 필요하다. 

     

    1. 이미지 

     내가 찾고 싶은 물체가 있는 이미지들이 필요하다. 모든 AI 개발자들이 동일하게 생각할거 같은 부분은 데이터는 많을수록 좋다 ! 그리고 이미지의 라벨링 이라는 작업이 필요하다 , 라벨링이 필요한 이유는 일반적인 앵커 박스를 이용하는경우 인식시킬 물체를 박스로 표시하여 해당부분에 있는것이 무엇이다! 라는 정답지를 이미지와 한쌍으로 만들어 줘야만 학습이 가능하기 때문이다. 

     그리고 중요한건 이미지를 무작정 모으는것이 아니라  트레이닝용 , 검증용 , 테스트용 으로 분리하여 구성해 줘야 한다. 내가 딥러닝을 시작하면서 느낀건 데이터 세트 구성이 개발의 최소 절반은 된다는것이다.  일반적으로 트레이닝을 진행하면 단순 트레이닝만 하는게아니라 중간 중간 검증도 같이 진행되도록 구성되는경우가 많다. 그렇기 때문에 트레이닝 데이터를 구성할때 그중 10~20% 정도는 검증용으로 별로 분리하는경우가 있다고 한다. 그리고 중요한건 테스트용 데이터 인데 , 중요한 이유가 트레이닝에 사용된 데이터가 중복으로 들어가면 절대! 안된다. 그냥 상식적으로 봐도 이미 인공지능한테 알려준 답을 다시 알려줘봐야 이미 봐버린 이미지 이기 때문에 정답률은 100% 로 나올수 밖에 없다. 

     나중에 테스트 셋으로 검증시 성능 측정에 굉장히 치명적인 문제를 줄수 있다. 

     

    2. 네트워크 

     중요한 부분인것 같다. 현재 이미지 인식에 관련된 네트워크들이 많이 존재 한다. 역사와 전통을 자랑하는 CNN 부터 현재 많이 뜨고있는(?) Yolo 까지 각 네트워크는 각자의 특징을 가지고 있다. 

     확실한건 속도와 성능은 절대 동시에 잡기 힘들다는것이다. 거울의 양면과 같은 부분이며 어느쪽이 더 중요한지에 따라서 네트워크를 구성하면 될거 같다. 내가 처음 접한건 R-CNN 이였고 현재 회사에서 사용중인것은 Yolo 이다 . 중간에 SSD , ResNet 등을 보긴했지만 결론적으로는 필요에 의하여 Yolo 를 사용중이다. 절대적을 좋은 것은 없는거 같다. 

     

    3. 트레이닝 장비 

     제일 문제인 부분이다... 구글에서 제공하는 서비스중에는 간단한것들을 테스트 해볼수 있는것들이 있다. 하지만 확실히 제대로 하려면 불편한건 사실이다. 다행이 회사에서 2080ti 를 제공해줘서 사용중이지만 집에서 따로 공부하기엔 불편하다. CPU 만으로는 제대로된 성능을 볼수 없다. 회사 개발 환경 기준으로 2080ti로 구성해서 사용중이며 대부분 환경을 nvidia-docker 를 활용해서 사용중이다. 프로젝트마다 텐서플로우 버전이 다르고 환경이 조금씩 다르게 구성되는경우도 있고 텐서플로우가 아닌 케라스나 파이토치등을 사용하는 프로젝트들이 있기 때문에 한장비에서 여러가지 환경을 구성해서 사용할때 docker 만한것이 없다. 딥러닝할때 docker 부터 잘 알아두는게 좋을거 같다. 

     

    4. 그리고.... 

     위에 세가지가 준비 됬다면 시작하면 된다 ! 단! 파이썬이나 C++ 을 잘 한다는 전제 하에 이다. 보통 인공지능=파이썬 이라고들 많이 생각을 한다. 물론 나도 그랬다. 하지만 생각보다 C++ 을 알아야 할경우가 생긴다. 예를 들면 처리속도 문제이다. cython 을 이용해서 충분히 파이썬으로도 처리속도를 향상 시킬수 있지만 , 그냥원론적으로 속도는 C++ 이 넘사벽이다. 한장의 이미지를 처리하는 성능을 확인 했을때 C++ 로는 45ms 가 걸리는것이 python 으로는 85ms 이상 걸리는것을 확인 했었다. 일반적으로 봤을땐 저게 얼마 차이 안나는걸로 보이지만 여기서 중요한건 C++ 은 전처리, 후처리 모두 다하고 이미지 문석 까지 한시간이였고 python 은 단순 이미지만 처리한 시간이였다.

     단순하게 생각하면 C++ python 둘간의 속도처리만봐도 언어적으로도 큰차이나 나는부분이니 대부분 인정하는 부분이다. 속도가 정말 중요한 서비스라면 C++ 을 사용하는것이 좋고, 주변 인공지능 개발자들을 보면 파이썬으로 모델과 전처리 부분을 구현해서 테스트해보고 그대로 C++ 로 바꾸는 방식을 사용하는것을 종종 보았다. 파이썬이 좋은 언어지만 필요에 따라선 C++ 도 해야 한다는점을 명심해야겠다.

     

     

     

     

     

    반응형

    'Tech > 머신러닝' 카테고리의 다른 글

    어설픈 인공지능 개발자(?)의 TTS 만들기  (2) 2020.04.20
    [딥러닝] (이미지)R-CNN vs Yolo  (3) 2020.02.25
Designed by Tistory.