본문 바로가기
Stable Diffusion 프로젝트

문제 해결방법에 대해

by haekyu31 2022. 10. 28.

  프로젝트 진행중 어떻게 프로젝트를 진행해야 점진적으로 완성해 나갈지에 대해 생각해보았다. 지금 진행중인 프로젝트는 medical report에서 label별로  주어진 chest x-ray image를 가지고 text 2 image 로 구현하는 것이다. 수행하기 위해 사용되는 기술로 Stable diffusion을 활용한 Dream Booth이다.  

 

  처음 DreamBooth example 대로 따라해서 sample 이미지를 얻었지만 드라이브에 학습된 모델을 저장하지 않아서 다시 진행해야했다. !accelerlate launch train_dreambooth.py를 통해 python을 실행시켜 학습한다는 개념은 알았지만 이후 Weight를 저장해야했는데 이부분을 생략했다. 그래서 알게된 점은 일반적으로 모델은 training 후 model의 Weight를 말한다는 것을 알게되었다. model을 하나의 label에 대해서 학습한 후 weight를 model.ckpt형태로 저장하면 우리가 원하던 model을 구한 것이다. 하나의 label에 대해서만 학습했기 때문에 다른 label 에 대해서 학습하도록 반복하면 최종 결과물을 얻을 수 있을 것이다. 

 

  문제 해결에 큰 도움이 되었던 부분은 기존의 Nodule 학습 이후 새로운 Normal을 학습하려고 할때 Nodule이 학습된 모델을 불러오는 것이 아닌 이전에 pretrained_model 을 불러와서 새롭게 학습된다는 점을 알려준 강사님의 피드백이었다.  처음 학습했던 model.ckpt를 불러오니까 나는 지금까지 모든 label을 학습하고 리셋하고 학습하고 리셋해왔던 것이다.  이부분에 대한 문제는 pretrained_model의 경로를 이전에 학습했던 model.ckpt의 path로 바꿔주었더니 원하는 방향으로 진행되었다.  Test의 형태로 Normal 15장, Mass 15장 씩 max_train_step을 50번 학습시켜 각 instance_prompt를 출력시키도록 만들었다. 결과는 다음과 같다.

Female chest x-ray test_image의 Normal과 Mass 

  test하기 위해 max_train_steps를 상당히 적게 주었기 때문에 image quality는 좋지 않다. 하지만 female의 특징이 나타나기도 하고 Normal 과 Mass 의 차이점을 보여주려고 하는 것 처럼 보여 아마도 train_steps를 더 높인다면 좋은 결과를 얻을 수 있다고 생각된다. 

train_steps=800 일 때

  참고로 이전에 train_steps를 높여서 만들어낸 image는 Nodule의 위치를 구현이 확실하게 느껴졌다. train model을 저장하는 단계를 해결했으니 이제 이미지를 넣고 실제 어느정도 차이가 나는지 학습하는 부분을 해결 할 차례이다. 

 

'Stable Diffusion 프로젝트' 카테고리의 다른 글

Stable diffusion v2.0의 발표  (0) 2022.11.28
colab에서 dreambooth 학습  (0) 2022.11.14
왜 conda venv를 쓰는지 생각  (0) 2022.11.03
ML inference란  (0) 2022.10.25
Stable diffusion 공부중  (0) 2022.10.24

댓글