소개
- 이 프로젝트는 머신러닝과 TensorFlow에 대한 지식을 향상시키기 위한 학습 경험으로 시작되었음.
- 목표는 브라우저에서 4Chan CAPTCHA를 80% 이상의 정확도로 해결할 수 있는 머신러닝 모델을 만드는 것이었음.
용어
-
CAPTCHA: 컴퓨터나 웹사이트 사용자가 인간인지 확인하기 위한 테스트.
-
4Chan: 다양한 주제의 토론 게시판을 제공하는 익명 이미지 게시판 웹사이트.
-
일반 CAPTCHA: 5~6개의 영숫자 문자로 구성된 4Chan CAPTCHA.
-
슬라이더 CAPTCHA: 배경 이미지와 전경 이미지가 겹쳐져 있는 복잡한 형태의 CAPTCHA.
데이터 수집
- 머신러닝 문제에서 가장 어려운 부분은 데이터를 수집하는 것임.
- 4Chan에서 CAPTCHA를 스크래핑하고 솔루션을 얻는 것이 주요 과제였음.
4Chan에서 CAPTCHA 스크래핑
- HTTP 요청을 분석하여 CAPTCHA 데이터를 JSON 형식으로 추출하는 방법을 발견함.
- 요청 간격을 조절하여 CAPTCHA의 난이도를 관리해야 했음.
솔루션 얻기
- 상업적인 CAPTCHA 해결 서비스를 이용했으나, 정확도가 낮았음.
- 직접 해결하거나 신뢰할 수 있는 사람에게 부탁하는 방법도 시도했으나, 제한적이었음.
합성 데이터 생성
- 4Chan CAPTCHA를 모방하여 합성 데이터를 생성함.
- 배경과 문자를 분리하여 합성 CAPTCHA를 생성하는 알고리즘을 개발함.
모델 생성
- LSTM CNN 아키텍처를 사용하여 모델을 구축함.
- Keras와 TensorFlow를 사용하여 모델을 구현함.
데이터 처리
- 모든 CAPTCHA 이미지를 300x80 픽셀로 조정하여 모델에 입력함.
- 문서의 중요성을 강조하며, 문서의 세부 사항을 놓치지 않도록 주의해야 함.
모델 훈련
- 약 500개의 수작업 이미지와 50,000개의 합성 이미지를 사용하여 모델을 훈련함.
- 훈련은 NVIDIA RTX A4000 GPU에서 수행되었음.
TensorFlow.js에서 모델 사용
- TensorFlow.js로 모델을 변환하여 브라우저에서 실행 가능하도록 함.
- Python 3.12에서는 변환 스크립트가 작동하지 않음.
- Keras 3 모델은 TensorFlow.js에서 지원되지 않음.
실제 성능
- 실제 4Chan CAPTCHA에서 90% 이상의 성공률을 보임.
- 4자 CAPTCHA에서도 동일한 성능을 보임.
결론
- 이 프로젝트를 통해 머신러닝과 컴퓨터 비전에 대해 많은 것을 배웠음.
- 목표를 달성하여 만족스러운 결과를 얻었음.