기계학습 모델 구현 보고서

마스크 착용 여부 자동 분류

사진 160장으로 96.9%를 맞히는 모델을 만들었다.
그런데 이 점수는 누구의 얼굴에 대한 점수일까?

지도학습 · 분류 (이미지) 도구: 티처블머신 의료 · 공공행정 · 공중보건

기계학습 모델 구현 보고서를 어떻게 쓰는지 보여 주는 예시 프로젝트입니다. 문항을 푸는 순서와 근거를 대는 방식을 참고하되, 내용은 자신의 프로젝트로 채웁니다. 정확도와 확률 값은 수업에서 원리를 확인하려고 지어낸 값이며 실제 측정 결과가 아닙니다.

기계학습 모델 구현 보고서 예시 내려받기

이 페이지의 문항 1~8을 그대로 담은 보고서 파일입니다. 내려받아 작성 방법을 확인하고 자신의 프로젝트로 바꾸어 채웁니다.

아이디어에서 설계까지

사진 몇 장으로 인공지능을 가르칠 수 있을까?

규칙을 쓰는 대신 사진을 보여 주기로 한 이유를 따라가 봅시다.

보고서 여덟 문항은 이 여섯 단계를 따라간다 1 문제 정의 2 데이터 수집 3 데이터 전처리 4 유형· 알고리즘 선정 5 모델 생성 6 성능 평가 문항 1 · 2 문항 4 문항 3 문항 5 문항 6 · 7
문항 번호와 단계 번호가 나란히 가지 않는다. 유형과 알고리즘은 데이터를 모아 정리한 다음에 고르는 것이라 보고서에서는 문항 3이지만 실제 작업은 데이터 전처리를 마친 뒤에 한다.
1

어디서 아이디어를 얻었나 — 실생활의 불편함

건물 입구에서 사람이 서서 한 명씩 확인하는 모습을 자주 봤다. 단순히 보고 판단하는 일을 사람이 계속 서서 해야 한다는 것이 비효율적으로 보였다. 카메라가 대신 볼 수 있을지 궁금했다.

2

왜 기계학습인가 — 규칙으로 적을 수가 없다

코와 입 자리에 흰 천이 있으면 착용이라고 적어 보려 하면 곧 막힌다. 마스크는 흰색만 있는 것이 아니고, 얼굴 각도와 조명에 따라 모양이 전부 달라진다. 사람은 사진을 보면 바로 아는데, 그 기준을 글로 옮길 수가 없다.

3

왜 분류인가 — 답의 생김새가 정한다

얻고 싶은 답은 「착용」과 「미착용」 둘 중 하나다. 숫자를 맞히는 것이 아니고, 비슷한 사진끼리 묶는 것도 아니다. 얻고 싶은 답의 생김새가 방법을 정한다.

무엇을 풀 것인가

사람이 눈으로 하던 확인을 왜 자동으로 만들까?

인공지능이 손댈 수 있는 모양으로 문제를 다시 써 봅시다.

문항 1. 문제 정의

실생활이나 학문 분야에서 인공지능으로 해결하고자 하는 문제를 구체적으로 정의하시오. 어떤 상황에서 어떤 불편함 또는 필요가 발생하는지를 포함하여 서술하시오.

감염병이 번질 때 병원이나 학교 입구에서는 마스크 착용을 사람이 서서 확인한다. 사람이 계속 붙어 있어야 하고, 사람이 지쳐 있거나 줄이 길면 그냥 지나치기도 한다. 확인하는 사람과 확인받는 사람 사이에 실랑이가 생기기도 한다.

그래서 카메라에 비친 얼굴 사진을 넣으면 마스크를 썼는지 안 썼는지를 알려 주는 모델을 만들고자 한다. 사람 대신 막아 세우려는 것이 아니라, 화면에 표시해 스스로 확인하게 하는 용도다.

자기점검 체크리스트

  • ☑ 해결하고자 하는 문제가 실생활 또는 학문 분야와 연관되어 구체적으로 제시되어 있다.
  • ☑ 문제가 발생하는 상황(불편함·필요성)이 명확하게 서술되어 있다.

