Deep Learning study

Yet Another Text Captcha Solver: A Generative Adversarial Network Based Approach 본문

AI/papers

Yet Another Text Captcha Solver: A Generative Adversarial Network Based Approach

HwaniL.choi 2019. 2. 10. 19:29
반응형

오늘은 입대한 이래로 처음으로 읽어본 논문을 정리해보려고 한다.


이 논문은 captcha solver 를 GAN을 이용해 구현한 내용이다.


흔히 captcha는사이트 회원가입을할때 많이 볼 수 있을것이다. captcha 는 사람과 프로그램을 구별하기 위한 방법으로



위의 사진과 같은 형태를 가지고 있다. text를 프로그램이 인식하기 힘들도록 글자를 서로 overlap 시킨다던가 사이에 선을 그어놓고나 , 글자를 왜곡시키고 노이즈가 있는 배경을 사용하는 등의 방법을 사용한다.


이 논문에 따르면 이전에도 머신러닝을 사용한 captcha solver에 대한 연구들이 있었지만, 사람의 손을 많이 타고 (데이터 라벨링, 데이터 수집, 전처리 등..) 많은 데이터를 수집해야하는 등의 불편함이 있었다고한다.이런 말을 하는 것을 보면 분명 여기서 사용한 방법은 힘을 들이지 않고 학습을 시킬 수 있다는 것 아닐까 ..?

예상과 비슷하게 이 논문에서 소개한는 GAN 을 이용한 방법은 , 훨씬 적은양의 real captcha 데이터가 필요하고 사람의 손을 거의 타지 않는다고 한다.

이 논문에서 자주 나오고 강조하는 부분(내가 읽어 보았을때)은 실제로 학습에 필요한 real captcha data가 정말 조금만 필요하다는 장점이 있다는 것이다. 어떻게 적은 양의 real 데이터로 모델을 학습 시켰는지 이제 그 방법을 알아보도록 하자 ~!




Step 1 . Captcha synthesis

첫 번째 과정으로 target captcha와 비슷한 captcha들을 생성해 내는 것 이다. GAN을 이용하여 만들어 내는데 Generator 는 target 과 비슷한 captcha를 만들어 내려고 하고 , Discriminator 는 그것이 합성된 ,즉 생성된, captcha인지를 구분하려고 한다. GAN을 조금 알고있다면 쉽게 이해 될 것이다. 이 모델의 학습은 Discriminator가 많은 합성된 captcha를 인식하지 못했을 경우에 끝이나게 된다 .

학습을 끝낸 captcha synthesizer 는 방대한 양의 captcha들을 만들어 낼 수 있다.

Generator는 두가지로 이루어져 있는데, image generator와 generator network 이다. image generator는 word level 로 captcha image 를 생성하고 generator network는 생성된 captcha 이미지를 pixel level로 security feature 를 추가하여 수정한다 .

Discriminator는 어느 기본적인 GAN모델과 비슷하다. 여기서 target label은 0으로 주고 synthetic captcha label로는 1을 준다. 그리고 cross - entropy error를 loss function을 사용해 두 클래스를 분류하도록 학습시킨다.


Step 2. Preprocessing

어떤 captcha 이미지를 solver에게 넘겨줄때 전처리 작업을 해야한다. 다시말하면 captcha이미지에서 프로그램이 인식하기 어렵도록 만든 security feature들을 제거하고 글꼴을 표준화하는 작업이다. (hollow charaters 를 채워주고 , 글자사이의 간격을 표준화 하는 등 ..) 이 작업은 Pix2Pix모델을 기반으로 만들어졌다고 소개하고 있다. 

이 전처리 모델은 Step 1 에서 만든 captcha synthesizer가 만들어낸 synthetic captcha와 그것과 대응되는 clean captcha(security feature가 없는 이미지)로 학습을 시키게 된다.

마찬가지로 preprocessing 작업도 GAN을 이용한 모델을 이용하므로 그림만 봐도 쉽게 이해 가능할 것이다. 다시 강조하지만 이 모델을 학습시키는 데에는 오직 captcha synthesizer가 만들어낸 데이터만 사용했다는 것이다.


Step 3. Training the base solver

앞에서 만든 두개의 모델로 많은 양의 synthetic captcha(200,000 개의 synthetic captcha, 즉 captcha synthesizer 로 만들어낸 이미지) 와 그것의 label 을 만들어내게 된다 . 이 많은 양의 합성된 데이터를 이용해서 CNN기반의 base Solver를 학습시킬 수 있게 된다. Solver 는 preprocess 된 captcha이미지를 input으로 받으면 그것에 대응하는 character 들을 output으로 내놓는다.


Step 4. Fine-tuning the base solver

마지막으로 transfer learning 을 적용한다. 이제는 base Solver 를 개선시키기 위해서 준비해둔 적은 양의  real captcha로 fine tuning 시킨다.  위의 그림에서와 같이 학습된 base Solver 와 manually labeled real captcha 를 이용해서 모델 후반부의 layer들의 parameter 들을 업데이트 시켜준다고 한다.




이렇게 논문의 전반적인 내용들을 살펴 보았다 . 뒤에도 여러 성능실험, 다른 모델과의 비교 개선점, 잘 안됐던 부분,, 등등이 있는데 그런 내용들은 찾아서 읽어보는것이 더 좋을 것 같다.


잘 이해하지 못한 부분이 있다거나 정리가 잘 안된 부분이 있을지도 모른다. 하지만 최대한 논문의 내용에서 벗어나지 않고 정리했으니 불편함은 없으리라 생각한다... 오타나 문장의 어색한것은 나중에 수정하도록 해야겠다.

오늘은 이만 !!!!!



Reference

[1] Yet Another Text Captcha Solver: A Generative Adversarial Network Based Approach


반응형
Comments