DEEPLOOK

💻 프로젝트/🧸 TOY-PROJECTS

[DeepLook] 6. 최종 결과물, 이후 에러 핸들링과 마무리

최종 배포 링크 https://deep-look.vercel.app 에러 핸들링 백엔드에 연결을 마쳤을 때쯤, 백엔드와 프론트엔드 작업이 모두 완료되었다. 그러나, 모델에 사진을 업로드 하는 부분에서 계속 잘 업로드가 되지 않아 다음과 같은 에러들이 발생했다. 1. 413 에러 첫번째는, 이미지 업로드 시, base64로 인코딩 된 값이 전송되면서 발생한 413 에러였다. 413 에러는 많이 본 경험이 없던 터라, 서칭해 보았는데, 해당 에러가 발생한 이유는 이미지가 너무 컸기 때문이었다. Nginx에서 기본적으로 요청 엔티티의 크기는 1MB로 제한이 되어 있기 때문에, 1MB가 넘는 이미지를 업로드했을 때 413 에러가 발생했던 것이다. 이에, 최대 50MB까지 업로드할 수 있도록 nginx 설정을 변..

💻 프로젝트/🧸 TOY-PROJECTS

[DeepLook] 5. 백엔드 연결

이전까지는 프론트 쪽 작업만 맡아서 하고, 백엔드는 node js로 한번 맛본 상태였는데, 갑작스레 웹과 백을 연결해야 하는 태스크가 주어졌다. 시간이 없고, 모델이 규모가 있는 모델은 아니어서 flask를 사용하기로 결정했다. 더 자세한 코드를 보고 싶으면 깃허브를 참고하길 바란다. (좀 난잡할 수 있음 주의) 백엔드 모델과 연결 시 거친 단계는 다음과 같다: pickle 파일을 만들어 모든 연예인의 얼굴 임베딩을 저장한다. client 측에서 post 요청을 보냈을 때 이미지 데이터를 받아 임베딩을 추출한다. 추출한 임베딩과 가장 유사한 임베딩을 pickle 파일로부터 로딩한다. 추출된 얼굴 임베딩과 사전 학습된 임베딩 간의 유사도를 계산한다. 가장 유사한 유명인의 이니셜과 유사도를 JSON 형식으로..

💻 프로젝트/🧸 TOY-PROJECTS

[DeepLook] 4. 모델 선정 및 학습

사진 전처리 이후, 모델을 선정하고 학습시키는 과정을 거쳤다. 모델의 후보는 ResNet, EfficientNet, Arcface가 있었는데, 가장 얼굴 유사도 부분에서 큰 성능을 보이는 Arcface 모델을 선정했다. 더 자세한 과정은 코랩을 통해 확인할 수 있다. 1. CSV 파일 생성 우선 전처리된 사진들의 이름(이름_순번 형태)과 해당 인물들이 label 된 csv 파일을 생성했다. 2. Train, Test dataset 분리 항목별로 70%는 train, 30%는 test의 데이터셋으로 분리했다. # 이니셜을 하나의 배열로 모으기 class_name_list = [] tmp=df.copy() for initial in tmp['class']: if initial not in class_name..

💻 프로젝트/🧸 TOY-PROJECTS

[DeepLook] 3. 전처리 (haar-cascade 알고리즘)

지난번에 크롤링한 이미지들을 기반으로 전처리 작업을 진행했다. 모델에 학습시키기 위해서는 인물의 사진 중 얼굴만 crop 된 상태를 학습시켜야 했는데, 이 부분에 대해 찾아보니 haar cascade classifier 라는 알고리즘이 있었다. 1. Haar Cascade Classifier 알고리즘이란? 간단하게 요약하자면, haar cascade classifier 알고리즘은 검출할 대상이 되는 물체가 있는 이미지 (Positive Image)와 없는 이미지(Negative Image)를 최대한 많이 활용해서 다단계 함수를 훈련시키는 기계학습 방식이다. 해당 알고리즘은 유사 하르 특징 (haar-like features)과 캐스케이드 분류기 (cascade classifier)를 사용한다. 1. 유사..

장영준
'DEEPLOOK' 태그의 글 목록