목록AI (100)
꺼내먹는지식 준

사전 product Serving에서 확인했던 Voila의 장점은 노트북에서 프로토 타입을 쉽게 만들 수 있다는 것이다. 그러나 레이아웃을 잡기 어려워서 웹 개발을 해야 할 수도 있다. 그러나 현재 이 글의 대상자들은 데이터 분석가 혹은 사이언티스트 인데, 이들이 밑단부터 웹 개발을 할 필요는 없다. 즉 이로 인해 자바 스크립트, React, Vue 등을 사용해야 하는데, 이는 시간대비 효율적이지 않다. 처음부터 HTML/ 자바스크립트 + Flask/Fast API가 아닌, 기존 코드를 조금만 수정해서 웹 서비스를 만드는 것이 목표 데이터 분석가 혹은 사이언티스트가 웹 서비스를 작업하는 Flow를 살펴보자. 시나리오 1 시나리오 2 시나리오 1 의 경우 익숙해지는데 시간이 오래 걸린다. 시나리오 2의 경..

Notebook 베이스 프로토타입 Jupyter Notebook에서 함수를 작성한 후, 예측 함수 실행해보며 성능 확인 혼자 확인 할 때는 위와 같이 진행해도 괜찮으나, 동료들과 함께 보면서 이야기 할 때는? "Module Not Found Error..." 라이브러리의 의존성으로 테스트를 위해 추가 환경 설정이 필요하다. (requirements.txt를 명시할 수도 있지만.. ) $\rightarrow$ 개발을 잘 아는 분들에게는 가상환경 세팅 요청할 수 있지만.. 모르는 분들은? nbconvert를 사용해 HTML으로 추출할 수도 있음 인터렉티브하게 조작하기 어려우며, 이미지 용량 따라 느려질 수도 있음 이에 따라 모델 개발 후, 사람 들과 테스트할 수 있는 프로토타입을 먼저 만들어보자. 모델이 어..

용어정리 Serving 서비스화 production 환경에 모델을 사용할 수 있도록 베포 머신러닝 모델을 개발, 현실 세계에서 사용할 수 있도록 하는 행위 (웹, 앱) Inference 모델에 데이터가 제공되어 예측하는 경우, 사용하는 관점 Serving - Inference 가 혼재되어 사용하는 경우도 존재 (ex. Batch Serving/ Batch Inference) Online Serving 웹 서버 요청 받으면 요청 내용을 보내준다는 개념은 어렵지 않으나, HTML 문서나 오브젝트를 전달해준다는 뜻이 좀 모호하다. 아래의 예시들을 보자. 변경도 가능 , 대기 취소 (변경 응답, 취소 응답 ) 정리하자면 client 의 다양한 요청을 웹 서버가 잘 처리해서 응답으로 제공하는 것이 바로 onlin..

MLOps 개론 모델 개발 과정은 다음의 순서를 따른다. 1) 해당 과정은 자신의 컴퓨터, 서버 인스턴스에서 주로 실행 2) 고정된 데이터를 사용해 학습 3) 학습된 모델을 앱, 웹 서비스에서 사용할 수 있도록 만드는 과정 필수 3) 번 과정을 Real World, Production 환경에 모델을 배포한다 표현 모델이 배포된 후, Deploy 과정이 생성된다. 이 경우 발생 문제 1) 모델의 결과값이 이상한 경우가 존재 원인 파악, input 데이터가 예측 못한 형태인 경우, Research 와는 다르게 outlier 처리 불가능 2) 모델의 성능이 계속 변경 정형 데이터에서는 정확히 알 수 있으나, 비정형 데이터(이미지)는 알기 어려울 수 있다. 예측 값과 실제 레이블을 알아야 한다. 3) 새로운 모..
softmax 는 dim 을 지정해서 apply 할 수 있다. test = torch.randn(2,3,2) print(F.softmax(test, dim = 0)) print(F.softmax(test, dim = 1)) print(F.softmax(test, dim = 2)) 3D tensor에 0차원 1차원 2차원에 softmax를 apply 하고 결과를 보자. dim = 2 결과 부터 보면 2차원 원소들에 softmax 가 취해진 것을 볼 수 있다. 0.7388 + 0.2612 = 1 0.4158 + 0.5842 = 1 dim = 1 결과를 보면, (3) 0.5528 + 0.3504 + 0.0968 = 1 dim =2 결과를 보면, (2) 0.4200 + 0.5800 = 1 0.0447 + 0.9..

