펭귄 분류기를 만들어 봤어요.

5535 단어 Python3기계 학습

입문


이 보도는 SRA Advent Calendar 2018의 22일째 보도이다.
저는 산업 제2사업부의 히로시마입니다.SRA의 본사 부근에서 머신러닝 회의를 열다.

펭귄 분류기


CNN에 펭귄 이미지를 배워 펭귄의 종류를 추정하는 분류기를 만들었다.
그럼에도 펭귄은 6속 18종이 있기 때문에 대표적인 , 이미지 수집이 쉬운 다음 6종의 펭귄만 집중되어 있다.

그래서 정확히 펭귄 6가지 분류기다.
이 보도는 펭귄 분류기를 만드는 과정의 전반부, 데이터 준비를 총괄했다.

큰 흐름


이런 절차에 따라 분류기를 만들었다.
1. 이미지 수집
2. 물체 검측을 통해 수집된 이미지를 바늘귀 이미지로 분할
3. 바늘 모양 표시
4. 이미지 크기 조정
5. CNN에게 배우게 하기
본 보도는 4 까지 진행되었다.

이미지 수집


이것은 다른 일이니 이쪽을 보세요.
Bing 이미지 검색 API v7에서 이미지 수집
하고 있는 일은 다음과 같다.
  • Bing 이미지 검색 API를 통해 키워드에서 이미지의 URL을 가져옵니다.
  • 한 번의 API로 얻을 수 있는 결과의 수가 제한되어 있기 때문에 요구를 충족시키기 전에 여러 번의 API를 투입하여 얻는다
  • 이미지 URL에 액세스하여 이미지를 다운로드합니다.
  • 같은 이미지가 다른 URL로 들어오는 경우가 있기 때문에 이미지의hash값을 파일 이름으로 저장합니다
  • 물체 검측을 통해 수집된 이미지를 바늘귀 이미지로 분할하다


    대량의 펭귄 이미지를 수집했지만 이미지에는 펭귄 외에도 사진이 많아서 펭귄 단체를 최대한 잘라내고 싶어요.
    예를 들어 고양이 이미지라면 OpenCV로 고양이 얼굴을 검출할 수 있지만 펭귄은 검출되지 않았다.그럼요.
    따라서 YOLOv2 알고리즘YAD2K:Yet Another Darknet 2 Keras의 물체 검출을 사용하여 검출된 이미지를 잘라냅니다.
    YAD2K의 모형을 만들기 전에 이 글을 참고할 수 있도록 허락해 주십시오.
    YOLOv2(Keras/TensorFlow)를 통한 딥러닝 이미지의 물체 검출
    모델 모델_data/yolo.h5까지 제작하면 YAD2K의 test_yolo.py 코드를 살짝 만들어서 그림을 재단했습니다.
    잘라낼 때 사용하는 코드는 여기 입니다.
    사용법은
    $ python3 cut_yolo.py model_data/yolo.h5 -t ターゲット画像の入ったディレクトリ -o 切り抜き画像出力ディレクトリ | tee -a ログファイル名
    
    이 잘라내기 작업은 특정 파일에서 오류가 발생하고 손실되는 경우가 있습니다.따라서 파일 이름으로 재단 대상의 이미지를 정렬하고 하나하나 작업을 진행하며 처리가 끝난 이미지 파일 이름을 로그 파일에 토출합니다.
    떨어지면 로그에서 로그에서 로그에서 로그아웃된 파일의 목록을 만들어서 -skp 옵션으로 건너뛰겠습니다.
    $ grep filename adelie.log | sed 's/filename=//g'  > adelie_end.txt
    $ python3 cut_yolo.py model_data/yolo.h5 -t ../bing/test/images2/adelie_penguin_20180127023044/ -o ../images/penguins/YOLO/public/adelie_penguin -skp adelie_end.txt| tee -a adelie.log
    
    똑똑한 방법은 아니지만 그곳은 예처리이기 때문에 운용 중에 덮어씌운다.

    표시 바늘 이미지


    잘라낸 그림을 보니 혼란스러웠다.
  • YAD2K에서 펭귄을 제외한 물체가 잘린다
  • 우연히 찍은 사람 등
  • 원래 사진은 펭귄의 인형과 장식 등
  • 펭귄의 종류가 틀렸다
  • 엔펠러 펭귄 키워드로 걸었지만 펭귄 왕
  • 펭귄의 부모와 새끼새의 외모는 크게 다르기 때문에 다른 라벨을 사용하고 싶다
  • 특히 엔펠러 펭귄은 새끼새와 부모의 차이가 커서 부모만의 이미지로 축소했다.
  • 부모와 새끼새가 함께 잘린 그림도 튀어나왔다.
  • 많은 펭귄들을 천사펭귄이라고 부른다.세상 사람들은 황제와 국왕을 구분하지 않는 것 같다.
    솔직히 이 꼬리표 치는 일은 매우 힘들다.키워드마다 1300장에서 2000장 정도의 이미지를 잘라냈기 때문에 9000장 정도의 이미지만 분리했다.계획

    이미지 크기 조정


    자르는 이미지의 크기와 모양이 각각 다르기 때문에 128x128로 다시 크기를 조정합니다.
    종횡 비율을 바꾸고 싶지 않기 때문에 정사각형이 부족한 부분을 검은색으로 채우고 사이즈를 다시 조정합니다.
    사이즈 조정에 사용되는 코드도 대체적으로 여기 이다.
    $ python3 resize.py リサイズ対象ディレクトリ
    
    resize라는 디렉터리에서 대상 디렉터리 이름으로 내보냅니다.

    준비된 이미지 개수


    지금까지의 고생(주로 펭귄 수동 분류)을 통해 얻은 이미지의 장수는 다음과 같다.
    유형
    빙이 획득한 장수.
    최종 장수
    천사펭귄
    782
    562
    펭귄 왕
    859
    1123
    아델리 펭귄
    833
    854
    의사 일정 펭귄
    806
    769
    펭귄
    868
    854
    와트비 펭귄
    929
    830
    천사가 특히 적은 것은 새끼새가 많기 때문이다.새끼는 귀엽지만 부모님과는 너무 달라요.
    나는 펭귄 한 마리당 500장의 이미지로 분류기를 만들기로 했다.
    분류기 설치는 뒷편에서 계속될 것이다.

    참고 자료

  • YOLOv2(Keras/TensorFlow)를 통한 딥러닝 이미지의 물체 검출
  • Tensor Flow의 피치 멤버 얼굴 인식(전편)
  • 17종과 19종이 있다고 합니다.의견이 분분하다. 
    독단엔펠러와 아드리속은 모두 있지만 통심분 펭귄속은 하나도 없어 편파적이다. 
    https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalcatface.xml  

    좋은 웹페이지 즐겨찾기