Upgrade to Pro — share decks privately, control downloads, hide ads and more …

연구 결과를 적절히 서비스하려면?

Taein Kim
September 28, 2022

연구 결과를 적절히 서비스하려면?

연구실에서 만든 AI 모델을 실제 환경에서 서비스하기 위해 고려해야 할 환경들을 소개하였습니다.

Taein Kim

September 28, 2022
Tweet

More Decks by Taein Kim

Other Decks in Research

Transcript

  1. 연구결과를 적절히 서비스하려면? DSP Lab, Inha University Sep 28, 2022

    Taein Kim ([email protected]) Department of Electronic Engineering Inha University, South Korea
  2. 3 연구・개발 vs 서비스 주제 선정 연구 고도화 환경 탐색

    실용화 최적화 • 연구 범위 (본인 또는 연구실의 관심 분야) • 정량적 성능 (선정한 Ground Truth를 기준으로 한 성능) • 다양한 제약/제한 사항 (데이터셋의 규모, 적은 참여자, 실행 환경 등) • 기술의 유용성 (탑재할 가치가 있는가?) • 굉장히 넓어지는 사용층 (실용적인 데이터셋, 설득력 있는 UI/UX) • 가용성을 고려한 서비스 (예: 수만 명이 문제없이 사용할 수 있는가?)
  3. 4 시연을 위한 서비스 - 데이터 D3.js Javascript 기반 데이터

    시각화 라이브러리 Github page 같은 웹페이지를 통해 시연
  4. 6 시연을 위한 서비스 PC • WPF(C#), WinForm(C#), MFC, …

    Mobile • Android(Java, Kotlin), iOS(Objective C, Swift) Cross-platform • Xamarin(C#), MAUI(C#), Unity(C#), Qt(C++), … • Web기반: Electron, React Native, Blazor(+C#), … Server • Spring (Java) • ASP.NET Core (C#) • Node.js (Javascript) (+ Vue.js, React.js, …) • Django (Python)
  5. 8 딥러닝 모델을 활용하는 경우 - ONNX https://towardsai.net/p/computer-vision/yolov3-cpu-inference-performance-comparison%E2%80%8A-%E2%80%8Aonnx-opencv-darknet 리얼 환경에서

    딥러닝을 활용하려면 모델을 네이티브 환경으로 옮기는 과정이 필요 네이티브 환경에서도 성능 차이가 존재
  6. 9 딥러닝 모델을 활용하는 경우 (예시) • REST API 영상

    데이터 데이터 수집 앱 • GUI 어플리케이션 • 모바일 or PC 영상감정인식 서버 • 웹 API 서버 • 안면기반 감정인식 결과 전달 영상/음성 데이터 • JSON 감정인식 결과 음성감정인식 서버 • 웹 API 서버 • 음성기반 감정인식 결과 전달 • REST API 음성 데이터 • JSON 음성인식 결과 데이터 수집 장치 • 임베디드 혹은 PC 환경 • 음성, 영상 정보 취득
  7. 10 딥러닝 모델을 활용하는 경우 (예시) • REST API 영상

    데이터 영상/음성 데이터 • JSON 감정인식 결과 • REST API 음성 데이터 • JSON 음성인식 결과 OpenCV NAudio, OpenAL PC: WPF Mobile: Android Pytorch + Flask, FastAPI ONNX + ASP.NET Core
  8. 11 딥러닝 모델을 활용하는 경우 from typing import Union #

    pip install fastapi, python-multipart from fastapi import FastAPI, File, UploadFile from application import detect_emotion_single app = FastAPI() @app.get("/") def read_root(): return {"API starts with": "POST /api/ser/{timestamp}"} @app.post("/api/ser/single/{timestamp}") def detect_ser_emotion_single(timestamp: str, file: UploadFile = File(...)): FILENAME = 'input.wav' try: contents = file.file.read() with open(FILENAME, 'wb') as f: f.write(contents) except Exception: return {"message": "Error when uploading file"} finally: file.file.close() ars_pred, val_pred = detect_emotion_single(FILENAME, model_num= 0) return {"message": f"Uploaded {file.filename}", "arousal": ars_pred, "valence": val_pred, "timestamp": timestamp} ~$ cd "D:\REPO\ser_ssk" ~$ uvicorn server:app --reload --host=0.0.0.0 --port=30916
  9. 13 딥러닝 모델을 활용하는 경우 private SERResult RequestSER() { using

    var httpClient = new HttpClient(); var form = new MultipartFormDataContent(); byte[] fileData; using (Stream s = new FileStream (currentRecordFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) { fileData = new byte[s.Length]; s.Read(fileData, 0, (int)s.Length); } var byteContent = new ByteArrayContent(fileData); byteContent.Headers.ContentType = MediaTypeHeaderValue.Parse("multipart/form-data"); form.Add(byteContent, "file", Path.GetFileName(filePath)); string timestamp = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss-fff", CultureInfo.InvariantCulture); var responseStr = httpClient.PostAsync($"{config.ser_endpoint}/{timestamp}", form). ConfigureAwait(false).GetAwaiter().GetResult().Content.ReadAsStringAsync().Result; return JsonSerializer.Deserialize<SERResult>(responseStr); }