📝 서론
1학년 2학기, 아마 22년 11월 쯤? 신입생 세미나 B라는 과목에서 소논문 쓰기라는 과제가 있었다.
소논문을 작성함에 있어서 교수님께서 Teachable Machine을 활용하는 방향을 제시해 주셨다.
이때 처음으로 Python을 활용해 구글에서 Image Crawling을 하는 방법을 익혔으며,
직접 분류한 자료를 바탕으로 Teachable Machine을 학습시켜보았다.
이 글에서는 소논문을 작성한 과정에 대해 살펴보고자 한다.
우선 본론에 앞서 이 글에서 다룰 Teachable Machine과 Image Crawling에 대해 알아보자.
1️⃣ Teachable Machine이란?
구글에서 만든 웹기반의 노코드 인공지능 학습 툴이다.
사용자가 직접 데이터를 제공하여 모델을 교육하고, 그 모델을 웹 애플리케이션 또는 다른 프로젝트에 통합할 수 있도록 도와준다.
TensorFlow.js를 기반으로 하고 있으며, javascript가 실행되는 곳이라면 어디에서나 작동한다.
기계 학습(ML) 모델을 만들고 교육시키기 위한 간단하고 사용하기 쉬운 도구 중 하나다.
Teachable Machine
Train a computer to recognize your own images, sounds, & poses. A fast, easy way to create machine learning models for your sites, apps, and more – no expertise or coding required.
teachablemachine.withgoogle.com
웹사이트에서 보다 더 자세한 정보와 다양한 모델을 확인할 수 있다.
2️⃣ 이미지 크롤링(Image Crawling) 이란?
웹에서 이미지를 수집하고 다운로드하는 과정을 나타낸다.
크롤링은 웹 스크래핑(Web Scraping)의 한 형태로, 인터넷 상에 있는 웹 페이지에서 원하는 데이터를 추출하는 프로세스 중 하나이다.
이미지 크롤링은 주로 웹 스크래핑 도구나 프로그래밍 언어를 사용하여 자동화된다.
Python의 라이브러리인 BeautifulSoup와 Requests, 혹은 이미지 다운로드를 위해 urllib 또는 다른 라이브러리들을 이용하여 이미지 크롤링을 수행하는 것이 일반적이다.
🔍 본론
1️⃣ 선행 연구 조사 및 분석
당시 시의성이 높았던 화제를 중심으로 주제를 선정하면 좋을 것 같다는 생각이 들었다.
그리하여 2022년 하반기 이슈에서 생각을 확장시켜 군중 밀집도 분류기를 만들어 보기로 했다.
이 주제를 선정은 G. Keith Still 교수의 군중 밀집도 대 군중 흐름 비율에 관한 연구가 밑바탕이 되었다.
링크로 첨부한 교수의 연구 사이트가 굉장히 잘 꾸려져 있으니 직접 보는 것을 추천한다.
교수의 연구에 따르면 1m²당 3.5∼4명까지는 사람들이 걸을 때 엉키지 않을 정도의 공간이 확보되지만, 5명을 넘어가면 발 디딜 틈이 없어 군중 흐름이 뒤엉키기 시작한다. 이를 넘은 6명 이상이면 상황이 위험해진다.
군중 밀집도 | 1m²당 인원( 단위 : 명) |
매우 낮음 | 0~1 |
낮음 | 1~2 |
보통 | 2~4 |
높음 | 4~5.5 |
매우 높음 | 5.5~ |
위 연구를 바탕으로 본 프로젝트에서는 군중밀집도에 대해 5단계로 분류했다.
1m²당 0~1명은 매우 낮음, 1~2명은 낮음, 2~4명은 보통, 4~5.5명은 높음, 5.5명 이상이면 매우 높음으로 단계를 나누었다.
2️⃣ Python으로 Google Image Crawling
군중 밀집도에 관한 표본을 수집하려 했다. 주로 하이앵글 위주의 CCTV와 유사한 관점의 사진들을 수집하고자 한다.
이미지 수집에 있어서 구글 이미지 크롤링을 채택했다.
python을 이용하여 가상환경을 구축한 뒤, 프레임워크인 selenium와 파이썬 라이브 러리 BeautifulSoup를 통해 구글 이미지 크롤링을 했다. selenium은 실제 브라우저를 코드를 통해 조작하는 방식이기 때문에, 이를 이용하여 Chrome 드라이버를 제어했다.
위 과정을 통해 다양한 군중 밀집도를 파악할 수 있는 키워드들을 선정하여 약 900장의 이미지를 크롤링했다.
3️⃣ 라벨링과 Teachable Machine 학습
그중 적합하지 않은 이미지들을 직접 라벨링 했다.
이후 수집된 이미지를 분류한 5단계의 기준에 따라 직접 라벨링 했다.
군중 밀집도 | 수집한 사진 (단위 : 장) |
매우 낮음 | 16 |
낮음 | 37 |
보통 | 43 |
높음 | 28 |
매우 높음 | 38 |
이렇게 분류한 이미지들을 Teachable Machine에 학습시켰다.
4️⃣ 성능 평가
Class 1은 매우 낮음, Class 2는 낮음, Class 3은 보통, Class 4는 높음, Class 5는 매우 높음에 해당한다.
더 자세한 내용은 과제로 제출했던 PDF를 통해 확인할 수 있다.
🤔 결론
1️⃣ 느낀점
스스로 찾아서 공부하고 발전할 수 있는 가능성에 대해 느낄 수 있었던 좋은 과제였다.
그 당시에는 8할 이상 내가 다한 과제라는 부분이 조금 열받았다.
그렇지만 모든 과정을 스스로 해내며 얻는 성취감에 대해서는 이루 말할 수 없었다.
고등학생 때, 물리학과 교수님과 렌즈의 투과율과 포도상규균의 관계성에 관한 레포트를 작성했던 경험이 이번 활동에 많은 도움이 되었던 것 같다. 그 당시 배웠던 참고문헌 작성법, 각주 및 미주다는 법 레포트 구성법 등 오래돼서 전부 까먹었을 거라 생각했는데 아니었다.
이 활동 또한 미래의 성장할 나에게 크나큰 거름이 되기를 바란다.
2️⃣ 흥미로운 점과 아쉬운 점
Image Crawling 후 내가 원하는 방향으로 모델이 학습됐을 때는 정말 신기했다.
Google에서 제공하는 간단한 학습머신을 통해서 코드 없이 모델을 만들어 낼 수 있다니!
그리고 재미있었던 점은 교수의 선행 연구 결과를 보는 것이었다.
이 활동에서 아쉬웠던 점은 직접 이미지를 라벨링하는 과정이다.
이 과정도 컴퓨터에 학습시켜서 직접 분류를 하게 했다면 보다 더 완성도 있지 않았을까 싶다.
기회가 된다면 이후 이와 관련된 분야를 공부해서 더 나은 결과물을 낼 수 있는 사람으로 성장하고 싶다.