일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 자바
- 정보처리기사필기
- 딥러닝
- 데이터분석
- 자바 실습
- ChatGPT
- JSP
- html/css
- 자바스크립트
- 자바스크립트심화
- c언어
- rnn
- SQL
- 중학수학
- 파이썬
- JDBC
- 컴퓨터구조
- JSP/Servlet
- 디버깅
- CSS
- 정보처리기사실기
- 혼공머신
- 순환신경망
- 연습문제
- 상속
- 데이터베이스
- 컴퓨터비전
- 중학1-1
- 개발일기
- 머신러닝
- Today
- Total
목록합성곱신경망 (11)
클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지
나만의 YOLO 모델을 만드는 부분의 내용이 길어서 포스트를 나누어서 작성하기로 했다. 이 내용은 수업에서도 다루지 않던 내용이고 처음 해보는 거라 많이 어려웠다. 나만의 YOLO 모델 생성하기Darknet 수준의 YOLO 모델을 개인이 학습하기에는 컴퓨터 리소스가 너무 많이 필요하고, 시간이 많이 걸린다는 문제가 있다. 대신 검은색 바탕에 간단한 도형 3개만 탐지하는 YOLO 모델을 만들어보고, YOLO 모델을 더 쉽게 이해하자. 앞의 그림을 보면 YOLO 논문에서는 이미지를 가로, 세로 각각 7개의 셀로 나누어 총 49 셀을 기본으로 하지만, 우리는 가로, 세로 3개의 세로로 나누는 방식으로 문제를 단순화한다. 또한 논문에서는 한 셀 당 2개의 박스를 그리지만, 우리는 한 셀당 1개의 박스를 그리는..
이어서 객체 탐지에 대해서 공부해 볼 것이다. 이번에는 Darknet에서 제공하는 YOLO(You Only Look Once) 객체 탐지 모델을 사용하는 방법을 알아본다. YOLO는 경계 박스와 예측 클래스를 서로 다른 문제로 다루지 않고 하나의 회귀 문제로 접근하는 개념이다. 다시 말하면, 하나의 신경망이 한 번만 계산해 두 가지 일을 한꺼번에 처리한다. 따라서 속도가 매우 빠르다는 장점을 갖는다. Darknet YOLO 모델 추론하기YOLO 모델을 개인 로컬 PC 환경에서 학습하는 것은 사실상 불가능하다. 성느 좋은 GPU가 필요하고, 학습 시간도 오래 걸리기 때문이다. 하지만 Darknet에서 제공하는 사전 학습 모델을 활용하면 일반 pc 환경에서도 YOLO 뿐만 아니라 RestNet 등 다..
어제 저녁에 이 단원과 영어 공부를 하려고 했는데 피곤하기도 하고 그냥 쉬고 싶었다. 역시 난 외부 활동을 하면 에너지가 많이 소진되는 걸 느낀다. 하지만 정말 가길 잘했다는 생각이 들었다. 오늘도 행사가 있지만 그냥 집에서 밀린 공부를 할 생각이다. 오늘까지 꼭 CNN을 마쳐야 이번주 일요일까지 RNN까지 진도를 나가 딥러닝 공부를 마칠 수 있을 것 같다.더이상 진도가 밀리면 다음 일정에 차질이 생길 테니까.평소보다 늦게 일어났지만 이제부터 다시 열심히 공부해볼 것이다. 객체 탐지에 대하여Object Detection 문제는 객체 탐지 또는 객체 검출이라고 번역하여 사용된다. 이미지를 인식하는 컴퓨터 비전 AI 기술이 가장 많이 응용되는 분야라고 말할 수 있다. 가장 대표적인 응용 분야로는 자율주행차를..
앞서 다룬 예제들은 케라스 또는 텐서플로 데이터셋을 로드해 사용한 것이다. 하지만 실제 업무 또는 AI 경진 대회 참가 등의 상황에서는 파일 형태의 데이터셋을 분석에 활용해야 한다.이 경우 고성능 GPU가 탑재된 워크스테이션이나 PC에 데이터셋을 저장하고 이 데이터를 텐서플로 분석 환경으로 읽어오는 과정이 필요하다. 하지만 실무에서 주로 다루는 이미지 파일은 용량이 크거나 파일 개수가 많아서 컴퓨터 메모리 또는 그래픽 카드 메모리가 부족한 상황이 자주 발생한다. 이런 문제를 해결하려면 이미지 데이터셋을 32장, 64장, 128장 등 배치 단위로 나눈 다음, 배치 한 개를 읽어와 딥러닝 모델에 주입하면 메모리 부담 없이 학습할 수 있다. 전체 데이터셋을 전부 모델에 입력할 때까지 배치 단위로 읽어오고 주입..
이어서 위성 이미지 분류 학습을 진행해 보겠다. 데이터 증강(Data Augmentation)앞서 배운 과대적합을 해소하는 기법인 배치 정규화, Dropout 등을 적용했음에도 과대적합이 발생하였다. 이미지 분류 문제에서 관대적합을 해소하고, 모델의 일반화된 Robust한 성능을 확보하는 기법으로 데이터 증강 기법을 소개한다.이미지 데이터에 여러 가지 변형을 주어 훈련 데이터의 다양성을 확보하는 방식으로, 모델이 새로운 데이터에 대한 예측력을 강화하도록 하는 개념이다.먼저 EuroSAT 데이터셋 중에서 하나의 샘플 이미지를 선택하여 시각화한다. 샘플 이미지에 변화를 주기 전과 후의 이미지를 비교할 수 있는 시각화 함수를 정의한다. tf.image 모듈의 flip_left_right 함수를 사..
이번 단원도 무척 길어서 두 개의 포스트로 나누어 작성할 예정이다. 단순한 모델 생성도 많이 어려웠는데 이번에는 복잡한 모델을 생성해 볼 것이다.텐서플로 케라스의 Functional API를 사용하면 Sequential API로 구현할 수 없는 복잡한 구조의 모델을 정의할 수 있다. 예를 들면, 각 레이어를 기준으로 입력이 2개 이상이거나 출력이 2개 이상인 모델을 만들 수 있다. 또는 중간에 있는 레이어들을 건너뛰고 뒤쪽에 있는 레이어로 출력 텐서를 전달하는 방식으로 직접 연결하는 방법도 가능하다. 데이터셋 준비필요한 라이브러리와 mnist 데이터셋을 불러와서 훈련 데이터셋과 검증 데이터셋으로 구분하여 저장한다. 원본 mnist 데이터셋은 0~9까지 숫자를 손글씨로 쓴 이미지(x)와 정답(y) 숫..
조금 늦은 아침을 먹고 이이서 딥러닝 실습을 시작해 보겠다. 합성곱 신경망 실습해 보기 라이브러리와 손글씨 데이터를 불러온 다음, 훈련 데이터와 테스트 데이터로 나눈다. 데이터의 크기를 확인하면 이와 같다. 이미지 색상은 어떻게 작성할 수 있을까? 0부터 9까지의 숫자가 출력된다. 이미지 분석을 할 때 특징을 추출하는 층을 넣어준다. Maxpooling 과정에서 특징이 아닌 부분을 삭제하는 과정을 거친다. 이렇게 CNN 층을 구성했다. 모델이 저장된 폴더의 경로를 복사해서 붙여 넣고 뒤에 에포크와 정확도도 표시해 준다. 그리고 모델 객체를 생성한다. 오류가 많아서 코드를 정말 많이 수정했다. 수업을 들으면서 코드를 작성하니 틀리게 적는 부분이 정말 많았다..
합성곱 신경망의 학습을 시각화하는 두 번째 방법은 합성곱 층에서 출력된 특성 맵을 그려보는 것이다. 이를 통해 입력 이미지를 신경망 층이 어떻게 바라보는지 엿볼 수 있다. 합성곱 층의 출력을 만들기 전에 케라스 함수형 API에 대해 먼저 알아보겠다. 함수형 API지금까지는 신경망 모델을 만들 때 케라스 Sequential 클래스를 사용했다. 이 클래스는 층을 차례대로 쌓은 모델을 만든다. 딥러닝에서는 좀 더 복잡한 모델이 많이 있다. 예를 들어 입력이 2개일 수도 있고 출력이 2개일 수도 있다. 이런 경우는 Seqeuntial 클래스를 사용하기 어렵다. 대신 함수형 API를 사용한다.함수형 API는 케라스의 Model 클래스는 사용하여 모델을 만든다. 간단한 예를 들어보겠다. 7장에서 만들었던 De..
이어서 합성곱 신경망을 사용한 이미지 분류 학습을 진행해 보겠다. 모델 컴파일과 훈련케라스 API의 장점은 딥러닝 모델의 종류나 구성 방식에 상관없이 컴파일과 훈련 과정이 같다는 점이다. 다음 코드는 완전 연결 신명망을 컴파일하고 훈련하는 코드와 거의 같다.Adam 옵티마이저를 사용하고 ModelCheckpoint 콜백과 EarlyStopping 콜백을 함께 사용해 조기 종료 기법을 구현한다. 얼핏 보아도 훈련 세트의 정확도가 이전보다 훨씬 좋아진 것을 알 수 있다. 손실 그래프를 그려서 조기 종료가 잘 이루어졌는지 확인해 보겠다. 검증 세트에 대한 손실이 점차 감소하다가 정체되기 시작하고 훈련 세트에 대한 손실은 점점 더 낮아지고 있다. 이 그래프를 기반으로 아홉 번째 에포크를 최적으로 생각할..
이어서 케라스 합성 층부터 학습을 진행해 보겠다. 케라스 합성곱 층케라스 층은 모두 keras.layers 패키지 아래 클래스로 구현되어 있다. 합성곱 층도 마찬가지다. 특별히 입력 위를 (왼쪽에서 오른쪽으로, 위에서 아래로) 이동하는 합성곱은 Conv2D 클래스로 제공한다.Conv2D 클래스의 첫 번째 매개변수는 필터의 개수이다. kernel_size 매개변수는 필터에 사용할 커널의 크기를 지정한다. 필터의 개수와 커널의 크기는 반드시 지정해야 하는 매개변수이다.마지막으로 밀집층에서처럼 활성화 함수를 지정한다. 여기서는 렐루 함수를 선택했다. 합성곱 신경망의 정의는 무엇일까? 일반적으로 1개 이상의 합성곱 층을 쓴 인공 신경망을 합성곱 신경망이라고 부른다. 꼭 합성곱 층만 사용한 신경망을 합성곱 ..