지금까지 우리는 미리 컴파일되고 레이블이 지정된 데이터 세트로 작업했습니다.하지만 자체 사용자 지정 데이터 세트를 만든 다음 여기에서 CNN을 교육하려면 어떻게 해야 할까요? 이 장에서는 다음과 같은 예를 제공하는 완전한 딥러닝 사례를 제시합니다.
1. 이미지 세트 다운로드.
2. 교육을 위해 이미지에 레이블을 지정하고 주석을 추가합니다.
3. 사용자 지정 데이터 세트에서 CNN을 훈련합니다.
4. 훈련 된 CNN을 평가하고 테스트합니다.
다운로드 할 이미지 데이터 세트는 봇이 특정 웹 사이트에 자동으로 등록하거나 로그인하는 것을 방지하는 데 사용되는 보안 문자 이미지 세트입니다 (또는 더 나쁜 경우에는 다른 사람의 계정에 무차별 대입하려는 시도).
보안 문자 이미지 세트를 다운로드 한 후에는 보안 문자의 각 숫자에 수동으로 레이블을 지정해야합니다. 알게 되겠지만 데이터 세트를 얻고 라벨을 지정하는 것은 작업의 절반이 될 수 있습니다. 필요한 데이터의 양, 얻는 것이 얼마나 쉬운 지, 데이터에 레이블을 지정해야하는지 (예 : 이미지에 실제 레이블 지정) 여부에 따라 비용이 많이 드는 프로세스가 될 수 있습니다.
따라서 가능할 때마다 전통적인 컴퓨터 비전 기술을 사용하여 라벨링 프로세스의 속도를 높이려고 합니다. 이 장에서 Photoshop 또는 GIMP와 같은 이미지 처리 소프트웨어를 사용하여 captcha 이미지에서 숫자를 수동으로 추출하여 교육 세트를 만드는 경우 작업을 완료하는 데 며칠이 걸릴 수 있습니다.
그러나 몇 가지 기본적인 컴퓨터 비전 기술을 적용하면 한 시간 이내에 교육 세트를 다운로드하고 레이블을 지정할 수 있습니다. 이것이 제가 딥 러닝 실무자들에게 컴퓨터 비전 교육에 투자하도록 권장하는 여러 이유 중 하나입니다. 컴퓨터 비전에 적용되는 딥 러닝 마스터에 대해 진지하게 생각한다면 더 넓은 컴퓨터 비전 및 이미지의 기본 사항을 배우는 것이 좋습니다.
또한 실제 데이터 세트는 MNIST, CIFAR-10 및 ImageNet과 같은 벤치 마크 데이터 세트와 다릅니다. MNIST, CIFAR-10, ImageNet 등의 벤치 마크 데이터 세트는 이미지가 깔끔하게 분류되고 구성되고 평가할 수 있습니다. 이러한 벤치 마크 데이터 세트는 도전적 일 수 있지만 실제로는 (레이블이있는) 데이터 자체를 얻는 것이 쉽지 않습니다. 대부분의 경우 레이블이 지정된 데이터는 네트워크를 학습하여 얻은 딥러닝 모델보다 훨씬 더 가치가 있습니다.
예를 들어, 미국 정부를 위해 사용자 지정 자동 번호판 인식 (ANPR) 시스템을 만드는 회사를 운영하고 있다면 견고하고 방대한 데이터 세트를 구축하는 동시에 여러 딥러닝 접근 방식을 평가할 수 있습니다. 이렇게 레이블이 지정된 대규모 데이터 세트를 축적하면 다른 회사에 비해 경쟁력을 확보 할 수 있습니다.이 경우 데이터 자체가 최종 제품보다 더 가치가 있습니다. 레이블이 지정된 방대한 데이터 세트에 대한 독점적 권리 때문에 귀사가 인수 될 가능성이 더 높습니다.
번호판을 인식하는 놀라운 딥 러닝 모델을 구축하면 회사의 가치가 증가 할 뿐이지만 레이블이 지정된 데이터는 확보하고 복제하는 데 비용이 많이 들기 때문에 복제하기 어려운 (불가능하지는 않지만) 데이터 세트에 대한 키를 소유 하고있는 경우 회사의 주요 자산은 딥 러닝이 아니라 데이터입니다. 이 장의 나머지 부분에서는 이미지 데이터 세트를 얻고 레이블을 지정한 다음 딥 러닝을 적용하여 보안 문자 시스템을 뚷는 방법을 살펴 보겠습니다.
이 장은 체계적이고 읽기 쉽게 유지하기 위해 여러 부분으로 나뉩니다. 첫 번째 섹션에서는 우리가 작업하고있는 보안 문자 데이터 세트에 대해 논의하고 책임있는 공개의 개념에 대해 논의합니다. 컴퓨터 보안이 관련 될 때 항상해야 할 일입니다.
거기에서 우리 프로젝트의 디렉토리 구조에 대해 논의합니다. 그런 다음 학습 및 평가에 사용할 이미지 세트를 자동으로 다운로드하는 Python 스크립트를 만듭니다. 이미지를 다운로드 한 후에는 약간의 컴퓨터 비전을 사용하여 이미지에 레이블을 지정하는 데 도움을 주어야합니다. GIMP 또는 Photoshop과 같은 사진 소프트웨어 내에서 단순히 자르고 레이블을 지정하는 것보다 프로세스가 훨씬 쉽고 훨씬 빨라집니다. 데이터에 레이블을 지정하고 나면 LeNet 아키텍처를 교육 할 것입니다. 나중에 알게 되겠지만 보안 문자 시스템을 깨고 15 세대 미만으로 100 % 정확도를 얻을 수 있습니다.
참고 사항
책임있는 공개는 취약성을 공개하는 방법을 설명하는 컴퓨터 보안 용어입니다. 위협이 감지 된 직후 모든 사람이 볼 수 있도록 인터넷에 게시하는 대신 먼저 이해 관계자와 연락하여 문제가 있음을 확인합니다. 그런 다음 이해 관계자는 소프트웨어 패치를 시도하고 취약성을 해결할 수 있습니다. 단순히 취약성을 무시하고 문제를 숨기는 것은 잘못된 보안이므로 피해야합니다. 이상적인 세상에서는 취약점이 공개되기 전에 해결됩니다. 그러나 이해 관계자가 문제를 인정하지 않거나 적절한 시간 내에 문제를 해결하지 않으면 윤리적 수수께끼가 발생합니다.
이 지식은 어떠한 경우에도 사악하거나 비 윤리적 인 이유로 사용되어서는 안됩니다. 이 사례 연구는 사용자 지정 데이터 세트를 얻고 레이블을 지정하고 그 위에 딥 러닝 모델을 훈련시키는 방법을 보여주는 방법으로 존재합니다.
캡쳐 무력화 디렉토리 구조
보안 문자 무력화 시스템을 구축하려면 utils 하위 모듈을 업데이트하고 captchahelper.py라는 새 파일을 포함해야 합니다.

