본문 바로가기

전체 글

(13)
[express] 자주 사용되는 middleware 정리 express로 서버 구축하다가, 레퍼런스들에서 자주 사용되는 middleware가 어떤게 있는지 정리하면 좋을거 같아서 정리해본다. 아래에 나올 app 이라는 놈은 const app = express(); 여기서 나온 app임을 명시한다. 1. app.use(express.static('정적파일_모아둔_폴더_이름')); 정적인 파일들(이미지, css, javascript 파일 등등)을 제공하고자 할 때 자주 사용된다. ex) 우리가 정적인 파일들을 'public' 이라는 폴더에 다 저장해놓았다고 하자. 위 middleware를 사용하지 않았을 때, public 폴더 내의 'apple.jpg' 파일에 접근하려면 http://localhost:3000/public/apple.jpg 이 url로 접근해야한다..
[프로젝트 Find place] 프로젝트 개요 작년 2학기에 KHUDA 동아리를 하면서 최종 프로젝트로 '교내 거리뷰 이미지 기반 위치 예측 모델' 를 수행했다. (사진을 input으로 주면 그 사진의 장소로 예측되는 좌표와 그 장소의 사진을 output으로 내주는 프로젝트. 네이버 지도 api를 활용해 로드뷰 사진을 가져온 후, ResNet을 활용해 embedding vector를 구하고 최대 cosine similarity를 가지는 로드뷰 사진과 좌표를 output으로 내주는 방식으로 구현했다. 구체적인 과정 및 코드는 아래 노션 페이지를 참조) https://www.notion.so/khuda/8fcded44f9dd48f69aa451cbb19dc771?pvs=4 교내 거리뷰 이미지 기반 위치 예측 모델 | Notion 프로젝트 계획 khuda...
CNN Visualization (CNN의 블랙박스 현상 해결법) 우리가 만든 CNN 모델은 어떻게 행동하고, 무엇을 보고 클래스를 판별했을까? Embedding Feature Analysis (추출된 특성 분석) (high level layer) Neareast-Neighbor 아래 파란색 박스를 통해(위치도 다르고 자세도 다름) 컨셉을 잘 학습했다는 것을 알 수 있다. 미리 학습된 뉴럴 네트워크 준비 / fc layer 전, 즉 중간 정도에 있는 layer들에 대해 특징 추출하도록 함. db안에 있는 모든 영상들, 이미지들에 대해서!! 그 특징들은 고차원 데이터일 것이다. 잘 훈련된 모델이라면, 같은 class 영상들의 feature들은 서로 가까이 있을 것이다. 이제 그 모델에 질의 영상을 입력하면, 그 영상의 feature은 자신과 같은 class인 영상들의 f..
[CV] Semantic Segmentation 및 object detection [CV] 이전까지는 단순히 사진의 객체를 분류하기만 하는 모델을 만들었지만, 이제 픽셀 단위로 객체를 구분해보고자 한다. CV에서는 이를 Semantic segmentation이라고 한다. 사진의 위에는 Image classification, 아래는 Semantic Segmentation이다. 기존 Image classification 모델에서는 주로 마지막 레이어에서 flattening을 하여 하나의 벡터로 바꿨다. 하지만 이는 이미지의 공간 정보를 고려하지 않는다는 말과 동일하다. semantic segmentation에서 이미지 내의 픽셀에 대한 공간정보는 매우 중요하기 때문에, 이 fully connected layer는 사용하기 힘들다. 그 대신, 1*1 convolutional layer를 사..
[CV] ImageClassification 종류 GoogleNet부터 다룬다. GoogleNet : 깊이가 아닌 너비로 필터를 접근. 대신 계산복잡도가 증가할 수 있기에, 1x1 layer를 적용 전체적인 구조는 다음과 같음 노란색 사각형 쪽은 Auxiliary classifier로, 오차를 중간중간에 꽂아주는 역할을 한다. vanishing gradient 문제를 방지해준다. ResNet : 현재도 많이 사용함 ‘네트워크의 layer 개수(depth)가 모델의 성능을 더 높여준다’를 보여줌 원래 사람들은 layer 개수가 많을수록 오버피팅이 일어난다고 생각했지만, 아래 그림을 보면 56개의 layer가 training erro도 높고 test error도 높은 것을 볼 수 있다. 이는 오버피팅과 관계가 없다. 실제 구조는 다음과 같다. RestNet..
[CV] Data augmentation 및 Transfer learning 딥러닝 분야는 데이터의 다다익선이 분명한 분야이다. 따라서 한정된 실제 데이터를 최대한 많이 늘리는게 중요한데, 이 떄 사용되는게 data augmentation이다. 만약 밝은 사진으로만 저렇게 동물 사진을 학습했다고 하자. 이때 검은색 바탕의 고양이의 사진을 받으면 모델은 잘 추론하지 못할 수 있다. 따라서 원래 데이터의 밝기를 낮추거나, 색깔을 변화시키는 등의 변화로 데이터셋을 늘려 모델을 더 잘 학습시킬 수 있다. 대표적인 augmentation 기법으로는 Crop, shear, brightness, perspective, rotate, affine 이 있다. 밝기 변화 crop affine augmentation할 때에는 어떤거 쓸건지, 얼마나 세게 할건지 두개의 파라미터가 필요하다. 2. pr..
Ch 6. 비지도 학습 지금까지는 훈련데이터가 실제로 어떤 결과인지를 알려주는, 즉 지도학습을 공부해봤다. 그렇다면, 컴퓨터에게 데이터를 주는데, 그 데이터가 우리도 무엇인지 모르는 상황이라면 어떨까? 컴퓨터에게 데이터 라벨링을 해주지 않아도 자기 스스로 그 특징을 찾아 훈련데이터들을 분류할 수 있을까? 이를 ‘비지도 학습’이라고 부른다. 다음과 같은 상황을 가정하자. “나는 과일가게에서 일하고 있다. 과일들의 수요를 조사하기 위해, 손님들에게 가장 좋아하는 과일의 사진을 문자로 보내달라고 했다. 문자로 온 과일들의 사진을 분류해서, 어떤 과일을 손님들이 가장 좋아하는지 알고 싶다. 하지만, 어떤 과일 사진들이 올지 우리는 알지 못한다. 대충 예상은 가지만 말이다. 손님들이 보내준 과일 사진을 알아서 분류해주는 머신러닝 모델은..
Ch 5. 트리 알고리즘 앞서 다룬 회귀와는 또 다른 알고리즘을 알아보자. 이번 예시는 와인 분류이다. 알코올, 당도, pH를 이용해 레드 와인인지 화이트 와인인지 구분하는 것이다. 얼핏보면 특성이 3개이고 이진분류이므로, 특성 스케일 값을 표준점수로 전처리해서 로지스틱 회귀를 사용하면 해결될 것이라는 생각이 든다. 한번 해보면? import pandas as pd wine = pd.read_csv('https://bit.ly/wine-date') data = wine[['alcohol', 'sugar', 'pH']].to_numpy() target = wine[['class']].to_numpy() from sklearn.preprocessing import StandardScaler ss = StandardScaler() s..