Giter Club home page Giter Club logo

final-project-level3-cv-18's Introduction

Untitled

0️⃣ Final Project 수행 목표

  • 문제 정의를 통해 AI 를 실제 서비스를 출시해보는 연습을 해본다.
    • 기존 AI 서비스 조사를 통해 트렌드와 서비스 출시의 기저를 파악해본다.
    • 서비스 기획, 데이터셋 조사 및 준비, 모델링, 웹 프로토타이핑, 모델 서빙 등 전체 과정을 직접 구현해본다.
  • AI 대회 참여와 실제 서비스 구현 사이의 차이를 몸소 깨달아본다.
    • AI 대회: 추최 측의 데이터 이용가능. 평가 Metric 제공. 참가자들 사이의 공유 문화
    • 실제 서비스: 서비스 요구사항만 있음. 데이터 없음. 평가 Metric 없음.

1️⃣ 문제 정의

1-1. 시장 조사

1-2. 서비스 기획 주제

  • OCR 을 이용해 신발 tag 에 있는 품번을 인식하여 웹 상의 정보를 사용자에게 제공

1-3. 서비스 기획 세분화

  • 사용자의 사진 입력
    • 사용자는 서비스에 본인의 사진을 업로드한다.
    • 업로드한 사진에서 품번이 있는 부분을 잘라낸다.
  • 정보 제공
    • 품번 인식이 제대로 된 경우, 가격 등의 상품 정보를 제공받는다.
  • 데이터 생성
    • 오프라인 유저들의 패턴을 파악을 위한 로그 데이터를 쌓는다.

2️⃣ 서비스 흐름도

순서도

3️⃣ 서비스 요구사항

  • 정성적 요구사항: 상품번호 타이핑 시간보다 빠르게 OCR 인식
  • 정량적 요구사항: 이미지를 잘라낸 시점부터 정보를 제공받기까지 5초 이내

4️⃣ 서비스 시스템 구조

시스템구조도

  1. 사용자가 사진을 업로드하고 품번이 있는 부분을 잘라낸다.
  2. 잘린 사진을 OCR 인식기 모델이 있는 백엔드로 전송한다.
  3. 전송 받은 사진에 대해 모델이 예측을 수행하여 품번 label 과 confidence score 를 다시 프론트로 전송한다.
  4. 예측된 품번 label 이 잘못된 경우 label 수정을 하도록 유도한다.
  5. 품번 label 을 Naver API 서버에 전송하여 상품명, 최저가 등의 정보를 다시 프론트로 전송하여 띄워준다.
  6. 품번 label 과 사용자가 잘라낸 이미지를 Google Cloud Storage 에 저장한다.

5️⃣ 데이터셋

5.1. 수집한 데이터셋

  • 참여자 1명당 20~30장을 직접 찍어 구성한 데이터셋 총 153장

    • 촬영장소는 주로 각자의 집 혹은 외부의 신발 매장.

    데이터_원본_학습

    직접 찍은 사진의 원본 (좌)

    원본에서 품번만 잘라낸 이미지 (우)

5.2. 생성한 데이터셋

  • 아래의 레포지토리를 참고하여 생성한 데이터셋으로 현 시점의 테스크를 위한 인식기를 학습시키기에 적합하다고 판단.

    데이터_생성

5.3. 학습 데이터셋 버전 관리

  • "모델 학습, 모델 추론, 데이터셋 버전 업데이트" 를 하나의 cycle 로 생각하여 cycle 을 돌리면서 데이터셋 버전 업데이트에 따른 성능 변화를 관찰
    • v1.0
      • 기본값으로 생성한 이미지 500장으로 모델을 학습
      • 모델 추론을 통해 기울어진 텍스트, 특이한 폰트 등에서 모델이 약한 부분을 관찰
      • 텍스트 각도, 폰트를 고려한 이미지 추가를 데이터셋 버전 업데이트 방향으로 설정
    • v2.0
      • v1.0 에서 0~30도 기울어지고 다양한 폰트를 갖는 이미지를 800장 추가
      • 모델 추론을 통해 90도정도 기울어진 텍스트, 긴 문자열 등에서 모델이 약한 부분을 관찰
      • 더 많이 기울어지고 텍스트의 길이를 늘린 이미지 추가를 데이터셋 버전 업데이트 방향으로 설정
    • v2.1
      • v2.0 에서 더 많이 기울어지고 텍스트 길이가 더 긴 이미지를 500장 추가
      • 모델 추론 결과, 기존 v2.0 에서의 문제 해결이 불가능하고 오히려 정확도를 낮춤
      • 위 이유들로 v2.1 은 기각

