본문 바로가기

2차원 합성곱7

37. [CNN기초] 다채널(multi channel) 다루기 이전 시간까지 1개 채널을 가진 이미지를 1개의 필터를 이용하여 특성을 추출한 후 학습을 진행하였다. 1개 채널을 가진 이미지로 만들기 위해 흑백이미지(Grayscale)로 만들어 학습시켰다. 하지만, 색깔도 엄연히 이미지의 특징에 해당된다. 예를 들어 아래 사진의 색맹분들 처럼 입력 데이터에 색깔 정보가 없다면, 인공신경망은 잘못된 학습을 할 가능성이 높다. 색상에 대한 정보를 어떻게 다루어야 하는지 CNN 시리즈 마지막 포스트로 이야기 하고자 한다. 1. 채널(channel) 채널이란 영상 또는 이미지의 색상에 대한 정보를 담은 객체라고 생각해 볼 수 있으며 일반적으로 아래와 같이 R, G, B, Alpha로 구성되어 있다. 아래 코드를 통해 직접 확인해 보자. import numpy as np im.. 2023. 2. 18.
36. [CNN기초] 원, 네모를 구별하는 CNN 만들기(실습) 저번시간에 합성곱으로 원과 네모를 구별하는 CNN을 어떻게 구성하고, 학습할 수 있는지 그림과 함께 알아보았다. 이번 시간에는 직접 코드를 작성해 보면서 가능한지 알아보자. 1. 준비하기 1) CNN 구성 Input → Conv2D → relu → Max Pooling → flatten → fc → sigmoid 2) 이미지 준비하기 아래의 파일을 다운받아 적절한 곳에 풀자. 28 × 28 이미지 train : 원 12개, 네모 12개 test : 원 2개, 네모 2개 3) train data 학습데이터를 불러오고 이미지를 출력해 보자. 이미지를 불러와서 Numpy 배열에 넣자. 주의할 점은 2가지가 있는데 (1) 흰색 바탕에 검은색 그림 → 반전(bitwise_not) 시켜 검은색 바탕에 흰색 그림으로.. 2023. 2. 1.
35. [CNN기초] 원, 네모를 구별하는 CNN 만들기(이론) 1. 문제제기 아래 예시와 같이 원과 네모를 구별하는 문제가 있다. 3살짜리 아이도 맞출 만큼 굉장히 쉬운 문제다. 실전을 들어가 보자. 3 × 3 크기의 합성곱 필터 1개를 이용하여 합성곱 → relu → 2 × 2 필터 Max pooling → 분류기 fc → sigmoid를 이용하여 원과 네모를 분류할 수 있을까? 데이터를 구해보자. 본인은 데이터를 구할 때 kaggle을 열심히 이용한다. 아래와 같이 용량도 적절한 데이터를 찾았다. CC0:Public Domain 라이센스도 맘에 든다. 149.2kB인 착한 용량도 마음에 든다. 이 데이터는 원(Circle) 100장, 네모(Square) 100장, 삼각형(Triangle) 100장으로 구성된 28 × 28 데이터인데, 필터 1개만 이용할 것이므로.. 2023. 1. 28.
33. [CNN기초] 이미지의 합성곱 훈련 -쉬운예제(실습)- 저번시간에 아래와 같이 3 × 3 이미지를 2 × 2 값으로 어떻게 훈련할 수 있는지 이야기하였다. 오늘은 이 내용을 코드로 작성해 보고자 한다. 예상하건데 필터는 1개이고, 선형분류기가 따로 없으므로 훈련 성과는 그리 좋을 것 같지 않다. 먼저 입력 Input과 목표 Target을 설정해 보자. numpy의 flipud와 fliplr을 이용하여 생성하면 편하다. import numpy as np import matplotlib.pyplot as plt x_sorce1 = np.array([[0.1, 0.2, 0.3], [0.4, 0.5, 0.6], [0.7, 0.8, 0.9]]) x_sorce2 = np.flipud(x_sorce1) # sorce1의 좌우반전 x_sorce3 = np.fliplr(x_.. 2023. 1. 21.