1. Teachable Machine이란?
1-1. 개념
1-2. 사용된 기술
1-3. 어떤 프로젝트를 만들 수 있을까?
2. 사용법
2-1. 사이트 접속
2-2. 샘플 생성
2-3. 학습
2-4. 테스트
2-5. 모델 저장
3. 인식률이 낮다면...
3-1. 학습 설정
3-2. 입력 데이터 확인
3-3. Data Augmentation
1. Teachable Machine
1-1. 개념
Teachable Machine은 나처럼 머신러닝의 '머'자도 모르는 사람도 쉽게 인공지능을 구현할 수 있는 서비스이다.
대체 어느 회사에서 이런 서비스를 개발했을까 했더니 구글이었다. (갓구글... 당신은 도덕책...)
코드 한 줄 작성할 필요 없이 알아서 모델을 생성해준다.
게다가 Teachable Machine은 굉장히 빠른 속도로 학습하고 데이터의 양이 충분하지 않아도 원하는 결과를 얻을 수 있다는 장점이 있다.
이게 가능한 이유를 바로 다음 목차에서 알아보자
(나는 그런거 궁금하지 않고 사용법을 알려줘! 라면... [목차 2]로 도망가면 된다)
1-2. 사용된 기술
티쳐블 머신은 대량의 학습 데이터를 MobileNet으로 사전 훈련 모델을 생성하고,
이 모델의 마지막 일부 레이어만 수정해 전이 학습을 진행하는 방식을 사용한다.
롸?
말이 너무 어려우니 비전공자도 알아들을 수 있도록 쉽게 말해보자.
사실, 인공지능을 학습시키려면 고성능의 컴퓨터가 필요하다.
위 사진은 알파고를 학습시키기 위해 사용된 컴퓨터이다.
21세기에 이렇게 무지막지하게 큰 컴퓨터가 웬말..?
바둑을 두기 위해 사용되는 컴퓨터만 해도 이 정도인데 자동차나 스마트폰 같은 환경에서 퍼포먼스를 낸다는 건 꿈도 꾸지 못할 일이다.
그래서 나온 것이 바로 MobileNet이다.
인공지능에 대해서 자세히 설명하자면 정말 끝도 없기 때문에..
컴퓨터 성능이 제한되거나 배터리 퍼포먼스가 중요한 곳에서 사용하기 위해 설계된 CCN구조가 MobileNet이라는 것만
알아두고 넘어가자.
아무튼!
Teachable Machine은 MobileNet을 사용하기 때문에 스마트폰에서도 사용할 수 있는 것이다.
또한 티쳐블 머신은 전이 학습 기술을 사용한다.
사전에 이미 학습되어 있는 모델에 사용자가 추가한 데이터 일부를 학습시켜 원하는 모델을 만드는 기술이다.
쉽게 말하면 구글이 이미 만들어 놓은 모델이 있고 우리는 거기에 숟가락만 얻는 (...) 느낌이다.
이 기술을 사용하면 사용자는 대량의 데이터도, 아주 긴 학습시간도 필요 없다. 구글이 이미 학습시켜놨으니까!
그렇기 때문에 전이 학습은 방대한 데이터가 없어도 우수한 결과를 얻기 위해 사용되고
또한, 데이터의 양이 부족한 개발도상국을 위해서도 쓰이는 기술이라고 한다.
1-3. 어떤 프로젝트를 만들 수 있을까?
티쳐블 머신에서 몇 가지 서비스를 소개하고 있다.
우선 시리얼과 마시멜로우를 구분하는 귀염뽀짝한 기계를 만들기도 하고
화살표 모양을 인식해서 움직이는 스네이크 게임(?)도 만들고
얼굴 동작을 인식해 의사소통을 하는 프로그램을 만들기도 한다.
또, 인터넷에 올라와 있는 토이 프로젝트로는
마스크 썼는지 안 썼는지 구분하는 프로그램,
닮은 연예인 찾기 프로그램,
가위 바위 보 인식하는 프로그램 등 여러 분야에 쓰이고 있다.
나는 팀원들이랑 수어(수화) 동작을 인식하는 프로그램을 만들었는데
실제 상용제품에서 쓰기에는 다소 부족한 부분이 있지만
토이 프로젝트로 쓰기에는 괜찮은 결과를 보여준다고 생각한다.
2. 사용법
2-1. 사이트 접속
우선 사이트에 들어가서 시작하기를 눌러주자.
사물을 인식하고 싶다면 이미지 프로젝트를
음성을 인식하고 싶다면 오디오 프로젝트를
동작을 인식하고 싶다면 포즈 프로젝트를 선택하면 된다.
컴퓨터나 스마트폰에서 사용할 거면(일반적인 경우) 표준 이미지 모델 선택하면 된다.
2-2. 샘플 생성
이제 이런 화면이 보일 것이다.
Class 1의 웹캠 버튼을 클릭해서 카메라를 켜주자.
카메라가 켜졌다.
쁘이 ‘^’ V
한 손으로는 길게 눌러서 녹화하기 버튼을 누르면서
다른 한 손으로는 인식하고 싶은 동작을 카메라로 비춰준다.
스마트폰으로 연사 찍듯이 이미지 샘플들이 좌자자자자자작 찍힐 것이다.
이때 가만히 있는 게 아니라 이리저리 움직여도 보고 살짝 손도 굽혀보면서
내가 어떤 동작까지 브이로 인식할 건지 샘플을 만드는 것이다.
(이 샘플들로 조금 있다가 학습을 시킬 거임)
클래스 이름을 수정해두는 게 아무래도 보기 좋을 것이다.
난 브이랑 주먹으로 바꾸었다.
그리고 더 추가하고 싶은 클래스가 있으면 클래스 추가를 눌러서 추가하면 된다.
2-3. 학습
원하는 클래스를 다 만들고 샘플을 다 준비했다면 이제 학습을 시키면 된다.
버튼 하나만 누르면 뚝딱... 세상에 😲
2-4. 테스트
학습이 완료되면 위 사진처럼 캠으로 어떤 동작을 하면
그게 어떤 클래스와 가장 유사한지 퍼센트로 나타낸다.
위 사진에서는 엄지 척! 하는 동작이 히읗일 확률이 100%라고 알려주고 있다.
손동작에 따라 실시간으로 확률이 샤샤샥 바뀐다.
테스트해본 결과가 만족스럽다면 다음 단계로 넘어가면 된다.
2-5. 모델 저장
모델 내보내기를 클릭해주자
웹에서 사용할 거라면 Tensorflow.js를
앱에서 사용할 거라면 Tensorflow Lite 탭을 클릭하고
모델 다운로드 버튼을 클릭하면 파일이 저장된다.
학습 데이터 양이 많다거나 epoch가 많으면 파일 다운로드 창이 뜨는데 시간이 꽤 걸리니 기다려야 한다.
여기서부터는 AI에 흥미가 더 있어서 읽어보고 싶다거나
인식률이 낮아서 어떻게 해야 할지 모르겠는 분만 읽으세요.
매우 복잡하니... ☠️
3. 인식률이 낮다면...
3-1. 학습 설정
[목차 2-2] 단계에서 고급을 클릭하면 이와 같은 설정들이 나온다.
에포크, 배치 크기, 학습률을 조절할 수 있는데 각 설정이 무엇을 의미하는지는 우측에 있는 물음표에 커서를 대면 설명이 나온다.
문제는 저 값을 얼마큼 조절해야 인식률을 높일 수 있느냐인데
안타깝게도 이 질문에 정답은 없다.
엥? 학습률을 높이면 좋은 거 아니에요?라고 생각할 수 있지만. 아니다.
엥? 학습을 많이 하면 인식률이 올라가겠죠. 블로그 주인장 뭘 모르네 ㅋㅋㄹㅃㅃ라고 생각할 수 있지만 아니다.
자, 여기에 그래프가 총 3개가 있다.
그래프에는 O와 X가 무작위로 들어가 있는데
우리는 인공지능을 학습시켜 O와 X를 분리할 수 있는 가장 적절한 선, 즉 결정 경계(선)이라고 하는 놈을 찾아낼 것이다.
그래프 1은 학습이 덜 된 상태이다.
선이 굉장히 심플하며 O와 X를 대충 구분할 수 있긴 하지만
구분되지 않는 O와 X들이 몇몇 보인다.
그래프 3은 학습이 너무 많이 된 상태이다.
선이 아주 꼬불꼬불 후루루짭짭 맛좋은라면 마냥 꼬여있다.
"선을 기준으로 O와 X를 확실히 나누고 있는데 뭐가 문제임?" 이렇게 생각할 수도 있다.
그렇다. 지금 그래프 3은 O와 X를 100%의 확률로 구분하고 있다.
지금 저 데이터를 주고 나서 구분하라고 했을 때는 그렇다.
근데 만약 다른 데이터를 주면? 어쩌면 그래프 1보다 더 좋지 않은 결과를 보여줄 수도 있다.
쉽게 말하면 대학교에서 시험을 보려고 족보를 달달 외웠다고 하자.
근데 시험이 족보랑 완전 똑같이 나왔네? 그럼 100점 맞는 건 당연하다.
근데 시험이 족보랑 다르게 나왔다? 그러면 와장창 틀리게 되는 것이다.
우리는 이 현상을 과적합이라고 부른다.
그래프 2를 보자.
학습을 너무 안 하지도 않고 너무 많이 하지도 않은 가장 이상적인 선을 보여주고 있다.
즉, 우리는 설정 값을 조금씩 변경해가며 가장 이상적인 결정 경계(선)를 찾아야 한다.
그리고 여기에 정답은 없다.
일일이 값을 변경해가며 가장 적절한 설정 값을 찾아서 우수한 결과를 도출해야 하는 게 이쪽 분야의 일이다...
(AI 전공자님들 파이팅...)
3-2. 입력 데이터 확인
- 전처리
티쳐블 머신이 알아서 뚝딱뚝딱 학습시키고 만들어서 우리는 모르지만
사실 학습 단계에는 전처리라는 과정이 있다.
데이터를 분석하기 '전'에 데이터를 '처리'한다고 해서 전처리이다.
그렇다면 무슨 처리를 한다는 것일까?
예를 들어 숫자 글씨가 데이터로 들어온다고 해보자.
누군가는 기울어지게 쓸 것이고, 누군가는 대빵 크게, 누군가는 엄청 작게 쓸 수도 있다.
그렇다면 과연 이 데이터들을 분석하고 비교하는 것이 가능할까? 힘들 것이다.
그래서 이 데이터들의 크기를 비슷하게 만든다든지, 각도를 비슷하게 만든다든지 등의 처리가 필요하다.
자, 그래서 이걸 왜 설명했느냐
티쳐블 머신이 사실 이 전처리 과정을 얼마나 잘해주는지는 잘 모르겠다. 검색해봐도 안 나오고...
그렇다면 애초에 우리가 분석하고 비교하기 좋은 데이터를 넣어주는 편이 인식률 향상에 도움이 될 것이다.
(다음 목차에서 설명하겠지만 항상 도움이 되는 것은 아니다. 상황을 봐가며 해야함)
- 데이터 분포
예를 들어 데이터가 10억 개가 있다고 하자.
이 데이터를 전부 다 분석하는 것이 가능할까?
아마 알파고도 혀를 내두르고 갈 것이다. (아닌가... 되나...? 암튼)
그래서 필요한 게 바로 샘플링이다.
와닿지 않을 테니 실생활에 빗대어 이해해보자.
우리는 선거철이 되면 겁나 귀찮은 여론조사 전화가 온다.
과연 이 사람들은 전국에 있는 모든 대한민국 사람들에게 전화를 걸어 데이터를 수집하고 선거 결과를 예측하는 것일까?
Nope! 일부 사람들을 조사해 결과를 예측한다.
일부 데이터를 표본으로 빼오는 행위를 샘플링이라고 한다.
자, 근데 샘플링한 데이터로 결과를 예측할 때 중요한 사실이 있다.
이 데이터가 모집단을 대변할 수 있는 데이터인가?
만약 특정 지역 사람들에게만 여론조사를 하면 결과를 제대로 예측할 수 있을까? 그렇지 않다.
그렇기 때문에 샘플링을 어떻게 하느냐도 결과에 중요한 영향을 미친다.
인식률이 낮다면 샘플링이 제대로 되었는지를 확인해보자.
3-3. Data Augmentation
데이터 증강이라고 불리는 놈이다.
퍼포먼스를 높이고 과적합 문제를 해결하기 위한 목적으로 사용된다.
개발자가 준비한 데이터를 기울이고, 뒤집고, 자르면서 어느 정도 노이즈가 있는 데이터들을 만들어 낸다.
그리고 기존에 준비한 데이터와 변형시킨 데이터를 같이 학습시키는 방법이다.
"아니 [목차 3-2]에서는 노이즈를 없애기 위해 전처리를 한다면서 이번엔 왜 노이즈를 만드는 거임??"
공부를 하다가 이런 의문이 생겨 주변에 인공지능을 전공한 친구들에게 자문을 구했다.
결론은 케이스 바이 케이스!
일단 프로젝트마다 다르다.
배경이 많이 들어가는 이미지를 인식한다고 하면 일부러 노이즈를 줘서 인식률을 높이기도 하고
깔끔한 환경에서 인식한다고 하면 노이즈 없는 데이터가 인식률을 높이는데 도움이 된다.
그리고 노이즈를 주는 정도도 케이스 바이 케이스이다.
햄스터 사진을 기울여보자. 우린 이걸 햄스터 사진이라 할 수 있을까? 음.. 있겠지
그럼 추가로 사진을 뒤집고 비틀어보자. 햄스터 사진인가? 음... 애매하지만... 맞을지도..?
그럼 추가로 색을 변형시키고 네모 도형을 넣어서 일부를 가려보자. 여전히 햄스터 사진인가? 음....?
이렇듯 노이즈를 주는 적당한 정도를 알아내는 것도 필요하다.
즉, 전처리는 노이즈를 없애고 Data Augmentation은 노이즈를 만들어 내는데
가장 최적의 결과를 얻기 위한 적당한 정도를 알아내기 위해 수없이 많은 테스트를 거쳐야 한다.
음, 그리고 Data Augmentation은 보유 중인 데이터 개수가 적을 때 데이터 수를 늘리는 역할도 한다.
이는 [목차 3-1]에서 설명한 과적합을 해결하는 데 도움을 주기도 한다.
분량 조절 실패로
생성한 모델 파일을 앱에서 쓰는 방법은
다음 포스팅에서... 😓
💡 느낀 점
- 인공지능은 정말 빡센 학문인 것 같다. 함부로 발 들이지 않길 잘했다...
- 사실 단순히 사용법만 배울 거면 10분도 안 걸리는데 그 안에 숨은 의미를 이해하는 데 시간이 오래 걸리는 것 같다.
- 친구가 말해준 것처럼 AI는 데이터 셋을 구하고 전처리하는 과정의 비중이 굉장히 큰 것 같다. 그 뒤로는 테스트 또 테스트의 반복...
- Teachable Machine에 30개의 클래스, 각 1000장의 사진을 넣어서 학습을 시켜봤는데 브라우저가 굉장히 버거워하고 강제 종료될락 말락 하는 것 보니 티쳐블머신은 아직까지는 간단한 분류 프로그램을 제작하는 정도로 적당하지 싶다.
📘 참고한 자료
- MobileNet이란? - Easy is Perfect
- [논문분석] A survey on image Data Augmentation for Deep Learning - 은연일체
- 전이학습
- 임베디드 티쳐블머신 - 가래들공방
- 구글이 투자하는 전이학습 - 조선비즈
'오늘은 뭘 배울까? > etc' 카테고리의 다른 글
Get과 Post의 차이가 무엇인가요? (4) | 2022.06.21 |
---|---|
맥린이가 알려주는 맥 사용법 및 설정 (6) | 2021.05.03 |
[Heroku] 헤로쿠 가입/설치/사용법 with 파이썬 (8) | 2021.02.13 |
자바로 셀레니움(Selenium)을 써보자 :: 크롤링 (6) | 2020.12.25 |
API란 대체 뭘까? (0) | 2020.12.21 |
댓글