일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 혼공머신
- 컴퓨터구조
- 파이썬라이브러리
- 딥러닝
- 자바
- 자바 실습
- pandas
- 컴퓨터비전
- 정수와유리수
- 정보처리기사실기
- numpy/pandas
- 중학1-1
- 연습문제
- 파이썬
- 운영체제
- 영어공부
- 코딩테스트
- CSS
- 텍스트마이닝
- 데이터입출력구현
- SQL
- 중학수학
- html/css
- 머신러닝
- JSP/Servlet
- 데이터분석
- C++
- 정보처리기사필기
- CNN
- 데이터베이스
- Today
- Total
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
합성곱 신경망 11 - 객체 탐지 3 : YOLO 객체 탐지 2 <나만의 YOLO 모델 생성> 본문
나만의 YOLO 모델을 만드는 부분의 내용이 길어서 포스트를 나누어서 작성하기로 했다. 이 내용은 수업에서도 다루지 않던 내용이고 처음 해보는 거라 많이 어려웠다.
나만의 YOLO 모델 생성하기
Darknet 수준의 YOLO 모델을 개인이 학습하기에는 컴퓨터 리소스가 너무 많이 필요하고, 시간이 많이 걸린다는 문제가 있다. 대신 검은색 바탕에 간단한 도형 3개만 탐지하는 YOLO 모델을 만들어보고, YOLO 모델을 더 쉽게 이해하자.
앞의 그림을 보면 YOLO 논문에서는 이미지를 가로, 세로 각각 7개의 셀로 나누어 총 49 셀을 기본으로 하지만, 우리는 가로, 세로 3개의 세로로 나누는 방식으로 문제를 단순화한다. 또한 논문에서는 한 셀 당 2개의 박스를 그리지만, 우리는 한 셀당 1개의 박스를 그리는 방식으로 수정한다. 마지막으로 탐지할 객체의 종류인 Class도 3개로 줄여서 구현한다.
실습을 위해 자료실에서 제공하는 3개의 이미지 파일을 사용한다. 자료실에 있는 0, 1, 2 png 파일을 다운 받아서 내 작업 디렉터리 공간에 넣어주었다.
코드를 실행할 때마다 모양이 조금씩 달라진다.
실습을 위해 앞에서 생성한 이미지와 클래스(또는 예측값)를 입력해 주면, 탐지한 이미지에 박스를 그려주는 함수를 정의한다. 함수를 실행하면 경계 박스를 찾아서 표시해 준다.
모델이 어느 정도 성능을 갖기 위해서는 복잡한 구조로 구현되어야 한다. 전이 학습 방법을 적용하여 이미지 특징을 추출하는데 좋은 성능을 갖는 모델을 기본으로 활용하는 것이 좋다.
다음 코드에서는 VGG16 모델을 베이스로 사용하고, Conv2D 층과 Dense 레이어를 마지막 객체 탐지 분류기로 설정해 준다. 모델 구조를 요약해서 확인한다.
이미지를 총 9개(3 * 3)의 셀로 나누고, 셀마다 학습을 진행한다. 객체가 있는 셀의 경우 확률/ 박스 위치 및 크기/ 클래스 종류 모두 학습을 진행하고, 객체가 없는 셀은 객체가 없는 확률만 학습한다. 각 Loss는 미리 정한 비중을 곱하고 전체를 더해 최종 Loss를 만들어 모델을 학습한다.
에포크를 1만 5천 번까지 실행시켰지만 도저히 끝날 것 같지 않아 30분이 넘었을 때 중단했다. 그리고 에포크를 1000으로 줄여보았다.
코드 다시 실행하기
학습 과정은 동영상 파일로 저장된다. 코랩 폴더에서 동영상 파일을 로컬 PC로 다운로드한다.
조금 길게 에포크를 잡았으면 학습이 더 잘 되는 것이 보일 텐데 이 정도로 만족하기로 했다.
코드를 끝까지 실행한 후 영상이 어떻게 달라지는지 궁금하여 또 다시 40분 이상 투자하여 돌려보았다. GPU를 다 쓴 게 아까울 정도로 정말 허접한 영상이 출력되었다. 1천번으로 한정했을 때와 별 다른 차이는 없었다.
학습을 마치고
사실 책에 나온 이 부분은 3년 전 코드라 과연 실행이 될지 의문이었지만 몇 가지 코드를 수정하며 잘해볼 수 있었다. 이처럼 코드를 이해하고 실습할 수 있다는 것이 신기할 따름이다. 나의 개발 실력이 1년 전에 비해 일취월장했음을 가늠해 볼 수 있는 시간이었다.
사실 코드를 실행하는 시간이 너무 길어서 학습일지도 늦게 써본다. 오늘은 블로그 일지를 별로 많이 못 올릴 것 같다. 어제부터 AICON 행사가 있는데 거기 참석해보고 싶어서 내일까지는 무척 바쁠 것 같다.
딥러닝 공부는 많이 하지 못하겠지만 현장에 가보면 정말 많은 것들을 느끼고 배울 수 있다.
'인공지능 > 딥러닝' 카테고리의 다른 글
CNN 11 - Image Segmentation 2 : YOLOv8을 이용한 이미지 분할 실습해보기 (0) | 2024.11.01 |
---|---|
CNN 10 - Image Segmentation 1 : 이미지 분할 원리와 종류, 기술의 발전 그리고 FCN이 등장하기까지 (0) | 2024.10.31 |
합성곱 신경망 10 - 객체 탐지 2 : YOLO 객체 탐지 1 <Darknet YOLO 모델 추론하기> (0) | 2024.10.31 |
합성곱 신경망 9 - 객체 탐지 1 : 텐서플로 허브 활용 (1) | 2024.10.31 |
CNN 9 - 객체 탐지를 하는 YOLO v8 모델 실습 2 - 가위 바위 보 객체 탐지 모델 학습시키기 (2) | 2024.10.30 |