pytorch 에서 함수 사용할 때 마다 인자로 dim 을 줄 때 차원이 햇갈렸다. 이에 따라 간략 정리 한번 한다. (일단 axis 와 dim 은 같다는걸 인지하고 시작하자.) 2D, 3D, 4D 에서 torch.cat 을 수행하며 차원에 따른 concat 결과를 명확하게 봐보자. a = torch.randn(7,3) b = torch.randn(7,3) print(torch.cat((a,b),axis=0).shape) print(torch.cat((a,b),axis=1).shape) a = torch.randn(7,3,5) b = torch.randn(7,3,5) print(torch.cat((a,b),axis=0).shape) print(torch.cat((a,b),axis=1).shape) pri..

object detection 의 성능은 1) mAP 2) Speed 두가지로 결정된다. EfficientDet은 성능도 높고, 속도도 빠르게 하기 위한 연구 (사실 모든 연구가 그렇다. SSD도 그렇고.) Efficient in Object Detection DL model은 키우면 키울 수록 성능이 증가하는 경향, 그러다보니 계속해서 점점 더 깊어지고, 복잡 하지만, 단순하게 깊게 쌓는 것이 성능적인 gain에 한계가 있다. 즉 모델의 복잡도 대비 성능향상이 비효율적 이에 따라 모델을 쌓을 때 잘 쌓는 법에 대한 연구가 진행 3가지 방향의 scaling width scaling: 채널을 더 크게 주기 depth scaling: 모델을 더 깊게 쌓기 resolution scaling: input 이미지..

Yolo Familty, SSD, RetinaNet 2 Stage model 1) Localization (후보 영역 찾기) 2) Classification (후보 영역에 대한 분류) $\rightarrow$ 속도가 매우 느려서, real time 으로 활용하기 위한 방법론 one stage feature map으로부터 바로 객체의 종류와 위치를 예측함으로써 RPN 과정을 생략 (localization, classification 동시 진행) 전체 이미지에 대해 특징 추출, 객체 검출 $\rightarrow$ 간단하고 쉬운 디자인 속도가 매우 빠름 영역을 추출하지 않고 전체 이미지를 보기 때문에 객체에 대한 맥락적 이해가 높음 (background error가 낮음) YOLO YOLO v1 network..

맨날 transform(img) image tranform 하는 것만 보다가 갑작스럽게 image, bboxes, labels가 모두 transform의 매개변수로 들어가는 걸 보고 당황했다. 주변인의 도움을 받아 해결 참고 코드는 다음과 같다. transforms = get_train_transform(resize_H, resize_W) def get_train_transform(h, w): return A.Compose([ A.Resize(height = h, width = w), A.Flip(p=0.5), ToTensorV2(p=1.0) ], bbox_params={'format': 'pascal_voc', 'label_fields': ['labels']}) sample = { 'image': im..

Object Detection Neck 그간 Object Detection 논문들 읽으면서 Neck 에 해당되는 개념들을 아주아주 간단하게 작성하고 넘어갔는데, 드디어 한번 살펴본다. NECK 이 나오기 전, backbone의 마지막 feature map 으로 ROI 를 수행했다. NECK은 여기서 backbone의 마지막 feature map만을 활용해야하는 이유가 있을까? 라는 의문에서 뭔가를 해보고자 했다. 왜냐, 마지막 feature map은 high level 정보를 담고는 있지만, 그 과정 속에서 유실되는 정보도 있고, spatial 정보도 많이 유실 되었기 때문이다. NECK 이 왜 필요한가? 결론적으로는 NECK이 없다면 여러 크기의 물체를 감지하는 것이 어렵다. 즉, 여러 feature ..