풀스택큐트리

cdc wiki
이동: 둘러보기, 검색

프로젝트 개요

기술개발 과제

국문 : 이미지 분석을 통한 고양이 감정 및 행동 기반 일기장 자동 생성 앱 프로젝트

영문 : App project that automatically generates diary based on cat emotion and behavior through image analysis

과제 팀명

풀스택큐트리

지도교수

황혜수 교수님

개발기간

2021년 3월 ~ 2021년 6월 (총 4개월)

구성원 소개

서울시립대학교 컴퓨터과학부 20169200** 이**(팀장)

서울시립대학교 컴퓨터과학부 2016XXX0** 노**

서울시립대학교 컴퓨터과학부 2016XXX0** 도**

서울시립대학교 컴퓨터과학부 2016XXX0** 최**

서울시립대학교 컴퓨터과학부 2015XXX0** 황**

서론

개발 과제의 개요

개발 과제 요약

  • 고양이 일기장 플랫폼을 iOS, Android 앱으로 제공합니다.
  • 최신 컴퓨터 비전 딥러닝 기술로 고양이의 행동 및 감정 패턴 이미지를 분석하여 글을 생성하여 마치 고양이가 일기장을 쓴 것 같은 경험을 제공합니다.
  • 고양이마다 챗봇을 제작하여 유저에게 즐거움을 제공합니다.

개발 과제의 배경

  • 저희의 이미지의 고양이의 행동 및 감정 분석은 저희만의 독창적 기술입니다. 특히 학습용 데이터를 따로 구하지 않아도 된다는 점에서 학습 비용을 절감합니다.

개발 과제의 목표 및 내용

  • 초 저비용으로 인공지능 API 및 서버를 설계합니다.
  • 고양이 감정 분석 기술과 챗봇 기술을 제공합니다.
  • 무중단 배포를 통한 안정적인 서비스를 운영합니다.
  • 크로스 플랫폼 웹앱을 제공합니다.

관련 기술의 현황

관련 기술의 현황 및 분석(State of art)

  • 전 세계적인 기술현황
    • CLIP : Learning Transferable Visual Models From Natural Language Supervision 은 Open AI 에서 만든 혁신적인 인공지능 모델입니다. 기존에는 지도학습으로 이미지에 대한 라벨 정보를 학습을 할 수가 있었는데 CLIP은 이미지에서 추출한 피처 정보와 텍스트에서 얻은 피처 정보 사이의 유사도를 계산하는 것을 학습합니다. 따라서 처음 본 라벨의 정보가 입력으로 들어와도 CLIP은 Zero-shot classifier를 통해 이미지의 정보를 분류할 수가 있습니다.
    • Transformer : 챗봇을 생성하기 위해 사용합니다. 트랜스포머(Transformer)는 2017년 구글이 발표한 논문인 "Attention is all you need"에서 나온 모델입니다. 기존의 seq2seq의 구조인 인코더-디코더를 따르면서도, 논문의 이름처럼 어텐션(Attention)만으로 구현한 모델입니다. 이 모델은 인코더-디코더 구조를 설계하였음에도 성능이 RNN보다 우수하다는 특징을 갖고있습니다. 이는 Hidden State정보를 RNN 바로 직전의 벡터만 고려하지만 Transformer는 전체 Conext의 정보를 고려하기 때문입니다.
    • Jenkins : 젠킨스(Jenkins)는 소프트웨어 개발 시 지속적 통합 서비스를 제공하는 툴입니다. 젠킨스를 통해 빌드 자동화가 가능합니다. 또한 소프트웨어 빌드 현황에 대한 대쉬보드를 제공하여 여러가지 배포 작업의 상황을 모니터링 할 수 있습니다. 이를 통해 프로젝트 진행의 효율성을 높일 수 있습니다.
    • AWS : 현재의 예산으로 On-premise의 서버를 구성하는 것은 불가능하며 최근 대부분의 기업들이 사용하고 있는 클라우드 서버를 이용함으로써 예산을 감축합니다. 서비스의 규모에 맞게 서버의 성능을 결정지을 수 있는 장점을 갖고 있으며 Scale up/out시에도 유연하게 처리가 가능하며 무엇보다 서버를 구성함에 있어 네트워크, 보안 등을 관리함에 있어 On-premise보다 훨씬 간편하게 관리가 가능합니다.
  • 특허조사 및 특허 전략 분석