무엇이 들어가고 무엇이 나오는가

모델이 내놓는 것은 「착용」일까, 숫자일까?

입력과 출력을 못 박으면 만들 것의 윤곽이 잡힙니다.

문항 2. 모델 설명 (입력 → 출력)

구현하려는 인공지능 모델을 설명하시오. 이 모델은 어떤 데이터를 입력받아, 어떤 결과를 출력하는가? 입력과 출력을 중심으로 모델의 역할을 구체적으로 서술하시오.

  • ■ 입력: 얼굴이 담긴 사진 한 장 (웹캠 화면, 224×224 픽셀로 줄여서 씀)
  • ■ 출력: 두 클래스의 확률 — 착용 몇 %, 미착용 몇 % (합이 100%)

모델이 내놓는 것은 「착용」이라는 말이 아니라 두 개의 확률이다. 화면에 「착용」이라고 띄우는 것은 둘 중 큰 쪽을 골라 보여 주기로 사람이 정한 것이다. 이 구별을 해 두면 「맞히긴 했는데 61%였다」 같은 결과를 제대로 읽을 수 있다.

모델이 내놓는 것은 확률 두 개이고, 고르는 것은 사람이 정한 규칙이다 입력 사진 한 장 224 × 224 픽셀 학습된 모델 착용 61% 미착용 39% 사람이 정한 규칙 큰 쪽을 보여 준다 → 착용 61%도 39%도 화면에는 남지 않는다. 남는 것은 '착용' 한 낱말뿐이다

자기점검 체크리스트

  • ☑ 만들고자 하는 모델의 입력 데이터(종류·형태)가 명확히 제시되어 있다.
  • ☑ 모델이 출력하는 결과(레이블·수치·군집 등)가 구체적으로 서술되어 있다.
  • ☑ 입력과 출력을 통해 모델의 역할이 명확하게 드러난다.

어떤 방법으로 풀 것인가

사진을 다루는데도 표 데이터와 같은 질문으로 정해질까?

두 번의 질문으로 유형이 정해지고, 정해진 유형이 도구를 정합니다.

문항 3. 기계학습 유형 및 구현 도구 선택

위에서 구상한 모델을 구현하기 위해 아래 ①, ② 순서대로 선택하고 그 이유를 서술하시오. ① 기계학습 유형: 지도학습과 비지도학습 중 이 모델에 적합한 유형을 선택하고, 분류·군집·예측 등의 개념을 활용하여 그 이유를 설명하시오. ② 구현 도구: ①에서 선택한 유형을 구현하기 위해 티처블머신·코랩·오렌지 중 어떤 도구를 선택했는지 밝히고, 그 이유를 서술하시오.

유형은 취향이 아니라 두 번의 질문으로 정해진다 데이터에 정답(레이블)이 함께 들어 있는가? 아니오 예 비지도학습 군집 지도학습 출력이 숫자인가, 범주인가? 숫자 범주 예측 (회귀) 분류 ↑ 이 프로젝트
사진이든 표든 이 나무는 같다. 데이터의 생김새가 아니라 정답이 붙어 있는지와 내놓을 답의 생김새가 유형을 정한다.

① 기계학습 유형: 지도학습 — 분류 (이미지 분류)

사진마다 「착용」 또는 「미착용」이라는 이름을 내가 붙여서 학습시킨다. 정답이 붙어 있으므로 지도학습이다. 그리고 내놓아야 할 답이 두 개의 범주이므로, 수치를 맞히는 예측이 아니라 범주 하나를 집는 분류를 쓴다.

다른 방법이 아닌 이유: 예측(회귀)로 하면 「착용 정도 0.7」 같은 숫자가 나오는데, 입구에서 필요한 답은 썼는지 안 썼는지이지 정도가 아니다. 군집은 정답을 쓰지 않고 비슷한 사진끼리 묶는 방법이라, 어느 묶음이 착용인지를 모델이 알려 주지 못한다.

② 구현 도구: 티처블머신

