2018년 1월 25일 목요일

Deepfakes (6) - 기존 얼굴 추출 파일에 새로 추출한 얼굴 추가하기 aligned, 사용법

  같은 사람의 얼굴을 계속해서 이용하는데 품질을 높이고 싶다면 데이터를 늘려야 합니다. 이 때 다시 이전에 추출한 이미지의 얼굴부터 시작하여 새로 추가한 얼굴을 추출하면 너무 많은 시간이 소요될 것입니다.
  이번 게시물에서는 이전 추출한 파일은 작업하지 않고 새로 추출할 얼굴만 작업하여 추가하는 법을 알려드리겠습니다.

alignments.json 파일을 메모장으로 연다

  얼굴 추출을 모두 완료하게 되면 위의 그림과 같은 'alignments.json' 파일이 생성됩니다. 이 파일은 alinged 폴더안에 있는 추출한 얼굴 이미지가 원래 이미지의 어느 영역에 있었는지를 알려줍니다.
 
파일 이름 단위로 기록되있는 것을 알 수 있다.

  파일을 메모장으로 열어보시면 각 파일별로 파일이름을 기준으로 하여 정보가 입력되있는것을 알 수 있습니다. 따라서 새로할 파일만 추출하는 방법은 다음과 같습니다.

  1. 새로 추출할 이미지들만 특정 폴더로 옮긴다. (이 때 기존 이미지들과 이름이 겹치지 않도록 한다.)
  2. 특정 폴더에 대해 얼굴 추출을 실행한다.
  3. 새로 만들어진 'alignments.json' 파일을 열어 제일 마지막 ]]]중 하나를 지운다. 내용을 복사한다.
  4. 얼굴 추출전,후 이미지를 각각 기존 이미지들이 있던 data, aligned폴더에 붙여넣는다.
  5. 기존 이미지가 있는 폴더에 있는 'alignments.json'를 메모장을 연다. 제일 처음 시작부분 [[중 하나를 지우고 ,(쉼표)를 하나 쓴다.
  6. 시작부분에 '3'번에서 복사한 내용을 붙여넣는다.

댓글 17개:

  1. 혹시 영상같은걸로 찍어서 보여주실수 있나요? 처음에 bat키고 부터 하는법을 이해를 못하겟네요 잘 안되서 부탁드립니다~

    답글삭제
  2. Using TensorFlow backend.
    Traceback (most recent call last):
    File "train.py", line 96, in
    File "utils.py", line 15, in load_images
    ValueError: could not broadcast input array from shape (199,201,3) into shape (198,201,3)
    [9212] Failed to execute script train
    이렇게 오류가 뜨네요 이러다 보니 머가 문제 인지 몰라서 영상으로 가능하면 부탁드립니다 ㅜㅜ

    답글삭제
    답글
    1. C:/fakes 대신에 c:/fakes 같은 방식으로 다시 직접입력하여 실행해보시기 바랍니다.
      영상은 시간이 안 되네요. 다른 분이 올리게 되면 링크라도 찾아보겠습니다.

      삭제
  3. 새로 얼굴파일 추출해서 넣었는데 혹시 이거 왜 이런지 아시나요..?

    Traceback (most recent call last):
    File "train.py", line 99, in
    MemoryError
    [10260] Failed to execute script train

    답글삭제
    답글
    1. 작성자가 댓글을 삭제했습니다.

      삭제
    2. 너무많이 사진을 넣은가 싶어서 7000~8000장정도로 줄였는데도 안되네요 ㅠ.ㅠ

      cpu i5-3470
      vga gtx1060 3gb
      ram 12gb
      입니다

      삭제
    3. 병합한 후에 원인은 모르겠으나 저도 그러더라구요. 그런데 그냥 경로 확인하시고 반복 시도하면 됩니다. 그리고 제가 글에서 ,(쉼표) 쓰는걸 빼먹었는데 참고하시기 바랍니다.

      삭제
  4. 2.0버전 사용해보셨나요? 2.0버전도 쿠다말고 새로 설치해야되는게 있을까요. 2.0버전 사용법도 부탁드립니다.

    답글삭제
    답글
    1. 아직 사용안해봤습니다. 시간 나는 대로 해보고 싶은데 시간이 가능할 지 모르겠네요.

      삭제
    2. 영문사용법https://www.reddit.com/r/deepfakes/comments/7nq173/v2_tutorial_intelbased_python_easy_to_follow/
      커뮤니티
      https://www.reddit.com/r/fakeapp/

      삭제
  5. 영문사용법https://www.reddit.com/r/deepfakes/comments/7nq173/v2_tutorial_intelbased_python_easy_to_follow/
    커뮤니티
    https://www.reddit.com/r/fakeapp/

    답글삭제
  6. Traceback :
    File "align_faces.py", line 145, in
    File "align_faces.py", line 136, in main
    File "align_faces.py", line 116, in iter_face_alignments
    File "face_alignment\api.py", line 172, in get_landmarks
    File "face_alignment\api.py", line 160, in detect_faces
    RuntimeError: Error while calling cudaOccupancyMaxPotentialBlockSizw<&num_blocks,
    &num_threads,K> in file c\warhur\dlib-master\dlib\dnn\cuba_utils.h:155. code:8,
    reason: invalid device function
    [2388] Failed to execute script align_faces

    라고 뜨네요. 알려주신 그대로 전부 다했는데 'fakeApp'에서 Extracr할때 계속 막힙니다. 도와주세요 ㅠㅠ

    답글삭제
  7. 궁금한 사항이 생겨서 여쭈어봅니다..

    트레인을 할때 모델파일을 베이스로 A자료와 B자료가 있을텐데 0에 가까워질때까지 하게되면 좋은 품질을 얻을수 있는걸로 알고 있습니다. 그렇다면 A와 B의 자료중 하나라도 바뀌게 되면 기존 모델파일로 해도 되는건가요???

    답글삭제
    답글
    1. 이 글 참조해주세요.
      https://dorigm.blogspot.com/2018/03/deepfakes9.html

      삭제
  8. 일방적으로 갖다 붙일 대상(A)의 얼굴만을 추가할 경우. 'aligned' 폴더 안에 256x256 페이스셋 이미지만 넣고. 상위 폴더에 원본 파일, alignments.json 파일의 작성 또한 필요 없이 잘 작동한다고 합니다. 예를 들어, 모 연예인의 얼굴을 B로 사용하는 일 없이, A로만 사용할 경우 /data/aligned 폴더만 있으면 된다는 소리.

    답글삭제
    답글
    1. 모 사이트에서 페이스셋 모음(aligned 폴더만 있는)자료를 이용해서 직접 작동 확인했습니다.. 참고 됐으면 좋겠네요.

      삭제
    2. 네 맞습니다. 그렇게 사용가능합니다.

      삭제