6️⃣ 모델링

6.1. 모델 선정

ViTSTR

  • https://github.com/roatienza/deep-text-recognition-benchmark

  • 성능 비교 테이블

    Model name Pretrained model Model after Fine-tuning
    ViTSTR-Tiny 24.35% 42.31%
    ViTSTR-Tiny+Aug 21.80% 63.46%
    ViTSTR-Small 28.85% 63.46%
    ViTSTR-Small+Aug 28.85% 58.33%
    ViTSTR-Base 33.33% 58.97%
    ViTSTR-Base+Aug 37.82% 60.90%

    Accuracy 측정

  • 위와 같은 정확도 결과를 얻어으나 아래의 더 좋은 결과를 얻어 ViTSTR 모델은 사용하지 않기로 결정

clova-ai deep-text-recognition-benchmark

  • https://github.com/clovaai/deep-text-recognition-benchmark

  • 성능 비교 테이블

    Model name Pretrained model Model after Fine-tuning
    None-ResNet-None-CTC 38.14% 63.91%
    None-VGG-None-CTC 8.2% 77.32%
    TPS-ResNet-BiLSTM-Attn 43.29% 82.47%
    TPS-ResNet-BiLSTM-CTC 62.88% 85.56%
    TPS-ResNet-BiLSTM-Attn-case-sensitive* 49.35% 73.07%

    *: 이 모델은 특수 문자를 인식함.

    Accuracy 측정

  • 특수 문자를 인식해야하고 영어 대문자를 인식해야하는 task 임을 고려하여 정확도는 조금 낮지만 case-sensitive 모델을 선정

6.2. 데이터셋 버전에 따른 성능 변화

  • 최종 모델 TPS-ResNet-BiLSTM-Attn-case-sensitive (a.k.a. TRBA-sensitive) 를 학습시켜 정확도를 관찰

  • 성능 비교 테이블

    데이터셋 버전 v1.0 v2.0 v2.1
    정확도 66.67% 75.65% 67.95%

    v2.1 의 경우, 정확도도 떨어지고 v2.0 에서의 문제 해결에 도움이 되지 않아 최종 데이터셋 버전은 v2.0 으로 결정

7️⃣ 모델 평가

7.1. Metric 선정

  • 성능 평가 : 정확도(Accuracy)
  • 속도 평가 : CPU/GPU 추론 속도

7.2. 정량 평가

  • 최종 정확도: 75.65%
  • 최종 속도: 1초(V100 GPU), 6초(CPU)

7.3. 정성 평가

  • 일반적인 경우

  • 텍스트 길이가 긴 경우

  • 90도 회전되어 있는 경우

8️⃣ 프로토타입

  • 프론트엔드
    • streamlit 을 이용하여 구현
  • 백엔드
    • Fast API 를 이용하여 구현
  • 스토리지
    • 구글 클라우드 스토리지를 이용
  • 구현 데모 페이지

🔟 서빙

Appendix A. 참여자

이름 (캠퍼ID) Github 역할 비고
김서기 (T2035) Link 모델 실험, 백엔드(GCP, 네이버 검색API 연결), 프론트엔드(Streamlit), 데이터 수집 및 라벨링
김승훈 (T2042) Link 베이스라인 구축, 모델 실험, 백엔드(FastAPI, GCP), 데이터 생성, 데이터 수집 및 라벨링
배민한 (T2260) Link 모델 실험, 프론트엔드(Streamlit), 데이터 수집 및 라벨링, 발표
손지아 (T2113) Link 베이스라인 구축, 모델 실험, 프론트엔드(Streamlit), 데이터 관리, 데이터 생성, EDA, 데이터 수집 및 라벨링
이상은 (T2157) Link 목업 디자인, 데이터 수집 및 라벨링 퇴소
조익수 (T2213) Link 모델 실험, 프론트엔드(Streamlit), 데이터 수집 및 라벨링

Appendix B. (개인 회고 등)

final-project-level3-cv-18's People

Contributors

minhan-bae avatar oikosohn avatar seogi98 avatar tmdgns1139 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.