사진을 다루는 도구가 필요한데, 티처블머신은 웹캠으로 찍으면서 바로 클래스에 넣을 수 있고 학습이 끝나면 그 자리에서 웹캠으로 확인할 수 있다. 확률 막대가 실시간으로 움직이므로 어떤 상황에서 모델이 흔들리는지 눈으로 보인다. 문항 6의 테스트는 이 막대를 보며 진행했다. 오렌지는 표 데이터를 다루는 도구라 사진에는 맞지 않고, 코랩은 같은 일을 할 수 있지만 코드를 직접 써야 해서 이번 목적에는 과하다.

자기점검 체크리스트

  • ☑ 지도학습 또는 비지도학습 중 하나를 명확히 선택하였다.
  • ☑ 분류·군집·예측 등의 개념을 활용하여 유형 선택 이유가 논리적으로 서술되어 있다.
  • ☑ 구현 도구를 선택하고 그 이유가 기계학습 유형과 연결되어 설명되어 있다.

무엇으로 배우게 할 것인가

내 얼굴만 찍어도 괜찮을까?

모아 둔 사진의 폭이 곧 모델이 알아보는 폭이 됩니다.

문항 4. 데이터 설명

모델 학습에 사용한 데이터를 설명하시오. 데이터의 출처·유형·수량·특성 등을 작성하고, 필요한 경우 스크린샷을 첨부하시오.

  • • 출처: 티처블머신 웹캠으로 직접 촬영 (전부 내 얼굴 한 사람)
  • • 유형: 이미지 데이터 (224×224 픽셀)
  • • 수량: 클래스별 80장 / 총 160장
  • • 클래스 1 — 착용(80장): 코와 입을 모두 덮어 쓴 상태
  • • 클래스 2 — 미착용(80장): 마스크 없이 얼굴이 드러난 상태
  • • 다양하게 만든 것: 조명 3가지(밝음·보통·어두움), 얼굴 각도 3가지(정면·좌 45°·우 45°), 마스크 색 3가지
  • • 다양하게 만들지 못한 것: 얼굴은 한 사람뿐이다. 이것이 이 데이터의 가장 큰 한계다.

실제 수행평가 때는 여기에 티처블머신 클래스별 이미지 업로드 화면 스크린샷을 붙입니다.

얼굴 사진을 모을 때 반드시 지켜야 하는 것

  • 남의 얼굴은 함부로 찍지 않는다. 얼굴은 그 사람을 특정하는 정보다. 찍으려면 무엇에 쓸지 말하고 동의를 받아야 하고, 실습이 끝나면 지운다. 그래서 이 프로젝트는 내 얼굴만 썼다.
  • 인터넷에서 얼굴 사진을 내려받아 쓰지 않는다. 검색으로 나오는 사진에는 저작권과 초상권이 함께 걸려 있다. 「검색하면 나오니까 써도 된다」는 성립하지 않는다. 얼굴이 필요하면 직접 찍거나, 그 용도로 공개된 데이터셋을 이용 조건을 확인하고 쓴다.
  • 클래스마다 장수를 맞춘다. 한쪽이 많으면 모델이 많은 쪽으로 기운다. 여기서는 80장씩 같게 했다.
  • 모으지 못한 다양성이 곧 모델의 구멍이 된다. 조명과 각도는 바꿔 가며 찍었지만 사람은 바꾸지 못했다. 이 구멍이 문항 6에서 그대로 드러난다.

자기점검 체크리스트

  • ☑ 데이터의 출처(직접 촬영·공개 데이터셋·직접 수집 등)가 명시되어 있다.
  • ☑ 데이터의 유형(이미지·텍스트·수치 등)과 수량이 구체적으로 서술되어 있다.
  • ☑ 학습에 사용된 데이터 화면 또는 데이터 목록 스크린샷이 첨부되어 있다.

모델은 무엇을 배웠는가

정확도 96.9%면 다 된 걸까?

높은 점수가 어디에서 나온 점수인지를 봅시다.

문항 5. 학습 결과

