토이 프로젝트 일지 4 : 디시인사이드 캡차 인식 신경망 만들기
1. 시작 계기
DC 인사이드에서는 갤러리 관리자가 원하는 경우, 자동 입력 방지 문자(Captcha)를 댓글, 추천 버튼, 글쓰기 전에 입력하도록 만들 수 있다. 그런데, 필자가 생각하기에는 현대의 인공지능 기술로는 이러한 자동 입력 방지 문자를 사용하는데 별로 쓸모가 없다는 생각이 들어서 이러한 캡차 문자를 자동으로 인식하고, 통과시키는데 얼마나 유효한지 알아보기 위해서 본 프로젝트를 시작하게 되었다.
2. 프로젝트 개요
가. 프로젝트 소개
1. 프로젝트 유형: 개인 토이 프로젝트
2. 구현 신경망 : DC 인사이드의 캡차 이미지에 대한 정답을 생성하는 신경망
3. 개발 환경 : Colab(WEB IDE)
4. 활용 기술
- 리버스 엔지니어링
디시 캡차 이미지 데이터 얻는 과정을 자동화하기 위해서 DC 서버와의 네트워크 통신 과정을 이해하고, 구현할 수 있어야 한다.
- 신경망 관련 라이브러리 : Pytorch, Pytorch Lightning
현재 신경망 관련 논문들이 주로 즐겨 사용하는 Pytorch 라이브러리를 사용했다.
- 활용한 신경망 구조 : CRNN, ResNet, Self-Attention
OCR 인식의 기반이 되는 CRNN 신경망 구조에 대한 이해가 필요하다.
성능을 향상하기 위해서 ResNet, Self-Attention에서 사용하는 기반 기술들을 알아야 한다.
5. 개발 기간: 2023.2.22 ~ 2023.3.10
나. 프로젝트 목표
3. 프로젝트 구현
가. DC 캡차 훈련 데이터 다운로드하기
1. 수동으로 이미지를 생성시킬 수 있는 프로그램
캡차를 예측하기 위해 생성한 신경망이 전혀 없었을 때는 어쩔 수 없이 수동으로 정답을 입력해서 학습 데이터를 생성할 수 있도록 gradio로 인터페이스를 만들어서 학습 데이터를 생성했다.
2. 신경망을 활용해 자동으로 이미지를 생성시키는 프로그램
어느 정도 효과가 있는 신경망을 만들 수 있으면 자동으로 훈련 이미지를 생성시킬 수 있는 알고리즘을 사용할 수 있었다. 디시에서는 동일한 정답을 가진 다른 캡차 이미지를 생성시킬 수 있는데, 서로 다른 3개의 이미지에 대한 인공지능의 예측이 일치한다면 이것을 라벨로 충분히 사용할 수 있기 때문이다.
나. DC 캡차 이미지 인식 신경망 작성하기
1. 이미지 특성을 추출하기 위한 ResNet 기본 모듈 만들기
그림 6. Basic_ResNet_Maintain_Layer 기본 모듈 구성도
이미지에서 특성을 추출하면서 크기를 줄이기 위해서 ResNet에서 사용하는 구조를 가져왔다. 다만, 층의 깊이를 깊게 하기 위해서 다운 샘플을 하는 층과 다운 샘플을 하지 않는 층을 따로 만들었다.
2. 순서 특성을 추출하기 위한 기본 모듈 만들기
앞의 ResNet 모듈에서 추출된 특성에서 실제 문자를 추출시키기 위해서 Multihead Attention 모듈을 Skip Connection 형태로 쌓아서 기본 모듈을 만들었다.
3. 기본 모듈들을 조합시키기
이미지 특성 압축을 위한 RetNet 모듈을 총 41개, 순서 특성을 추출하기 위한 Attetion_Skip 모듈을 5개 사용해서 CRNN 형태의 모듈을 최종적으로 구성했다.
4. 신경망 훈련시키기
다. 신경망 학습 및 테스트 결과
8문자가 있는 7,000개의 캡차 이미지 데이터에서 80%, 10%, 10%의 비율로 훈련, 검증, 테스트 데이터를 분리해서 학습시켰다. 최종적으로 훈련 데이터 99.92%, 검증 데이터 98.41%, 테스트 데이터 98.70%의 정확도를 얻었다.
4. 프로젝트 소감
Pytorch를 사용해보니 Tensorflow와 비교해서 처음에는 복잡한 느낌이 강했지만 Pytorch Lightning 등을 사용하게 되면서 오히려 더 간결하고 자유도가 높아서 더 사용하기 편하다는 느낌이 들었다. 책에서만 보았던 ResNet, GoogleNet 등의 아이디어를 차용해서 구현해보면서 어떻게 신경망을 구성하면 더 효율적으로 구성할 수 있는지에 대한 많은 통찰력을 얻게 되어서 다음 신경망 프로젝트때 많은 도움이 될 것 같았다.
또한, 신경망의 캡차 인식률이 98% 가량을 넘었기 때문에 이전에 생각했던 대로 DC에서 사용하는 캡차 인식 방식은 자동 작성 방지에 별로 도움 안 된다는 사실도 알게 되었다.
5. 관련 링크
6. 참조 내용
사이토 고키, 2017, 밑바닥부터 시작하는 딥러닝 1, CHAPTER 8 딥러닝
사이토 고키, 2019, 밑바닥부터 시작하는 딥러닝 2, CHAPTER 8 어텐션
이종민(텐초), 2022, 텐초의 파이토치 딥러닝 특강, 12장. 캡챠 텍스트 인식 : CRNN+GRU