Open AI CLIP은 MIT License를 따르고 있어 영리적 목적으로 사용가능합니다.

  • 기술 로드맵

내용

시장상황에 대한 분석

  • 경쟁제품 조사 비교

기존 경쟁 제품들에 있어서 동물 감정 분석이란 음성으로 분석을 시도하는데 저희는 이미지 기반으로 동물들의 감정 분석이 가능합니다.

  • 마케팅 전략 제시
    • 마케팅 전략은 Customer Driven Marketing Strategy를 사용합니다.
    • Customer Driven Marketing Strategy은 타겟 마켓을 식별하기 위해 마케팅을 하면서 그들의 요구에 지속적으로 대응하는 것입니다. 이러한 마케팅 전략은 고객을 유지하고 고객과 강력한 관계를 구축하는데 도움이 됩니다. 고양이 관련 동아리 운영진의 요구에 지속적으로 대응하면서 끈끈한 관계를 유지할 예정입니다.
    • 이후 서비스 안정화가 된 이후 서비스의 확대가 가능하면 서울시립대 이외에도 다른 서울 주요 대학을 대상으로 서비스를 확대할 예정입니다.
    • Tensorflow KR 등 커뮤니티에 관심을 환기시키면서 저희 어플리케이션의 가치를 키워나갈 것입니다. 그 후 Naver D2나 스타트업처럼 확장을 고려할 것입니다.

개발과제의 기대효과

기술적 기대효과

  • 고양이 감정 분석 기술과 챗봇 기술을 제공합니다.
  • 초 저비용으로 인공지능 API 및 서버를 서비스합니다.
  • 무중단 배포를 통한 안정적인 서비스를 운영합니다.
  • 크로스 플랫폼 웹앱을 제공합니다.

경제적, 사회적 기대 및 파급효과

  • 고양이 페르소나를 제공하여 코로나 시국으로 인하여 외로움을 많이 타는 현대인들에게 힐링 효과를 줍니다.

기술개발 일정 및 추진체계

구성원 및 추진체계

  • 최형진 - 냥중일기 UI/UX, 크로스 플랫폼 앱 설계 및 구현, Play 스토어 출시
  • 이승현 - 고양이 일기장 생성 인공지능 제작, 챗봇 제작
  • 황제홍 - AWS EC2, RDS를 사용한 배포환경 구축 및 관리, API Server 구현(User)
  • 도형림 - 데이터베이스 설계 및 구축, API Server 구현(Cat, Follow)
  • 노원석 - API Server 구현(Diary), 분산 비동기 작업 처리, 빌드 및 배포 자동화

설계

설계사양

제품의 요구사항

  • 정확성
    • 고양이 이미지에 대한 행동 및 분석 결과에 대한 정확도가 어떻게 되는가?
    • 서비스를 이용함에 있어 개인정보(비밀번호 등)의 관리가 철저하게 이루어질 수 있는가?
  • 효율성
    • 서버 요청 속도가 실시간인가?
    • 많은 사용자가 동시에 사용할 수 있는가?
  • 신뢰성
    • 서비스를 이용함에 있어 개인정보(비밀번호 등)의 관리가 철저하게 이루어질 수 있는가?
    • 보유한 고양이 이미지를 통해 일기장을 생성했을 때, 시간이 어느정도 걸리더라도 요청이 누락되지 않고 올바른 응답을 받을 수 있는가?
    • 챗봇을 이용함에 있어 고양이와 대화를 나눈 내용이 데이터베이스에 저장되지 않고 대화가 끝남과 동시에 파기되어 개인 정보를 보호할 수 있는가?
  • 편의성과 디자인
    • 복잡한 과정 없이 원하는 기능을 직관적으로 사용할 수 있는가?
    • Google의 Material design system 가이드라인을 준수하였는가?
  • 테스트 및 수정 변경성
    • 각 기능에 해당하는 요구사항이 계획대로 잘 구현되었는가?
    • 트래픽이 몰릴경우 시간 지연이 원만하게 해결되었는가?
    • http 통신을 통한 api가 입력 값에 대한 올바른 출력 값이 도출되는가?
  • 오류 방지
    • 서비스 이용시 사용자가 서버 오류를 경험하지 않도록 하였는가?
    • 서버에 500에러가 발생하였을 때 다른 status값을 통해 서버가 터지는 경험을 하지 않도록 하였는가?

설계 사양

  • AWS EC2
  • Goorm
  • Heroku