수집한 데이터로 모델을 학습시킨 결과를 서술하시오. 학습이 완료된 화면 또는 학습 결과를 스크린샷으로 첨부하고, 수치나 지표를 포함하여 결과의 의미를 간략히 설명하시오.

이 결과를 직접 만들어 보려면 — 티처블머신에서 누르는 순서

  1. 이미지 프로젝트를 고르고 표준 이미지 모델을 연다.
  2. 클래스 이름을 착용과 미착용으로 바꾼다. 이름이 곧 모델이 내놓을 답이므로 알아볼 수 있게 적는다.
  3. 웹캠 버튼을 누른 채 클래스마다 80장씩 찍는다. 찍는 동안 조명·각도·마스크 색을 계속 바꾼다. 가만히 있으면 같은 사진 80장이 된다.
  4. Advanced를 열어 Epochs·배치 크기·학습률을 확인하고 Train Model을 누른다.
  5. 미리보기에서 웹캠을 켜고 확률 막대를 본다. 이때 학습에 쓰지 않은 상황을 일부러 만들어 본다 — 마스크를 내려 보거나, 다른 사람에게 부탁해 본다. 여기서 나오는 것이 문항 6에 쓸 결과다.

이 상자는 보고서에 쓰는 답이 아니라 따라 해 보라는 안내다.

  • 학습 설정: Epochs 50 / 배치 크기 16 / 학습률 0.001 (티처블머신 기본값 그대로)
  • 160장 중 20%인 32장을 시험용으로 떼어 놓고 나머지로 학습했다.
  • 시험 결과: 32장 중 31장 정답 — 정확도 96.9% (착용 16장 전부 정답, 미착용 16장 중 15장 정답)
  • 학습이 진행될수록 손실이 줄어들어 안정적으로 끝났다.
  • 다만 이 32장도 전부 내 얼굴이다. 그러므로 96.9%는 「내 얼굴을, 내가 찍은 조명과 각도에서 알아보는 정확도」다. 다른 사람에 대한 정확도는 이 숫자로 알 수 없다.

실제 수행평가 때는 여기에 티처블머신 학습 완료 화면(정확도·손실 그래프) 스크린샷을 붙입니다.

정확도가 「어디에서」 나온 숫자인지 검토하는 법

시험용으로 떼어 둔 32장은 학습에 쓰이지 않았으니, 정확도 96.9%는 정직하게 측정한 값이 맞다. 문제는 그 32장이 학습에 쓴 128장과 같은 곳에서 나왔다는 점이다 — 같은 사람, 같은 방, 같은 웹캠.

모델을 실제로 쓸 곳은 여러 사람이 지나가는 입구다. 시험 데이터가 쓸 곳과 닮지 않았다면, 높은 점수는 그 쓸 곳에 대해 아무것도 보장하지 않는다.

그래서 정확도를 볼 때는 숫자보다 먼저 「무엇으로 측정했는가」를 본다. 이것을 확인하지 않으면 96.9%가 그대로 「거의 완벽하다」로 읽힌다.

같은 모델인데 확신의 크기가 다르다 학습한 상황 — 정상 착용 착용 98% 미착용 2% 한쪽으로 크게 기운다 학습에 없던 상황 — 턱에 걸침 착용 61% 미착용 39% 거의 반반인데도 답은 내놓는다
모델은 「모르겠다」고 말하지 않는다. 61%든 98%든 화면에는 똑같이 「착용」이라고 뜬다. 그리고 이 두 얼굴은 모두 학습에 쓴 그 얼굴이다 — 다른 사람은 아예 들어 있지 않았다.

자기점검 체크리스트

  • ☑ 학습이 완료된 모델 화면 또는 학습 결과 스크린샷이 첨부되어 있다.
  • ☑ 모델의 학습 결과를 확인할 수 있는 수치나 지표가 언급되어 있다.
  • ☑ 학습 결과의 의미(모델이 잘 학습되었는지 여부 등)가 서술되어 있다.

새로운 값을 넣으면 맞히는가

마스크를 턱에 걸치면 착용일까, 미착용일까?

