배경제거 카메라 화질 개선 - 회고

liko apps·2025년 3월 4일
0

iOS 앱 개발

목록 보기
3/3

1. 들어가기전에

  • 딥러닝을 전문적으로 공부한 것은 아니며, 시행착오를 겪으며 얻은 경험을 정리한 글입니다.
  • 더 나은 방법이 있을 수 있으니 재미로(?) 봐주세요.

2. 문제 인식

  • 배경제거 카메라 앱 출시 이후 "화질이 좋지 않다"는 피드백이 많았습니다.
    화질이 좋지 않다는 의미를 아래 두 가지로 볼 수 있을것 같습니다.
  1. 화면에 보이는 이미지 퀄리티
  2. 배경제거된 결과의 퀄리티
  • 이 글에서는 배경제거 결과 퀄리티 개선에 대한 이야기만 다룹니다.

3. 배경제거 퀄리티 개선 방법

  • 이쪽 업계(?) 논문을 뒤져보니 크게 두가지 방법으로 개선할 수 있을 것 같았습니다.
  • 배경제거라는게 원하는 사물과 나머지를 분리하는 것이고, 최종적으로 원하는 사물의 마스크 이미지를 잘 생성하면 좋은 퀄리티라고 할수 있겠네요.
  1. 처음부터 마스크 이미지를 잘 만든다 -> 지금보다 더 좋은 딥러닝 모델로 변경한다.
  2. 이미 생성된 마스크 이미지를 개선한다 -> 마스크 개선용 딥러닝 모델을 추가한다.
  • 이번엔 2번 방법을 선택하기로 했습니다.

4. 적당한 모델 찾기

  • 마스크 이미지 개선 딥러닝 모델을 찾고, Pretrained Model을 iOS 에서 사용할 수 있도록 coremltools로 CoreML모델로 변환했습니다.

  • 그 결과 용량이 130메가짜리 CoreML 모델이 나왔고, 이를 아이폰 15 프로에서 1초가 넘는 추론시간이 필요했습니다.


5. 모델 최적화 하기

  • 다행히 coremltools 에는 optimize방법들을 제공하고 있었습니다.

  • 간단하게 스크립트를 만들어서 각종 옵션들과 최적화 방법 등등을 적용해서 약 180개의 최적화된 모델들을 생성했습니다.

  • 그리고 각 모델들의 퀄리티 / 용량 / 속도 등을 비교하기 위해 스크립트를 만들었습니다.
    퀄리티 비교는 iOS Vision 라이브러리에 있는 이미지 유사도 비교 API를 사용했습니다.

  • 이를 통해 최적화된 후보 모델 몇 가지를 골랐습니다.


6. iOS 기기에서 돌려보기

  • iOS에서 CoreML 모델을 돌릴 때는 CPU / GPU / NE (뉴럴 엔진) 3가지 방법(이하 계산 유닛)을 사용할 수 있습니다.

  • 최적화를 했지만 그럼에도 불구하고, 일부 기종에서는 계산 유닛에 따라 사용하기가 힘들다는 결론을 얻었습니다.


7. 모델 수정하기

  • 공개된 모델을 모바일에서 사용할 수 있게 수정하기로 했습니다.

  • 백본 네트워크를 모바일 최적화된 모델로 변경하고, 일부 레이어 구조를 변경했습니다.
  • 학습에는 2021년 맥북 M1 Pro 16GB 모델로 약 3일이 걸렸습니다.
  • 학습된 모델은 용량이 13메가였고, 속도도 기존과 비교할 수 없을 정도로 빨라졌습니다.
  • 이를 8비트 팔레트 최적화만 해서 약 6.8메가로 최종 모델을 생성해냈습니다.

8. 다시 iOS 기기에서 돌리기

  • 모바일에 최적화된 새로 만든 딥러닝 모델은
    • 아이폰 SE에서는 CPU로 약 1.5초 정도 걸리는데 메모리가 부족해서 포기
    • 아이폰 12에서는 GPU에서 모델 로드 2초, 추론은 1초 이내
    • 아이폰 15프로에서는 NE에서 모델 로드시 최초 1초 이내, 추론은 0.4초 이내

  • 위와 같은 최종 결과를 얻었습니다.

9. 결론

  • 실제 적용 결과는 아래와 같습니다. 아래가 수정된 모델, 위가 기존 모델
  • 일부 결과는 오리지널 딥러닝 모델에 비해 아쉬운 점이 있지만
  • 작은 용량, 빠른 로드/추론 속도를 얻을 수 있었습니다.

### 10. 앞으로
  • 더 정교한 백본 모델 적용 및 레이어 구조 개선 예정.
  • 마스크 개선뿐 아니라 처음부터 마스크를 잘 생성하는 모델도 연구 계획.

  • 배경제거 카메라앱은 앱스토어에서 확인 할 수 있습니다.
    (참고로 유료앱입니다)

// 3줄 요약

- 배경제거 카메라 앱의 마스크 퀄리티 개선을 위해 딥러닝 모델을 찾아서 테스트
- 속도 부족으로 모바일에 최적화된 모델 학습 및 최적화 처리
- 더 나은 속도, 퀄리티, 작은 용량의 딥러닝 모델 생성해서 앱에 적용함.

끝.

profile
제주에서 iOS 앱을 만들고 있습니다. 개발관련 회고 / 정리 블로그

0개의 댓글

관련 채용 정보