파이썬(Python)

인공지능이 그림을 보는 법? CNN, '피자 반죽'으로 완벽 이해하기!

달마-* 2026. 1. 29. 10:50
반응형

지금까지는 파이썬 기초나 데이터 분석을 다뤘다면, 이번 주부터는 진짜 **'딥러닝(Deep Learning)'**의 세계, 그중에서도 **이미지 처리(CNN)**를 본격적으로 배우기 시작했습니다.

오늘은 5주차 첫날(Day 1) 배운 내용 중, **"도대체 컴퓨터가 어떻게 강아지와 고양이 사진을 구별하는가?"**에 대한 핵심 원리인 CNN을 아주 쉽게 정리해 보려 합니다.

코드가 복잡해 보이지만, 원리만 알면 생각보다 재밌습니다. 저와 함께 가시죠!


1. AI에게 그림은 그냥 '숫자 폭탄'이다?

우리가 숫자 7이라고 쓴 손글씨를 보면, 우리는 직관적으로 "아, 7이네"라고 알지만 컴퓨터는 다릅니다. 컴퓨터에게 그림은 그저 가로 28칸 × 세로 28칸짜리 픽셀 점들의 집합일 뿐입니다.

옛날 방식의 AI는 이 그림을 한 줄로 길게 펴서(1번 픽셀부터 784번 픽셀까지) 공부했습니다. 그러다 보니 그림이 조금만 회전하거나 위치가 바뀌면 "어? 아까 그 7이 아닌데?" 하고 엉뚱한 대답을 했죠.

그래서 나온 게 바로 **CNN(Convolutional Neural Network, 합성곱 신경망)**입니다. 이름이 어렵죠? 그냥 **"사람처럼 눈으로 훑어보는 AI"**라고 생각하면 됩니다.


2. CNN의 핵심: 도장 찍기와 요약하기

CNN은 크게 두 가지 동작을 반복합니다.

① 특징 찾아내기 (Conv2d) 마치 그림 위에 작은 돋보기(필터)를 대고 쓱쓱 훑어보는 겁니다.

  • "어? 여기 동그라미가 있네?"
  • "여기 세로 선이 있네?" 이렇게 이미지의 **'특징(Feature)'**을 찾아내서 기록합니다.

② 핵심만 남기기 (Pooling) 특징을 찾았으면 이미지를 축소합니다.

  • "배경은 필요 없고, 여기 눈이랑 코가 있다는 게 중요해!" 중요한 정보만 남기고 사이즈를 줄여서 연산 속도를 높이는 거죠.

3. 오늘의 하이라이트: 3차원 큐브를 국수처럼 펴기?

강의를 듣다가 코드를 보면 가장 막히는 부분이 바로 이 부분입니다. Linear(64 * 3 * 3, 100)

"갑자기 64는 뭐고 3 곱하기 3은 어디서 튀어나온 거야?"

이걸 이해하면 오늘 공부는 끝입니다. 제가 **'피자 반죽'**으로 비유해 드릴게요.

  1. 반죽 (입력): 처음엔 28x28 크기의 얇은 피자 도우(이미지)가 들어옵니다.
  2. 접기 (Conv & Pool): 도우를 계속 반으로 접고 또 접습니다. 크기는 3x3cm로 아주 작아졌지만, 두께는 64겹으로 아주 두꺼워졌습니다. (이 64겹이 바로 AI가 찾아낸 64가지 특징입니다!)
  3. 펴기 (Flatten): 이제 "이게 숫자 7이야?"라고 판결을 내려야 하는데, 판결하는 판사(Linear 층)는 두꺼운 반죽을 못 봅니다. 그래서 이 3x3x64짜리 두꺼운 덩어리를 다시 길게 밀어서 한 줄짜리 국수 가닥으로 쫘악 펴줍니다.

계산해보면 3 x 3 x 64 = 576개의 데이터가 되죠. 이걸 펴주는 작업이 바로 코드 속의 view 혹은 Flatten이라는 과정입니다.


4. 결과: 정확도 96.8%!

이렇게 만든 AI 모델에게 수만 장의 손글씨 시험지(MNIST)를 풀게 했더니, 결과는? 무려 96.86%의 정답률을 기록했습니다.

처음엔 파이썬 코드 한 줄 짜기도 버거웠는데, 이제는 컴퓨터에게 "이게 무슨 그림인지 맞춰봐"라고 시키는 수준까지 왔네요.

물론 아직 갈 길이 멉니다. 하지만 **"복잡한 데이터를 접고(특징 추출), 펴서(판결), 맞춘다"**는 흐름만 이해해도 오늘 수업은 성공적인 것 같습니다.

다음엔 이 기술로 제 전공인 **'통신 설계 도면'**도 AI가 분석할 수 있을지 한번 연구해 봐야겠습니다.

[오늘의 요약]

  1. CNN은 사람처럼 그림의 '특징'을 본다.
  2. 이미지를 계속 겹쳐서(Conv) 작고 두껍게 만든다.
  3. 마지막엔 국수처럼 쫙 펴서(Flatten) 정답을 맞춘다.

오늘도 성장하는 달마였습니다!

반응형