학습에 없던 상황 두 가지를 물어보고 결과를 봅시다.

문항 6. 테스트 및 결과 분석

학습된 모델에 새로운 데이터를 직접 입력하여 성능을 테스트하시오. 테스트 전 예상했던 결과와 실제 결과를 비교하고, 차이가 발생했다면 그 원인을 분석하시오.

■ 테스트 1 — 학습한 상황 (내 얼굴, 정상 착용)

  • 예상: 착용으로 분류 — 실제 출력: 착용 98% / 미착용 2%
  • 예상대로 맞았고, 확신도 컸다.

■ 테스트 2 — 학습에 없던 상황 (마스크를 턱에 걸침)

  • 예상: 코와 입이 드러났으니 미착용으로 나오기를 기대했다.
  • 실제 출력: 착용 61% / 미착용 39% → 화면에는 「착용」
  • 예상과 반대로 나왔다.

■ 테스트 3 — 학습에 없던 사람 (다른 사람이 정상 착용)

  • 예상: 정상 착용이니 테스트 1처럼 높은 확률로 착용이 나오기를 기대했다.
  • 실제 출력: 착용 54% / 미착용 46% → 화면에는 「착용」
  • 맞히기는 했지만 거의 찍은 것에 가깝다. 조명이 조금만 달라도 뒤집힐 자리다.

■ 분석

두 실패의 원인이 서로 다르다.

테스트 2는 클래스를 둘로 나눈 것이 원인이다. 턱에 걸친 상태는 착용도 미착용도 아닌데, 모델에게는 그 둘밖에 없다. 없는 답은 고를 수 없으므로 모델은 둘 중 덜 어색한 쪽을 골랐다. 마스크가 화면에 보인다는 점에서 착용 쪽에 가깝게 판단한 것으로 보인다.

테스트 3은 학습 데이터에 사람이 하나뿐이었던 것이 원인이다. 모델은 「마스크가 있느냐」만 배운 것이 아니라 「내 얼굴에 마스크가 있느냐」를 함께 배웠다. 얼굴이 바뀌자 근거의 절반이 사라진 셈이다.

정확도 96.9%는 두 실패를 하나도 예고하지 못했다. 시험용 32장이 학습 사진과 같은 곳에서 나왔기 때문이다. 모델을 쓸 곳과 닮은 데이터로 시험해 보기 전까지, 높은 점수는 아직 아무 약속도 아니다.

자기점검 체크리스트

  • ☑ 학습에 사용하지 않은 새로운 데이터로 테스트를 수행하였다.
  • ☑ 테스트 전 예상 결과와 실제 결과가 모두 서술되어 있다.
  • ☑ 예상과 실제 사이에 차이가 있다면 그 원인이 분석되어 있다. (차이가 없으면 이유 서술)

어디에 쓰고 무엇을 고칠 것인가

얼굴을 찍는 모델은 어디까지 써도 될까?

쓸모와 한계를 나란히 놓고, 개선해도 남는 어려움까지 봅시다.

문항 7. 기대 효과 및 개선 사항

기대 효과: 이 모델을 자신의 관심 분야(예: 의료·환경·스포츠 등)에 적용한다면 어떤 효과를 기대할 수 있는지 서술하시오. 개선 사항: 현재 모델의 한계를 바탕으로, 성능을 향상시키기 위해 필요한 개선사항을 구체적으로 서술하시오.

기대 효과

관심 분야: 의료 · 공중보건

입구 화면에 결과를 띄우면 스스로 확인하고 고쳐 쓸 수 있다. 사람이 지적하면 실랑이가 되기 쉬운 일을 기계가 조용히 알려 주는 쪽으로 바꿀 수 있다.

확률까지 함께 띄우면 모델이 확신하지 못하는 상황이 언제인지도 함께 보인다. 그 자리는 사람이 보면 된다.

개선 사항

한계: 학습한 얼굴이 한 사람뿐이라 다른 사람에게는 확신이 크게 떨어진다. 클래스가 둘뿐이라 중간 상태를 표현할 수 없다.

