구글은 가고싶지만 텐서플로우는 싫다.

권대규·2021년 11월 23일
1

intern

목록 보기
3/9

구글은 정말 정말 가고 싶지만, 텐서플로우는 싫다.
왜 버전을 두 개나 만들었는데 서로 호환도 잘 안될까...
텐서 값도 바로 안 보여주고...

아무튼, 포팅은 성공했다.

지난 일지에 올렸던 대로 버전 문제 등은 대체로 해결했으나 사실 메인 퀘스트는 코드였다. 우선 ResNet-50에 대해서 pretrained model weight load하는 방법부터 해보려 했다. 이 과정은 구글 인턴 중인 동기가 도와줘서 꽤 순탄하게 진행할 수 있었는데 막상 하려고하니 쓰고자 하는 모델 가중치의 저장 상태가 pickle이었다. '몰라 알아서 로드해주겠지'라는 맹목적인 믿음은 역시나 실패하였다. 단순히 피클로 로드했을 때 바로 로드가 잘 됐고(당연한 거긴 하지만) 프린트해보니 Network 형식이었다. 사실 이게 뭔 형식인지는 아직 잘 모르지만 인턴 친구 왈 그러면 그냥 바로 결과 뽑을 수 있을 거다. 결국 근본으로 돌아가 StyleGAN metrics 코드를 쭈우우욱 읽어 본 결과...

model.get_output_for(image, None)

라는 간단한 코드로 뭔가 모델이 결과를 뽑는 걸 확인할 수 있었고, 주어진 로직대로 전처리랑 데이터로더 하나씩 간단하게 짜서 돌려보니...

결과가 나온다...!

하지만 여기서 2차 문제가 뭐냐면 나는 텐서의 값을 볼 줄 모른다.

여기서 텐서플로우에 대한 서러움이 한 번 더 터졌고 이것저것 다 찾아봤지만 안돼서 굉장히 속상했다. 생각해보면 되게 어려운 문제도 아니고 텐서 값을 보고싶다는 기초적인 문제인데 이거 하나 못하나 라는 생각이 들었다. 역시나 해결법은 생각보다 간단했고 그 해결법 역시 StyleGAN github에 다 나와있었다.

tflib.run(result_dict)

요 코드 한 줄이 결과를 읽을 수 있는 dictionary로 변환해주어 최종 결과를 볼 수 있었다.

아마 전자가 웃을 확률, 후자가 안 웃을 확률인데 눈으로 몇 개 샘플링해서 본 결과 얘가 제대로 분류를 하는게 맞는지 의문이다. 코드로 좀 더 쪼개봐서 이건 테스트를 해봐야겠다.

추가로 동물 포즈와 스마일 관련 인간 프레딕터는 일단 clustering 기반으로 접근을 해볼까 한다. 같이 스터디하는 동기가 contrastive learning에 꽂혀서 그 친구 발표를 듣다보니 이거를 기반으로 나도 한번? 이라는데서 생각이 들었다. 한 번 조언을 구해보니 이 동기말로는 웃음이나 포즈같은 되게 작은 attribute은 분리가 잘 될까 싶지만 일단 해 볼만한 가치가 있다고 해서 시도해보려고 한다. 사수에게 말해보니 일단 그러면 근본인 KNN부터 한 번 때려봐라! 그래서 KNN 함 때려보려고 한다...

resizing은 하고 해야겠지? 512X512로 10000개 KNN 했다가는 GPU 박살날지도 모른다.

+) NeRF 쪽도 새로운 task를 하나 받았다. 3dmm coordinates과 world coordinates간의 transformation matrix를 어떻게 구하는가에 대한 방법론인데... 차차 정리해봐야지...

아무튼 오늘의 교훈: 뭐든지 가져온 코드 안에 답이 있다.

profile
글많은 개발자

0개의 댓글