학부 수업 중 진행한 프로젝트를 업로드 합니다.
Project의 주제는 Transformer나 Generative model, transfer learning 들 중 하나를 Computer vision혹은 NLP에 적용하여 가장 기본적인 모델과의 차이를 보이는 것이었습니다.
저희가 정한 것은 GAN과 Faster R-CNN을 결합해보자! 였고, 꽤 오래 고민한 끝에 DeblurGAN이라는 method를 찾아내었습니다. 매우 드물지만, object detection은 흔들린 사진이나 초점이 안맞는 사진에서도 필요할 수 있다고 생각했고, 분명 해당 상황에서 모델의 성능은 낮을 것이라고 생각했습니다. 그래서 GAN을 이용해 사진들을 보정하여 object detection을 진행하여 성능 비교를 해보자고 프로젝트를 결정하였고, 크게 부담되지 않는 작업들 위주였기에 결과를 어렵지 않게 뽑아낼 수 있었습니다.
그전에 데이터들을 Customize해야했는데 해당 방법은 OpenCV를 사용하였습니다. 사용된 Dataset은 COCO2017 Validation set이고, 왜 Training set을 진행하지않았나 함은 Training작업을 거치기엔 GPU의 한계와 시간의 한계가 존재하였기 때문에 pre-trained된 모델을 사용하자고 결정하였기 때문입니다.
흔들린 느낌을 주기 위해 사진을 shift하여 투명하게 덧붙이는 작업을 진행하였고(Shaky), 초점까지 안맞는 경우를 고려하여 Gaussian blur를 사용해 사진을 흐리게 조정하였습니다. 아래는 예시입니다.
흔들린 효과를 나름 주었다고 판단하였고 따라서 이제 GAN을 사용하여 해당 사진을 개선하는 작업을 진행하였습니다. DeblurGAN은 blur화 된 사진을 FPN방식으로 조금이나마 개선시켜 이미지를 생성하는 GAN이었고, DeblurGANv2의 모델을 사용하여 작업을 진행하였습니다. Pre-trained모델이라 단순 Test만 시키는 작업을 진행하였고, Validation set (5000장) 기준 15분 안쪽으로의 시간으로 모두 Generate 완성하였습니다.
이렇게 보면 차이가 꽤 있는게 보이시죠? 몇개의 생성된 사진들을 보면 잘 복원된 사진들도 있는데 반해 흔들림 효과는 많이 고쳐지지 않은 사진들도 존재하였습니다. 아무래도 'Deblur'GAN이어서 그런듯 싶습니다. 그 부분을 간과한 것이 프로젝트가 개선되어야 할 점이겠죠..
그래서 이렇게 완성된 3개의 Data: original, shaky-blurred, generated sample 을 가지고 test를 진행하였습니다.
Object detection에 사용된 모델은 ResNet50을 Baseline으로 가지고 있는 Faster R-CNN으로 진행을 하였구요.. 물론 Pre-trained된 모델입니다. 그래서 COCO2017로 Training된 모델을 가지고 이미지 상황에 따른 성능 체크만 한 결과 , 아래와 같이 나왔습니다.
Generated sample이 shaky한 사진들과 shaky-blurred된 사진들보다 높은 object detection결과가 나옴을 수치상으로 확인할 수 있었습니다. 그리고 처음에 예상한대로, Original보다는 당연히 낮게 나왔습니다.
직접 이미지를 통해 확인해보면,
각종 잘못된 object detection들이나, detect되지 않았던 object들이 정상적으로 detect되는 경우가 생기는 상황을 가시적으로 확인할 수 있었습니다. 주로 작은 물체에서 GAN의 효과를 보았던 것 같습니다.
따라서 최종적으로 예상했던 상황들이 잘 도출되었고, GAN을 사용하여 이미지 복원에 대한 아이디어를 생각해낼 수 있지않을까 싶습니다. 아쉬웠던 점은 Training에 customized한 데이터 셋이나, Augmentation을 거친 데이터를 사용하지 않았기 때문에 Robust한 환경에서 더 좋게 나올 수 있는 경우를 Test하지 못한 것 같고(지금은 Pretrained된 모델의 성능으로만 데이터를 판단했음), GAN또한 흔들림에 대한 해결책이 조금 더 구현되었다면 원본과 가까운 사진으로 복원되지 않았을까 합니다. GAN을 직접 설계할 수 있다면,, (물론 그건 아직 Skill이ㅠㅠ) 그 부분이 해결될것으로 생각합니다.
개인적으로 아쉬운 점은 LaTex를 좀 배워보고 싶었는데 해당 부분을 많이 놓친부분 것(대신 코딩이랑 모델 구현은 제가 했으므로 같은 팀원 분도 제가 한 부분을 매우 하고 싶으셨을것같습니다..) 이 아쉽습니다. 정말 논문을 흉내라도 내보고 싶었는데 이렇게 흉내를 낼 수 있어서 좋은 기회였던 것 같습니다 :) 스킬을 많이많이 배워 저만의 결과물도 한번 내보고 싶네요.
'Deep Learning' 카테고리의 다른 글
AdaIN으로 생성한 Data의 이름과 json을 수정해보자! (0) | 2024.01.11 |
---|---|
YOLO에 적용할 COCO Json을 txt로 바꾸자! (2) | 2024.01.10 |
MMdetection: Faster R-CNN 구현하기 (0) | 2024.01.10 |
Basic한 Generative model 개념 (1) | 2024.01.10 |
Paper review: Occlusions for EffectiveData Augmentation in Image Classification (0) | 2024.01.10 |