개선 방향: ① 동의를 받은 여러 사람의 얼굴을 나이·성별·안경 여부를 고루 넣어 다시 학습한다. ② 「코가 나옴」을 세 번째 클래스로 추가한다. ③ 확률이 70% 아래면 「확인 필요」로 표시하고 답을 단정하지 않는다. 이 기준이면 턱에 내린 마스크(61%)도, 친구 얼굴(54%)도 「착용」이 아니라 「확인 필요」로 뜬다.

개선해도 남는 어려움

정확하게 만들려면 더 많은 얼굴이 필요한데, 얼굴을 모으는 일 자체가 조심스럽다. 여러 사람의 얼굴을 넣을수록 모델은 좋아지지만, 그만큼 사람을 특정할 수 있는 사진이 쌓인다. 동의를 받는다 해도 모은 사진을 언제까지 두고 누가 볼 수 있는지가 남는다. 잘 만들기 위한 일과 덜 모으기 위한 일이 반대 방향을 가리킨다.

쓰는 방식에 따라 성격이 달라진다. 화면에 띄워 스스로 고치게 하는 것과, 문을 잠가 사람을 막는 것은 같은 모델로도 할 수 있다. 후자라면 틀렸을 때 그 사람이 치르는 대가가 커진다 — 특히 학습에 없던 얼굴일수록 틀리기 쉬운데, 그런 사람이 반복해서 막히면 그것은 성능 문제가 아니라 누가 불이익을 받느냐의 문제가 된다.

그리고 카메라가 켜져 있다는 사실 자체가 사람의 행동을 바꾼다. 지켜보는 장치를 늘려 얻는 것과 잃는 것을 비교하는 일은 정확도를 올려서 풀리지 않는다.

자기점검 체크리스트

  • ☑ 자신의 관심 분야가 명시되고, 모델 적용 시 기대되는 효과가 구체적으로 서술되어 있다.
  • ☑ 현재 모델의 한계 또는 부족한 점이 언급되어 있다.
  • ☑ 성능 향상을 위한 개선사항(데이터 확충·모델 변경·파라미터 조정 등)이 제시되어 있다.

무엇이 남았는가

만들기 전과 후, 무엇이 달라졌을까?

점수가 아니라 생각의 변화를 적는 자리입니다.

문항 8. 소감

기계학습 모델을 직접 구현하는 과정에서 달라진 생각, 어려웠던 점, 새롭게 알게 된 것, 또는 느낀 점을 자유롭게 서술하시오.

사진 160장을 찍고 버튼 하나를 누르니 모델이 만들어지는 것이 신기했다. 코드를 한 줄도 쓰지 않았는데 웹캠 앞에서 확률 막대가 실시간으로 움직였다.

96.9%가 나왔을 때는 다 됐다고 생각했다. 그런데 마스크를 턱에 내렸더니 「착용 61%」가 떴고, 친구에게 부탁해 보니 54%밖에 나오지 않았다. 두 번 다 화면에는 똑같이 「착용」이라고만 떴다는 것이 가장 무서웠다. 모델은 헷갈릴 때도 헷갈린다고 말해 주지 않는다.

돌이켜 보니 96.9%는 내 얼굴을 알아보는 점수였다. 시험용으로 떼어 둔 32장도 결국 내가 같은 방에서 찍은 사진이었다. 어떤 데이터로 평가했는지를 모르면 점수는 아무 뜻이 없다는 걸 이번에 배웠다.

얼굴을 다루는 모델이라 마음에 걸리는 것도 있었다. 친구 얼굴을 찍을 때 먼저 물어봐야 했고, 실습이 끝나고 지웠다. 잘 만들려면 더 많은 얼굴이 필요한데 그게 조심스럽다는 것이 쉽게 풀리지 않는 문제라고 느꼈다.

자기점검 체크리스트

  • ☑ 기계학습 구현 과정에서 새롭게 알게 된 것 또는 달라진 생각이 포함되어 있다.
  • ☑ 자신의 경험을 바탕으로 진솔하게 작성되어 있다.