2018년 3월 18일 일요일

Deepfakes(9) - encoder파일공유/ 연속적인 트레이닝을 통해서 시간을 단축/ 모델 파일을 효율적으로 활용하기.


  정상적으로 트레이닝까지 진행을 한 model 폴더안에는 총 4종류의 파일이 있습니다.
encoder는 프로그램에서 어떤 얼굴인지를 정확하게 인식 혹은 처리할 수 있도록 변경해주는것으로 보입니다.
  따라서 트레이닝이 아예 진행되지 않은 encoder파일이 아닌 이전에 사용한 encoder파일을 이용하여 다른 학습을 진행하더라도 트레이닝이 빠르게 진행됩니다.
 decoder_A, B는 그렇게 처리된 얼굴 이미지를 A,B에 맞는 얼굴로 변환해줍니다. 결론적으로 모델 폴더 전체를 복사하지 않고 일부만 복사하여 사용이 가능하다는 의미입니다.

  단 이전에 개별적으로 A, B/ C, D의 트레이닝을 진행하였을 때 A,C의 트레이닝을 하기 위해 decoder_C를 decoder_B 대신에 붙여넣어도 정상적으로 진행이 되지 않았습니다.??? (A, B로 만들어진 파일을 기반으로 A,C를 트레이닝 후 A,B-B(A,B트레이닝으로 만들어진 B)와 A,C-C를 이용해 B,C 트레이닝이 되는것 같기도??? 아직 이부분은 잘모르겠음.)

  A,B/ A,C의 트레이닝을 진행할 때 A, C의 트레이닝을 A,B의 model 파일을 이용하여 진행했다면 A,B의 트레이닝을 통해 얻은 decoder_A파일과 A, C의 트레이닝을 통해 얻은 decoder_A파일은 서로 호환이 가능합니다. 즉 트레이닝이 이어지므로 A, B/ A, C의 트레이닝이 분리되는 것이 아니고 A의 얼굴 트레이닝은 연속적으로 가능하므로 두번의 트레이닝을 통해 모두 A의 Loss를 줄여나갈 수 있으므로 시간 단축이 가능합니다. 또한 encoder파일도 서로 호환가능합니다.

  예를 들어 이렇게 이용가능합니다. 주로 사용하는 A, B라는 인물의 트레이닝을 동시에 진행하여 model파일을 생성합니다. 이후 축구선수 C의 몸에 A의 얼굴을 붙여넣기 위해 A, B의 model파일을 기반으로 트레이닝을 하여 합성을 완료한 후 A, C의 트레이닝을 통해 발전된 encoder.h5와 decoder_A.h5 파일을 A, B의 model 폴더에 붙여넣어 A 얼굴에 대해 Loss를 감소시킨 model을 얻을 수 있습니다. 다시 B의 얼굴을 사용하여 D의 몸에 붙여넣을 경우 위와 같은 과정을 반복하면 A, B 트레이닝을 직접 진행하지는 않았지만 결과적으로 A, B의 Loss가 줄어든 model 파일을 얻을 수 있습니다.

  이를 통해 이전에 개별적인 2단계 혹은 3단계의 과정을 거칠 필요없이 연속적인 하나의 A, B모델을 얻음으로써 시간을 크게 단축하고 계속해서 Loss를 줄여나갈 수 있습니다.

ps. 최근에 dfake, myfakeapp등이 새로 나온것 같네요. 얼굴 인식률이 좋아지거나 얼굴의 범위를 크게 잡아 좀더 자연스럽게 하려는 방향으로 나아가고 있습니다.

  즉 위에 주황색 부분의 이야기까지 맞다면 encoder.h5은 계속 누적해서 사용하면 됨.
인물별로 각 인물에 해당하는 decoder_땡.h5 파일만 돌려서 사용(Loss를 계속 줄이는 것이 가능)하면 됨. 어차피 본인이 사용하는 Node, Layer값은 동일할 것임으로.

180407 현재 알고있는 바로는 encoder가 호환의 기준이되는 것으로 보임. 동일한 encoder를 계속 사용한다면 모든 decoder끼리도 돌려가며 사용가능해보임. (encoder 파일을 족발집 육수마냥 우리기 가능)

그런 의미에서 encoder파일을 공유합니다.
이를 사용하시면 빈파일을 사용하시는것에 비해 굉장히 빠르게 좋은 결과를 얻으실 수 있을거라 생각합니다. 사용방법은 model폴더를 만드실 때 decoder는 기존 빈파일을 이용하고 encoder와 config 파일만 이파일로 넣으시면 됩니다.
batch size:32
save period:32
Layers:4
Nodes:256

download - (Ver Date.180407)