개념설계안

  • 딥러닝 기반 고양이 이미지 감정 및 행동 패턴 분석
    • 딥러닝을 이용해서 고양이의 감정 및 행동을 분석합니다. OpenAI의 CLIP(Connecting Text and Images) 모델로 고양이의 행동 및 감정 데이터가 없더라도 이미지를 Zero-shot 추론합니다.
    • OpenAI의 CLIP은 이미지와 텍스트 유사도를 학습합니다.
      • Contrastive Pre-training 은 사전학습된 이미지넷, Transformer로 각각 도메인으로부터 임베딩을 얻습니다. 이렇게 얻은 임베딩을 Fully Connected Layer로 차원이 같아지게 만들고 이를 요소곱하여 코사인 유사도가 1이 되도록 학습합니다. 잘 학습된 이미지넷과 텍스트 트랜스포머 네트워크가 있다면 학습할 수 있습니다.
      • Create Dataset Classifier from label text 은 CLIP의 학습이 끝나면 정답 데이터인 Label이 아닌 새로운 text, 예를 들어 밥을 먹는 고양이와 같은 테스트가 입력으로 들어와도 이미지와의 유사도를 계산을 할 수가 있습니다.
      • Use for Zero-shot Prediction 은 학습을 하지 않은 새로운 text label에 대하여 추론을 할 수 있다는 것을 의미합니다.
    • Open AI에서 제공하는 CLIP은 한국어 데이터의 부재로 영어를 다시 한국어로 바꿔야 하는 문제가 있습니다. 한국어 문제를 해결하고자 저희가 고안한 방법은 다음과 같습니다.
      • 텍스트 임베딩을 얻을 때 사용하는 네트워크를 Hugging Face의 다국어 임베딩으로 사용합니다. 영어로 된 데이터로 학습을 하더라도 언어끼리 비슷한 의미를 가지면 비슷한 임베딩을 얻을 수가 있기 때문입니다.
      • 위 방식으로 COCO Image Captioning 영어 데이터를 활용하여 한국어 CLIP을 학습을 할 수 있습니다.
    • GPU 배포 서버 비용 문제가 있습니다. 저희는 서비스 비용 절감을 위해 아래와 같은 방법을 사용합니다.
      • DistillBERT를 사용합니다. 기존 BERT는 텍스트 임베딩의 성능은 좋지만 모델의 크기가 800MB로 서비스에 바로 적용하기에 무리가 있습니다. 따라서 저희는 BERT의 경량화 버전인 DistillBERT를 사용하여 서비스에 적용합니다. 이는 약 300MB로 좀 더 경제적인 모델 배포를 할 수 있습니다.
      • 이미지 넷 임베딩으로 ResNet34를 사용합니다. Residual 구조로 정확하면서도 경제적인 모델 배포가 가능합니다.
  • 고양이 챗봇
    • 다양한 성격을 가진 고양이 챗봇을 제공합니다.
    • 챗봇에서 사용할 모델은 Transformer입니다. RNN, LSTM과는 다르게 Attention 아키텍처는 문장 전체 문맥을 파악해서 문장을 생성할 수 있습니다.
  • 딥러닝 모델 Inference 최적화 및 API 디자인
    • RESTful API를 기반으로 설계하여 자원에 대한 의미와 행위가 명확히 드러나도록 설계했습니다.
    • Python Django Rest Framework와 그 안의 authentication system을 이용하여 RESTful API 및 인증을 구현했습니다.
    • 고양이 일기장 생성 API에서 AI 서버와 통신하는 부분에서 비동기 작업 처리를 위해 Celery 및 RabbitMQ를 구축했습니다.
  • 빌드 및 배포 자동화
    • 서버에 코드가 업데이트되어 Git에 Push가 되면 Docker Hub가 주기적으로 확인을 하여 새로운 이미지를 빌드하여 배포합니다.
    • 실제 서버 인스턴스 내에서 최신 빌드된 이미지를 pull 받아서 최신 이미지를 실서버에 즉각 반영합니다.
    • Jenkins에 배포 스크립트를 등록해 두어 배포시 매번 같은 과정을 반복하지 않도록 하였습니다.
    • Jenkins에서 제공하는 대쉬보드를 지속적으로 활용하여 서버의 상태를 확인 및 관리할 수 있습니다.

