관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

합성곱 신경망 9 - 객체 탐지 1 : 텐서플로 허브 활용 본문

인공지능/딥러닝

합성곱 신경망 9 - 객체 탐지 1 : 텐서플로 허브 활용

huenuri 2024. 10. 31. 05:57

어제 저녁에 이 단원과 영어 공부를 하려고 했는데 피곤하기도 하고 그냥 쉬고 싶었다. 역시 난 외부 활동을 하면 에너지가 많이 소진되는 걸 느낀다. 하지만 정말 가길 잘했다는 생각이 들었다. 오늘도 행사가 있지만 그냥 집에서 밀린 공부를 할 생각이다. 오늘까지 꼭 CNN을 마쳐야 이번주 일요일까지 RNN까지 진도를 나가 딥러닝 공부를 마칠 수 있을 것 같다.

더이상 진도가 밀리면 다음 일정에 차질이 생길 테니까.

평소보다 늦게 일어났지만 이제부터 다시 열심히 공부해볼 것이다.

 

객체 탐지에 대하여

Object Detection 문제는 객체 탐지 또는 객체 검출이라고 번역하여 사용된다. 이미지를 인식하는 컴퓨터 비전 AI 기술이 가장 많이 응용되는 분야라고 말할 수 있다. 가장 대표적인 응용 분야로는 자율주행차를 예로 들 수 있다. 자율주행차는 카메라 또는 센서를 활용하여 도로 상황을 파악한다. 도로를 이동하고 있는 다른 자동차의 움직임 외에도 거리를 횡단하려는 사람들이나 장대물을 식별하고 그 위치를 찾는다. 캐글에서도 경진대회를 열 정도로 많은 사람들이 주목하고 있는 연구 분야라고 말할 수 있다.

객체 탐지는 입력 이미지로부터 여러 개의 객체를 찾아내고 각 객체가 무엇을 나타내는지 분류하는 두 가지 작업을 처리한다. 이미제서 각 객체의 위치를 찾아내고 객체를 둘러싸는 네모 박스를 그리는데, 객체의 경계를 나타내는 좌표 값을 회귀 문제로 접근한다. 위치를 찾아 낸 각 객체가 어떤 클래스에 속하는지 분류하는 문제를 다음에 처리한다.

 

 

이처럼 객체 탐지는 이미지를 인식해 이미지 안에 들어 있는 여러 객체 위치를 찾는 회귀 문제와 찾아낸 객체를 분류하는 문제가 결합되어 있다.


 

 

 

 

텐서플로 허브 활용

텐서플로 허브는 많은 사용자들이 텐서플로를 선호하는 이유 중의 하나라고 볼 수 있다. 이미지 분류, 객체 탐지, 스타일 전이, 텍스트 분류 등 다양한 딥러닝 문제를 해결할 수 있는 검증된 사전 학습 모델을 제공하는 저장소이기 때문이다. 여기서 제공하는 모델을 그대로 배포하여 서빙하는 것도 가능하고, 전이 학습을 거쳐 개별 도메인에 맞게 튜닝한 다음 배포하는 것도 가능하다.

 

 

 

텐서플로 허브 홈페이지

 

TensorFlow Hub

TensorFlow Hub는 기계 학습 모델의 재사용 가능한 부분을 게시, 검색 및 사용하기 위한 라이브러리입니다.

www.tensorflow.org

 

 

 

이번에는 텐서플로 허브에서 제공하는 객체 탐지 모델을 사용하여 샘플 이미지로 부터 객체를 추출하는 작업을 한다. 먼저 텐서플로 허브 라이브러리를 직접 불러온다.


 

 

 

1. 샘플 이미지 준비

이미 학습이 완료된 딥러닝 모델을 사용할 것이므로, 별도로 모델 학습을 하지 않는다. ㅁ델을 활용해 객체를 탐지하고 검출할 샘플 이미지를 준비한다. 여기서는 위키피디아에서 제공하는 서울 강남 지역의 거리 사진을 다운로드 받아서 모델의 입력 형태에 맞게 전처리한다.

 

 

사전 학습 모델은 배치 크기를 포함하여 4차원 텐서를 입력으로 받는다. 따라서 가장 앞쪽으로 0번 축(axis 0)으로 새로운 축을 추가한다.


 

 

 

 

 

2. 사전 학습 모델

텐서플로 허브에서 Open Images v4 데이터셋으로 사전에 학습된 2가지 모델을 제공한다.

 

책은 좀 오래된 버전이라 같은 내용을 찾는 게 참 힘들었다. 텐서플로 허브가 아닌 캐글에서 찾을 수 있었다. 여기서는 Faster R-CNN 알고리즘으로 구현된 inception_resnet_v2 모델을 사용한다. 이 모델은 mobilenet_v2 모델보다 속도는 느리지만 정확도가 훨씬 좋다.

 

 

 

 

 

책에는 Copy URL 버튼을 클릭하면 모델를 가져올 수 있는 링크가 복사된다고 했는데 이 메뉴는 찾지 못했다. 

 

 

 

 

 

이 내용인 것 같기도 하다.저장된 모델 파일을 직접 로컬 PC에 다운로드 받을 수 있는 기능이다. 앞에서 복사한 링크를 텐서플로 허브 라이브러리의 load 함수에 전달해주면 모델을 불러온다. model 변수에 저장한다.

 

위나 아래 코드 둘 중 하나만 실행해도 되는 것 같다. 위의 것은 요즘 버전의 웹사이트에서 코드를 복사한 것이고 아래는 책에 있는 코드를 그대로 가져온 것이다.

 

 

 

 

다음과 같이 모델의 시그니처를 확인한다. 이 모델은 'default' 시그니처 하나만 제공한다.

 

 

 

모델에서 'default' 시그니처를 지정하여 객체 탐지 모델 인스턴스를 생성한다.


 

 

 

 

3. 추론

객체 탐지 모델 앞에서 전처리를 통해 준비한 샘플 이미지를 입력한다. 모델은 추론을 거쳐서 예측 값을 반환한다. result 변수의 딕셔너리 키 배열을 확인하면 다음과 같다.

 

 

 

그 중에서 우리는 다음 같들을 사용할 예정이다.

  • detection_boxes : 경계 박스(bounding box) 좌표[ymin, xmin, ymax, xmax]
  • detection_class_entities : 검출된 아이디
  • detection_scores : 검출 스코어

 

 

먼저 검출 스코어 점수의 개수를 통해서 100개의 객체를 탐지한 것을 알 수 있다.

 

 

 

검출된 100개의 객체 중에서 검출 스코어가 0.1보다 큰 경우만 경계 박스와 예측 클래스를 시각화한다. 최대 10개 객체만 표시되도록 설정한다.

 


 

 

 

학습을 마치고

오늘 새벽에 1시간 반 동안 진행한 학습 내용이다. 사실 30분 정도는 슬렁슬렁 다른 일도 하면서 가볍게 했고 어제 기록하지 못한 일정도 기록하며 보냈다. 이제 졸음도 완전히 달아났고 남은 새벽 공부도 최선을 다해서 열심히 해볼 수 있을 것 같다. 사실 3년 전 책이라 과연 코드가 제대로 작동이 될지 걱정이 되었는데 사이트에 들어가보니 지금도 여전히 잘 사용되는 모델인 것 같았다.

객체 탐지를 하는 부분이 지금까지 배운 딥러닝에서 가장 흥미로운 분야였다. 이어서 YOLO 객체 탐지에 대해서 학습해볼 것이다.