이 파일은 숫자를 심층 신경망에 공급하기 전에 숫자를 처리하는 데 도움이되는 preprocess라는 유틸리티 함수를 저장합니다. 또한 임의로 모듈 외부에 captcha_breaker라는 두 번째 디렉터리를 만들고 다음 파일과 하위 디렉터리를 포함합니다.

captcha_breaker 디렉토리는 이미지 캡차를 깨기 위해 모든 프로젝트 코드가 저장되는 곳입니다. 데이터 세트 디렉토리는 레이블이 지정된 숫자를 저장하는 곳입니다. 다음 디렉터리 구조 템플릿을 사용하여 데이터 세트를 구성하는 것을 선호합니다.
따라서 데이터 세트 디렉토리는 다음과 같은 구조를 갖습니다.
데이터 세트가 루트 디렉토리 인 경우 {1-9}는 가능한 숫자 이름이며 example.jpg는 주어진 숫자의 예입니다. 다운로드 디렉토리에는 E-ZPass 웹 사이트에서 다운로드 한 원시 captcha .jpg 파일이 저장됩니다. 출력 디렉토리 안에 훈련 된 LeNet 아키텍처를 저장합니다. 이름에서 알 수 있듯이 download_images.py 스크립트는 실제로 예제 캡차를 다운로드하여 디스크에 저장하는 역할을합니다.
캡차 세트를 다운로드 한 후에는 각 이미지에서 숫자를 추출하고 모든 숫자에 수동으로 라벨을 지정해야합니다. 이는 annotate.py로 수행됩니다.
train_model.py 스크립트는 레이블이 지정된 숫자에서 LeNet을 훈련시키는 반면 test_model.py는 LeNet을 captcha 이미지 자체에 적용합니다.