이론적 계산 및 시뮬레이션

  • 모바일 이용자는 플레이스토어에서 어플리케이션을 받아 설치합니다.
  • 모바일 이용자는 어플리케이션을 통해 냥중일기 서비스를 이용합니다.
  • 모바일 이용자는 어플리케이션을 통해 다른 이용자가 포스팅한 고양이 일기를 확인 할 수 있으며 이용자 또한 보유한 고양이 사진을 통해 자신만의 새로운 고양이 일기장을 생성할 수 있습니다.
  • 모바일 이용자는 고양이와 대화하기 (이하 챗봇)을 통해 시스템 관리자가 미리 생성해놓은 다양한 고양이 챗봇을 이용해 고양이와 실제로 대화하는 듯한 경험을 제공 받을 수 있습니다.
  • 기본적으로 서비스의 요청은 API서버가 담당합니다. 단, 챗봇 요청에 대해서는 클라이언트가 인공지능 서버에 직접 요청합니다.
  • 일기장 생성 기능의 경우에는 클라이언트가 API 서버에 사진을 보내 일기장 생성을 요청하면 API 서버는 이를 인공지능 서버에 보내 사진의 분석을 의뢰합니다. 인공지능 서버는 API 서버로 부터 받은 사진을 분석해 고양이의 행동 및 감정을 분석한 뒤 API 서버에 응답 결과로써 제공하며, API서버는 제공받은 응답 결과를 RDS에 저장함과 동시에 해당 결과를 클라이언트에 응답으로 제공합니다.
  • NAVER Cloud Storage에는 이용자의 프로필 사진, 포스팅 된 고양이 일기장 이미지가 저장됩니다.
  • AWS RDS에는 NAVER Cloud Storage에 저장된 이미지의 URL을 포함하여, 유저 가입 정보(아이디, 비밀번호 등)과 포스팅한 일기장의 내용 등 모든 정보들이 저장됩니다.

상세설계 내용

시스템 설계

Fsqt systems.png

기능 구현을 위한 세부기술 선택사항

AI

  • CLIP(Connecting Text and Images) : 이미지와 텍스트의 유사도를 계산하는 인공지능 4억개의 이미지-텍스트 쌍의 사전 학습된 가중치로 이미지와 텍스트의 유사도를 계산한다.
  • Transformer : 학습된 언어 모델로 고양이처럼 말하는 텍스트 생성

Front-end

  • Vue.js
    • 웹 애플리케이션의 사용자 인터페이스를 만들기 위해 사용하는 open source progressive 자바스크립트 프레임워크
    • MVVM패턴의 ViewModel 레이어에 해당
    • 고성능의 싱글 페이지 애플리케이션(SPA)을 구축하는데 이용
  • Vuex
    • Vue.js 애플리케이션을 위한 상태 관리 패턴 및 라이브러리
    • 애플리케이션의 모든 컴포넌트에 대한 중앙 집중식 저장소 역할을하며 예측 가능한 방식으로 상태를 변경
    • 효율적인 업데이트를 위해 세분화된 반응 시스템을 활용하도록 특별히 고안된 라이브러리
  • Quasar Framework
    • 다양한 형태의 반응형 웹사이트 및 웹앱을 빠르게 만들 수 있게 해주는 Vue.js 기반 프레임워크
    • Quasar의 모토 "한번 쓴 코드로 동시에 웹사이트, 모바일 앱 등 다양한 형태로 배포하자"
    • Google의 Material design guideline을 준수
  • Capacitor
    • 모던 웹 앱을 iOS, Android에서 네이티브로 실행되도록 도와주는 크래스 플랫폼 네이티브 런타임
    • 앱이 웹 표준을 가능한 준수할 수 있도록 웹 기반의 API를 제공하면서도 플랫폼에 따른 네이티브 API도 지원

Back-end

  • Django
    • Python 기반으로 작성된 오픈소스 웹 프레임워크
    • Model-Template-View의 MTV 디자인 패턴
    • 안정성, 확장성, 완결성 있는 서버를 신속하게 만들 수 있다.
  • Celery
    • 방대한 양의 메시지를 처리하는 간단하고 유연하며 신뢰할 수 있는 분산 시스템이며 이러한 시스템을 유지하는 데 필요한 도구를 제공
    • 실시간 처리에 중점을 둔 작업 대기열이며 작업 예약도 지원
  • RabbitMQ
    • AMQP 프로토콜을 구현한 메시지 브로커
    • 생산자에게 메시지를 받아 소비자에게 전달해주는 서비스로 시스템 간 메시지를 전달해주는 오픈소스 메시지 브로커 소프트웨어
  • Docker
    • 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼
    • Docker Hub가 서버 코드를 주기적으로 확인을하여 새로운 이미지를 빌드하여 서버에 배포
    • 실제 서버 인스턴스 내에서 최신 빌드된 이미지를 라이브 서버에 즉각 반영
  • Jenkins
    • Jenkins는 소프트웨어 개발 시 지속적 통합 서비스를 제공하는 툴
    • 배포 스크립트를 통해 매번 같은 과정을 자동으로 해준다.
    • 제공하는 대쉬보드를 지속적으로 활용하여 서버의 상태를 확인 및 관리할 수 있다.
  • MySQL
    • 오라클 사에서 관리 및 지원하고 있는 오픈소스 관계형 데이터베이스
    • 대용량의 테이블을 아주 빠르고 효과적으로 처리할 수 있음

