
데이터
Keras
파이썬으로 작성된 오픈 소스 신경망 라이브러리이며, Tensorflow와 Pytorch와 함께 널리쓰이는 머신러닝 플레임워크
StackOverflow 질문 수: 42529
Github Stars : ★ 62805
사용 기업

위메프

카카오

라인

직방

11번가

프립

뮤직카우

진모빌리티

사람인에이치알

SK텔레콤

노타
현대자동차그룹
딥러닝 모델을 파이썬으로 구현하고 검증하기 - #0 CNN with Tensorflow
안녕하세요 이상호 책임입니다.지난 포스팅까지는 머신러닝 구현을 주제로 얘기를 해봤습니다. 이번에는 딥러닝을 주제로 두고, 포스팅을 이어가도록 하겠습니다.* 머신러닝 구현 관련 포스팅1. 파이썬을 활용한 AI/ML모델로 예측 결과 도출하기 - Baseline #02. 파이썬을 활용한 AI/ML모델로 예측 결과 도출하기 - Preprocessing #13.파이썬을 활용한 AI/ML모델로 예측 결과 도출하기 - Ensemble & AutoML #2CNN(Convolutional Neural Network)첫번째로 이미지 데이터를 학습하고, 예측 및 분류하는 대표적인 알고리즘, CNN(Convolutional Neural Network)에 대해 다뤄보고자 합니다.통상적으로 딥러닝을 공부할 때 CNN을 활용한 이미지 분류(Image Classification)을 제일 먼저 합니다. 아무래도 직관적인 이미지를 기반으로 학습하는 것이 이해에 많은 도움이 되기 때문입니다.CNN에 대한 상세 설명은 검색하면 아주 상세하게 잘 나와있기 때문에 생략하고, 코드 구현을 위주로 얘기해보겠습니다. CNN에 대한 개념을 숙지한 후 이어 봐주시면 좋을 것 같아 괜찮다고 생각되는 외부 포스트를 하나 공유합니다. [딥러닝 모델] CNN (Convolutional Neural Network) 설명 (tistory.com)현대차그룹 임직원분들께서는 HDAT LV3~4 시험에는 딥러닝 문제가 주로 나온다는 점을 참고해주시면 좋을 것 같습니다.CNN을 활용해서 이미지 분류 모델을 구현하는 것은 통상적으로 다음과 같은 순서를 따릅니다.1. 이미지를 불러올 수 있는 경로를 기반으로 list 생성 - python glob library 활용2. 이미지에 대응되는 labeling (bird -> 0 , human -> 1 이런식으로)3. 이미지 데이터를 RGB형태의 3차원의 feature map(numpy array)으로 변환 - PIL , open cv library 활용4. 이미지를 일괄적으로 변환할 경우 out of memory 발생할 수 있으므로 특정 갯수(batch)만큼만 반복적으로 추출하여 변환5. 학습을 위해 train data / validation data set 기반으로 데이터의 인스턴스 생성6. CNN 신경망 architecture 설계 및 모델링7. 모델 학습(장시간 소요되므로 GPU Computing필요)8. Inference (추론) - test 데이터셋을 활용합니다.1. 이미지를 불러올 수 있는 경로를 기반으로 list 생성 - python glob library 활용glob를 활용하여 image path array 만들기 (이미지의 경로를 읽어와서 image path array 만들기)import pandas as pd import numpy as np from glob import glob # glob 임포트하고 PATH_TRAIN = "CIFAR-10-images-master/CIFAR-10-images-master/train"PATH_TEST = "CIFAR-10-images-master/CIFAR-10-images-master/test"# 위 경로는 개발환경에 따라 바뀔 수 있습니다.train = pd.DataFrame([])# 빈 data frame 하나 먼저 만들고 train["image_files"] = glob(PATH_TRAIN + "/*/*")# "/*" 만 하면 PATH_TRAIN 하위 전부 # "/*/*"만 하면 그 하위 폴더내의 전부를 가져오는 뜻입니다.# "/*/*.csv" 원하는 확장자만 전부 가져올때 .png , .jpg , .csv로 가져올 수 있습니다.2. 이미지에 대응되는 labeling (bird -> 0 , human -> 1 이런식으로)각 image path별로 대응되는 image label 만들기이미지 경로별로 대응되는 라벨링을 만드는 단계는 쉬운것 같으면서도 어렵게 생각하면 괜히 꼬이는 부분들이 있습니다.따라서 심플하게 접근하는것이 중요합니다.우선 대응되는 라벨링을 가져오고 해당 라벨에 대한 인덱싱을 추가로 해줍니다. 그러기 위해서는 series.str.split(" ")개념을 이해해야 합니다.판다스 seriese를 string으로 변환하고 " "사이 문자열로 해당 전체 문자를 쪼갭니다. 쪼갠 결과를 먼저 보고 몇번째를 선정할지 고르는데, 예를들어 첫번째라고 한다면, series.str.split("/").str[0] 으로 지정해줍니다. 이때 이 값은 다시 series가 되므로 series.str.split("/").str[0].str.split("\\")로 한번 더 쪼개어 series.str.split("/").str[0].str.split("\\").str[n] , n번째 를 쓰시면 경로에서 labeling만 가져올 수 있습니다. (윈도우 개발환경 기반)# 윈도우 개발환경 # train["image_labels"] 컬럼 추가합니다.train["image_labels"] = train["image_files"].str.split("/").str[i].str.split('\\').str[j]# i , j는 하나씩 돌려보면서 판단합니다.# 리눅스 개발환경 기반 - 클라우드(코랩 , 캐글)train["image_labels"] = train["image_files"].str.split("/").str[i]# i는 하나씩 돌려보면서 0부터~ 판단합니다.### 개발환경은 돈표시 \\가 train["image_labels"] = train["image_files"].str.split("/")### 에서 나타나면 윈도우입니다.### 라벨링이 똑바로 들어가있으면 pd.factorize(train["image_labels"])[0]을 통해서 라벨인코딩합니다.train["image_labels"] = pd.factorize(train["image_labels"])3. 이미지 데이터를 RGB형태의 3차원의 feature map(numpy array)으로 변환 - PIL , open cv library 활용train/validation data set 나누기(tr
keras
python
tensorflow
다나와
엘라스틱서치 유사 이미지 검색
엘라스틱서치 유사 이미지 검색선지호소개안녕하세요.이번에 유사 이미지 검색을 구현할 수 있는 방법을 찾다가 엘라스틱서치로도 이를 구현할 수 있어 소개하려고 합니다.유사 이미지 검색 이란?말 그대로 이미지가 유사한 다른 이미지를 검색하는 것 입니다.방식으로는 딥러닝, 벡터 유사도 방식 등 여러 방식이 있고 대표적으로 사용되는 라이브러리는 opencv, faiss 등이 있습니다.순서순서는 아래와 같습니다.색인 시1) 상품 정보와 이미지 url을 같이 받아온다2) 이미지 url에서 이미지를 다운로드 받는다3) 이미지를 벡터화 한다4) 벡터화 한 이미지를 엘라스틱서치에 넣는다검색 시1) 이미지 url을 받는다2) 이미지를 벡터화 한다3) 벡터화한 이미지로 엘라스틱서치에서 찾는다색인1) 상품 정보와 이미지 url을 같이 받아온다저는 내부에 있는 다른 ES에서 정보를 가져왔습니다.만약 실제로 구성하게 된다면 이 부분은 수정이 필요할 것입니다.def search ( self ): index = "target" body = { "query" : { "match_all" : {} }, "size" : 10000 } result = [] response = self . elasticsearch . search ( index = index , body = body ) for item in response [ 'hits' ][ 'hits' ]: info = item [ '_source' ][ 'productInfo' ] url = item [ '_source' ][ 'imageUrl' ] result . append ({ "info" : info , "url" : url }) return result2) 이미지 url에서 이미지를 다운로드 받는다def download ( self , title , url ): try : url = Request ( url , headers = { 'User-Agent' : 'Mozilla/5.0' }) read_img = urlopen ( url ). read () filepath = f "download/ { title } .jpg" with open ( filepath , mode = 'wb' ) as f : f . write ( read_img ) except : pass3) 이미지를 벡터화 한다import numpy as np from keras.applications import InceptionResNetV2 from keras.applications.inception_resnet_v2 import preprocess_input from keras.models import Model from keras_preprocessing import image def vectorize ( self , filepath ): model = InceptionResNetV2 () layer_name = 'avg_pool' intermediate_layer_model = Model ( inputs = model . input , out
elasticsearch
keras
라인
MLOps를 위한 BentoML 기능 및 성능 테스트 결과 공유 – 1
안녕하세요. LINE에서 Financial Data Platform을 개발하는 이웅규입니다. 2021년 초에 작성한 글(Airflow on Kubernetes VS Airflow Kubernetes Executor 2) 마지막에 Kubernetes를 데이터 엔지니어링뿐 아니라 ML 기반 서비스에도 확장하고 있다고 말씀드렸는데요. 이번 글은 이전 글의 후속편으로써 ML 기반 서비스에 적용하고 있는 MLOps의 한 부분인 모델 서빙과 관련된 이야기를 하고자 합니다. 저는 MLOps가 어떤 솔루션이나 툴이 아니라 방법론이라고 생각합니다. 따라서 이를 구현하는 방법 또한 비즈니스의 성격이나 환경에 따라 다양할 수 있다고 생각합니다. MLOps는 여러 구성 요소를 포함하는데요. 사람마다 견해가 조금씩 다르지만 저는 크게 데이터 수집, 데이터 검증 및 전처리, 피처(feature) 추출 및 전처리, 지속적인 학습, 인프라 관리, 모델 관리, 모델 배포, 모델 서빙, 모델 평가 및 검증, 모니터링으로 구성되어 있다고 생각합니다. 이러한 여러 구성 요소 중 모델 서빙 요소를 구현한 도구 중 하나가 이번 글에서 설명드릴 BentoML이라는 오픈소스입니다. BentoML은 자신들을 From trained ML models to production-grade prediction services with just a few lines of code라고 설명합니다. 쉽게 표현하면 모델을 더 쉽고 빠르게 배포하는 도구라고 할 수 있습니다. 모델러는 자신이 만든 모델을 빠르게 배포해서 더 많은 피드백을 받아 더 많이 개선하고자 합니다. 그래야 더 좋은 모델을 만들어 더 좋은 서비스를 만들 수 있겠죠. 과거에는 이와 같은 모델 서빙 과정이 서버 엔지니어링과 결합되어 있어서 배포가 까다로웠고 배경지식도 많이 필요했습니다. 이에 따라 모델의 갱신 주기가 길어지고 전문적으로 서빙해야 하는 엔지니어들과 커뮤니케이션하는 비용도 늘어났습니다. BentoML은 이런 단점을 해결하기 위해 탄생했다고 생각합니다. 즉 모델을 서빙하고 배포해야 하는 서버 엔지니어의 업무 부담을 줄여 서버 엔지니어가 자신의 비즈니스에 더욱 집중할 수 있게 도우면서, 동시에 모델 API를 손쉽게 개발하고 배포해 모델을 자주 갱신하고자 하는 모델러의 니즈를 충족하기 위해서입니다. 현재 다양한 서빙 도구들이 나타나 빠르게 생태계를 구축하고 있으며 BentoML 역시 빠르게 성장하고 있습니다. 자연스럽게 BentoML과 관련된 자료들이 많이 발간되고 있는데요. 내용을 살펴보면 실질적으로 프로덕션에 쓰기 위한 자료보다는 PoC(proof of concept) 관련 자료가 많은 것 같습니다. 저는 실제 서비스에 적용하기 위해 제 나름의 기준을 두고 깊이 고민하며 BentoML의 기능과 성능을 테스트했고, 저와 비슷한 고민을 하고 계신 엔지니어들에게 조금이나마 도움이 되었으면 하는 바람으로 테스트 내용을 정리해 이 글을 작성하게 되었습니다. 글은 두 편에 걸쳐 아래와 같은 순서로 진행합니다. 1편들어가며Bent
docker
keras
kubernetes
mlflow
python
pytorch
네이버
딥러닝을 활용한 거래량 예측 기능 개선
네이버페이의 카드 결제 시스템에서는 사용자의 거래량을 예측하고 평소와 다른 문제 상황을 감지해 알림을 보내는 모니터링 시스템을 운영합니다. Facebook의 Prophet 라이브러리를 사용한 기존의 모니터링 시스템은 실제 서비스에 적용했을 때 성능과 정확도에서 불만족스러운 부분이 많았습니다. 새로운 모니터링 시스템에서는 딥러닝을 활용해 거래량 예측 기능을 개선했습니다. 이 글에서는 기존 모니터링 시스템의 한계를 살펴보고 새로운 모니터링 시스템에 어떻게 딥러닝을 활용했는지 간략하게 설명하겠습니다. 결제 시스템 모니터링과 거래량 예측 기능 온라인 결제 시스템을 모니터링하면 사용자들의 결제 요청량이 시간과 날짜에 따라 규칙적으로 변한다는 것을 알 수 있다. 예를 들어 사람들이 잠드는 새벽 시간대에는 결제 요청량이 줄어들고, 깨어나서 활동하는 시간대에는 결제 요청량이 많아진다. 이런 규칙적인 요청과 다른 패턴의 결제 요청이 발견된다면 문제가 있는 상황이라고 예상할 수 있다. 문제 상황을 조기에 감지해 시스템 관리자에게 알림을 보내면 문제가 더 커지기 전에 조치를 취하게 할 수 있다. 네이버페이의 카드 결제 시스템은 사용자의 거래량 패턴을 파악하고 예측하는 모니터링 시스템을 운영한다. 모니터링 시스템은 평소의 거래량과 다른 문제 상황을 감지해 알림을 보낸다. 기존에는 이 모니터링 시스템의 개발과 운영에 Facebook의 Prophet 라이브러리를 사용했다. 하지만 실제 서비스에 적용해 사용했을 때 거래량의 급변을 예측하는 용도로 사용하기에는 부적합했다. 새로운 모니터링 시스템에서는 딥러닝을 활용해 실시간으로 거래량을 예상하고 문제 상황을 감지하도록 개선했다. PROPHET 라이브러리를 사용한 거래량 예측의 한계 기존에 운영하던 모니터링 시스템에서는 Facebook이 제공하는 Prophet 라이브러리를 사용해 거래량 예측 기능을 구현했다. Prophet 라이브러리는 비선형 데이터를 사용해 일간, 주간, 연간 주기를 기준으로 추세를 파악해 보여 준다. Prophet 라이브러리를 사용하면 과거 며칠간의 거래량 데이터로 앞으로의 거래량 변화 추세를 알 수 있다. 다음은 1주일(7일) 주기를 기준으로 추세를 파악해 향후 24시간 동안의 결과를 예측하는 기능을 Python으로 구현한 예다. m = Prophet() # 1주일마다 반복되는 주기를 가지며 10차 푸리에 급수를 적용한다. m.add_seasonality(name='weekly', period=7, fourier_order=10, prior_scale=0.1); m.fit(df) # 향후 24시간 동안의 결과를 예측한다. future = m.make_future_dataframe(periods=24 , freq='H') forecast = m.predict(future) 기존 모니터링 시스템은 과거 3주간의 데이터를 활용해 현재를 포함한 향후 24시간 동안의 거래량을 예상하고 현재 시점의 실제 거래량이 예상 거래량에서 크게 벗어나면 알림을 보냈다. 과거의 장기적인 추세를 보고 이후의 대략적인 추세
keras
연관 기술 스택

Pytorch

Ray

Tensorflow