배포환경

  • AWS EC2
    • amazon 사에서 제공하는 클라우드 호스팅 서비스
    • 유연한 확장과 높은 보안성 및 안정성
    • t2.medium 사용중(2Core, 4GiB RAM, 50GB Storage)
  • RDS
    • AWS database server로 s3 스냅샷으로 빠른 백업 스토리지 확장 용이
    • RDS 내부에 MySQL DBMS를 설치하며 사용

결과 및 평가

완료 작품의 소개

프로토타입 사진 혹은 작동 장면

시연 영상

고양이 일기장 사진 제출

  • 올리고자 하는 사진을 선택 후 Drag, pinch and zoom으로 간단한 편집을 합니다.

FSQT-Image01.png

  • 해당 일기장에 원하는 해시태그를 추가합니다. 고양이 이름이나 특징 상황에 대한 묘사를 추천합니다.

FSQT-Image02.png

  • 업로드 후 고양이가 일기장을 다 쓰고 게시하면 알림이 옵니다.

FSQT-Image03.png FSQT-Image04.png FSQT-Image05.png

고양이 챗봇

  • 하단 Navigation bar의 세번째 탭 (고양이 아이콘) 을 터치하면 아래와 같이 챗봇 목록이 나온다.

FSQT-Image06.png

  • 하나를 선택하여 챗봇 대화를 할 수 있다.

FSQT-Image07.png

포스터

FSQT-Poster-resized.png

관련사업비 내역서

  • 도메인 등록 : 10만원
  • 스토리지 : 10만원
  • 개발자 등록 : 10만원
  • AWS 서버 : 10만원

완료작품의 평가

평가 항목 평가 방법 적용 기준 개발 목표치 비중 평가 결과
1. 일기장 생성 api 응답 시간 소요 시간 계산 5초 이내 평균 응답 시간 5초 40% 평균 5초
2. api 오류율 200 코드 200 확률 계산 100% 20% 부하테스트 통과
3. 파일 업로드 속도 파일 업로드 소요시간 측정 3초 이내 평균 응답 시간 3초 20% 통과
4. UI 평가 리뷰 측정 별점 5점 20% 4.6점

향후계획

  • 앱스토어 출시 : 현재 플레이스토어를 통해 안드로이드 앱으로 배포 및 출시한 상태입니다. iOS에 맞는 설정 및 빌드 후, 앱스토어에 출시할 예정입니다.
  • 메인페이지 무한스크롤 도입 : 현재 일기장 리스트를 서버로부터 요청할 때, 모든 일기장을 불러오고 있습니다. 저장된 일기장이 많아질수록 문제가 생길 것 입니다. 따라서, 무한스크롤을 도입해서 유저가 원한 만큼의 일기장만 받아올 수 있도록 수정할 예정입니다.
  • 다양한 유저 반응 추가 : 일기장에 대한 유저의 반응은 좋아요 기능, 단 하나밖에 없습니다. 좀더 다양한 커뮤니케이션이 가능하도록 일기장 댓글 기능을 추가할 예정입니다.
  • 고양이 판별기 추가 : 만약 고양이 사진이 아닌 사진을 무분별하게 업로드하는 것을 방지하기 위해서 고양이 사진을 감지하는 인공지능을 도입할 예정입니다.
  • 챗봇 고양이 추가 : 챗봇 고양이 종류는 상담 고양이와 무야호 고양이, 단 2종류로, 사용자가 고양이 챗봇 기능을 즐기기에는 한없이 부족합니다. 따라서, 유저가 저희 앱을 더 재미있게 즐길 수 있도록 하기 위해서 다양한 종류의 고양이 챗봇을 제공할 예정입니다.