Naver Deview 2019 Day-1 발표 정리
Naver Deview 2019
키노트
- 네이버랩스 소개
- A-City (1)
- autonomous space
- AI AR Autonomous space
- DATA; Seamless 3D/HD spatial Data
- 지도데이터를 확보해서 사용자의 위치정보에 따라 원하는 기능을 수행
- 아웃도어-인도어를 잇는 지도 데이터 구축
- Visual Localization
- 실내 위치정밀도를 15센치 정도로 낮춰 구현 실내에서도 gps구동 가능
- 항공사진 + 지상에서 찍은 사진을 결합해서 디테일한 도로맵을 구축
- 오늘부터 HD map data를 무상 배포
- autonomous space
- A-City(2)
- 자율주행 머신 플랫폼;
- ALT - 플랫폼 (실외)
- around 플랫폼 (실내)
- 5g brain
- Around - C
- 카페 딜리버리
- 복잡한 공간에서 휴먼-로봇 인터랙션을 테스트하기 위해 개발
- 심리적인 안정거리, 자연스러운 이동을 구현
- 심층 강화학습; 딥러닝 기술 접목
- 사람처럼 점과 선으로 표현되어있는 “눈”을 구현’; 비언어적 표현
- 네이버 제2사옥을 1784 프로젝트로 구현
- 자율주행 머신 플랫폼;
- 네이버랩스 유럽; AI R&D BELT
- A-City (1)
- 수아랩 창업 성공 스토리
- 수아랩이 지킨 세가지 원칙
- 한 우물 파기
- 제조업에서 딥러닝 기반 비전 검사에만 집중하고 있음
- 뛰어난 사람들만 채용
- 스스로 결정하는 자율과 책임의 문화
- 업무 지시를 구체적으로 하지 않고, 어떤 일이 필요하고, 왜 필요한지, 이 일을 수행했을 때 어떤 파급효과가 있을 지 스스로 생각하게 함
- 언제 출퇴근하는지, 근태는 관리하지 않고 결과물에 대한 평가만 있음
- 한 우물 파기
- 수아랩이 얻은 세가지 행운
- 뛰어난 구성원들
- 정부와 투자자의 적극적 지원
- 정부 창업지원프로그램 이용
- 제조 강국 대한민국…
- 제조업 하나의 시장에 집중해도 충분히 좋은 성과를 얻을 수 있었음
- 수아랩이 지킨 세가지 원칙
- FURIOSA; 고성능 AI칩 개발 회사 소개
- 문재인 대통령 연설; IT강국을 넘어 AI강국으로
- Naver Search & Clova
- 네이버 검색 연혁
- 현재의 네이버 검색
- 모바일서비스를 위한 정교한 검색 알고리즘
- 컨텍스트 분석한 것을 적극 활용
- 사용자의 일상언어, 대화에서 문맥을 파악해서 정보를 추출
- 비전 검색
- 추천검색 기술
- User Understandng
- 사용자 이해를 기반으로 어떤 정보를 원하는지, 어떤 정보를 제공해주어야 하는지 파악
- 컨테이너 기술에 기반한 클라우드 네이티브 컴퓨팅
- 네이버는 클라우드 네이티브 컴퓨팅 환경으로 전환
- PINPOINT
- Observability 향상
- 지원 생태계 확장
- 네이버 클라우드 플랫폼
- https://www.ncloud.com
- NAVER Clova AI
Track 1) 엄~청 큰 언어 모델 공장 가동기! (LaRva: Language Representation by Clova)
-
resources
- 수많은 요구사항에 따라 만들어야 할 모델도 많고,
- 주어진 리소스는 V100
- 비싼 만큼 일의 효율도 중요
-
LaRva 공정 최적화
- 평가
- 학습이 끝난 후 평가하는 건 위험하다고 생각해서 10만스텝마다 체크포인트를 받아 검증 진행
- -> 하나의 모델에서 10개의 체크포인트가 나오고, 다운스트림 태스크가 8개일 때 한번 할 때마다 80번씩 파인튜닝 해줘야함
- 한번에 요구사항을 수렴하기 어렵다는 단점
- 이를 해결하기 위해서 평가/성능 리포트를 자동화&시각화
- Minio; 모델을 저장하는 서버
- Downstram tasks
- fine-tuning에 필요한 요구사항
- https://github.com/naver/claf
- 평가
-
전처리를 효율적으로
- 구글에서 발표한 multi-lingual vocab
- vocab size 10만, 한국어는 2.7%뿐
- 한국어에 맞는 vocab을 찾음
- MLM 과 NSP
- Masked language model
- next sentence prediction
- segment를 중심으로 이진분류
- Dynamic data pipeline
- 매번 결과가 달라지는 영역을 다이내믹 데이터 영역
- 한정된 자원을 극대화
- variable sequence length 를 사용해서 성능향상을 얻을 수 있음
- nsp가 필요없다고?
- 최근연구에서는 NSP가 필요없다는 이야기
- RoBERTa에서는 랜덤 텍스트 없이 연속된 시퀀스에서 준비하는 full setence를 준비해 LSTM을 하지 않는게 좋다고 제시
- 새로운 파이프라인에서는 full sentence에서 마스킹만 다이내믹하게
- 새로운 다이내믹 데이터 파이프라인
- 배치사이즈만큼 읽어서 트레이닝 인스턴스 준비
- 분산학습에서 효율적으로 사용할 수 있는 형태
- 새로운 방식이 조금 더 빠른 처리가 가능
- 구글에서 발표한 multi-lingual vocab
-
학습을 빠르게
- BERT base기준으로 최대 10일이 걸렸던 것을 줄여야한다
- V100 32G 자원으로 32배치씩 8개의 GPU를 사용해야함
- 싱글 피리시젼당 GPU 하나 당 24개밖에 넣지 못함…
- Half precision을 사용해서 성능저하는 없고 연산속도 증가, 메모리 절감 가능해짐
- Mixed Precision Training
- 배치사이즈가 클 수록 성능이 좋아진다
- 분산학습필요 -> 처음에는 노드만 늘렸는데 데이터 처리량 증가폭이 너무 비효율적이었음
- 투입 자원 대비 40%의 효율뿐
- 네트워크 버틀랩 때문 => 네트워크도 엔지니얼이 필요
- RDMA + GPU
- 자체적인 프로토콜을 사용하기 때문에 프로토콜 오버헤드를 줄이고, CPU끼리 직접 연결
- 리니어하게 증가할 수 있었음 -> 자원 효율을 최대치로 끌어올림
- 분산학습필요 -> 처음에는 노드만 늘렸는데 데이터 처리량 증가폭이 너무 비효율적이었음
- BERT base기준으로 최대 10일이 걸렸던 것을 줄여야한다
-
더 좋은 언어모델을 위해
-
KLUE
-
마스킹 전략
- sapce level masking 추가(어절단위)
- 기계독해에서는 효과가 컸음
-
Batch size는 클 수록 성능이 올라감
-
model size도 클 수록 좋다
-
토큰화;
- char vs sub-word(워드피스)
- 감정분석은 캐릭터단위, 그 외에는 비슷한 성능
- Cased vs uncased
- 자모 분해로 토큰수가 늘어나 기계독해 성능이 하락하고 케이스가 우세
- 감정분석은 언케이스가 우세
- char vs sub-word(워드피스)
-
vocab size는 64k가 좋은 성능을 보임
-
Model; BERT vs RoBERTa
- 초반에는 로버타가 우세하지만 1만 스텝이후로는 비슷함
-
RoBERTa + Large(L24) + 1024B
- 기존에 비해 3배정도 성능향상
-
파인튜닝 관점
- 멀티 태스크 러닝
- MT-DNN; 태스크를 모두 섞어놓은 레이어에서 태스크를 분리하고, 각 태스크에 파인튜닝
- 실험결과
- 멀티 태스크 러닝
-
-
서비스는 속도
- 처리속도, 메모리, 비용이라는 문제
- 처리속도; 엔지니어링 접근법
- GPU로 성능향상하는 방법
- cuBERT; 52ms까지 감소
- TensorRT
- GPU로 성능향상하는 방법
- 모델 사이즈가 너무 크다! 모바일에 맞는 작은 모델 만들기 (future work)
Track 2) Papago: Engineering BERT into NMT
- Attention mechanism
- Robustness of MT Models
- BERT
- MLM
- Sentence 내 word에 masking하고, transformer encoder에 넘김
- Next Setence Prediction Task
- MLM
- hypothesis and questions
- BERT를 통해 missing token에 대해서 대처 가능하나 noise는 어떻게 구별할것인가?
- 1 Finetuning approach
- multi encoder approach
- BERT + NMT 아키텍쳐
- 레이어 6개로 이루어진 버트 인코더 -> to be fair with NMT encoder
- ReLu, Sinusoidal 임베딩 사용; 오리지널 트랜스포머와 유사하게 함
Track 1) 챗봇 1만 개의 모델 서빙하기: AI 서비스 어디까지 해봤니
-
모델의 성격 파악하기
-
텍스트? 이미지? 음성?
- 모델에 들어가는 인풋 형태는 어떤 tensor 형태의 feature일 것
- 이미지, 음성, 텍스트, 영상이더라도 모두 임베딩을 통해 tensor 특징값으로 변환
- 규모, 서비스의 형태가 중요
- 배치성 작업인가? 대량의 파일노드가 꾸준히 들어올 수 있는가 하는 고려가 모델 설계단계부터 되어야 함
- 서비스 요구사항에 따라 서버, 모바일, 임베디드 등 여러 환경 고려 필요
- 웨어러블 디바이스를 사용한다고 할때, 엣지 서버 노드를 사용
- 머신러닝을 서비스화할 때 중요한 건
- 레이턴시(얼마나 ㄸ빠르게 모델이 계산해서 리턴할것인가); 리터러시
- 얼마나 많은 양을 계산할 수 있을것인가?
- 모델에 들어가는 인풋 형태는 어떤 tensor 형태의 feature일 것
-
안되는 것을 빠르게 포기하는 방법
- 불가능!) 데이터 없이 학습 없이 이루어지는 마술같은 머신러닝
- 정말 긴 문장에 대해서 질의하고 답변하는 모델
- 도메인 전용 학습이 필요치 않은 범용 모델
- 10턴 이상의 긴 문맥을 고려하고 이해하는 모델
- 제품화하고 시장에 내놓을 때 가능/불가능 타겟을 빠르게 정리
- 불가능!) 데이터 없이 학습 없이 이루어지는 마술같은 머신러닝
-
되는 것을 빠르게 파악하여 집중하자
- 구축 > 훈련 > 평가 > 개선으로 이어지는 흐름을 자동화함; AutoML
- 자동으로 데이터셋을 개선하기, 정리하기 (강재욱님 발표)
- 자동으로 모델을 평가하고 튜닝하기 (2018 DEVIEW 이재원님 발표)
- 분산 환경과 파이프 라인으로 최대한 빨리 모델 학습하기
- 재학습, 운영, 관리, 지표화를 통해서 통제 가능하고 운영 가능한 머신러닝 서비스 만들기
- 유저의 암시적 피드백을(IRF) 통해서 데이터 개선하기
- 챗봇에서 가능한 내용
- 구축 > 훈련 > 평가 > 개선으로 이어지는 흐름을 자동화함; AutoML
-
모델의 비용 계산하기
-
SOTA 하나로 모든 데이터를 최적으로 서비스하는 것은 무리
-
어떤 언어에서 이 모델이 적합한가, 언어마다의 특성을 고려한 데이터 규모별 강점을 가지는 다양한 모델을 고려해야함
-
다양한 모델들을 테스트하고 적용해보면서 최적화
-
비용부담; 연산장치에서 사용하는 부동소수점 연산으로 비용을 계산
-
인공지능으로 돈을 벌기 위해서는?
- 모델 학습에 필요한 비용이 저렴하고
- 사전 학습된 모델을 도메인 별 fine-tuning 하여 이용 가능하며
- 모델의 연산 비용이 충분히 작고 최적화 되어 있으며
-
모델의 물리적인 용량이 작아 한정된 인프라에서 다수를 서비스 할 수 있으며 5. 동시에 충분한 성능(정확도)를 보장해야 합니다.
- 즉 비용을 고려한 최적화가 필요합니다.
-
-
-
Amdahl’s law를 기억하며
- 암달의 법칙, 암달의 저주
- 95%를 병렬화 할 수 있는 코드가 있다고 했을 때에도 성능향상은 20%밖에 없음
- 무한의 컴퓨팅 자원을 투입하더라도 획기적인 성능 향상은 기대하기 어려움
- 범용환경? 전용환경?
- 빠른 모델이 좋은 모델일까?
- RNN과 BERT?
- BERT가 병렬화 되어있어 빠르지만 모델 사이즈는 BERT가 훨씬 큼
- 레이턴시와 쓰로풋을 항상 고려해야함! 이를 트레이드 오프 하면서 둘다 고려해야함
- 베이스라인의 중요성, 여러 모델을 앙상블 해야하는 이유!
- RNN과 BERT?
- 경제적인 모델?
- 학습과 추론의 성능 최적화가 곧 비용인 시대
- 연산량 자체가 워낙 많기 때문에 쓰로풋과 비용에 대한 최적화가 가장 어려움…
- 모델을 설계하는 단계부터 이러한 내용들을 많이 생각해야함 ㅠㅠ
- 암달의 법칙, 암달의 저주
-
조금만 더 줄어 주면 안될까?
- 모델과 대화하기 그리고 설득하기
- 모델 레이어, 파라메터 튜닝
- L1 가지 치기
- 레이어간 파라메터 공유
- 컴퓨팅 자원 친화적인 연산으로 교체
- 특정 장비별 오퍼레이션 최적화
- BERT는 거대한 모델이기 때문에 최적화를 하는 일이 비용도 많이 들고 시간도 많이 소요됨
- 양자(quantization)된 모델
- 모델러와 소통하기 어렵다
- 같은 목표와 성과로 이어지면서 서비스와 제품으로 묶여야함
- 엔지니어에게 남은 모든 걸 하기
- 프레임워크의 코드도 커스터마이징
- 텐서플로, 파이토치를 사용하면서 버전이슈에 대한 파악 필요
- 수없이 빌드-테스트 하면서 연산 라이브러리도 교체함
- JNI(Java Native Interface) 수준으로 서비스 코드와 결합도 시도
- 네이티브 바이너라도 시스템과 환경별로 생성
- 모델 내부에서 프로파일링을 통해 모델의 계산 비용을 분석
- 정적분석을 통해서 어디서 연산이 많은지 체크 가능
- 물리적인 연산장치도 체크해서 필요한 경우에 장비를 추가하거나 직접 intel과 미팅하여 문제 제기
- 프레임워크의 코드도 커스터마이징
- Intel AVX 512
- 챗봇 서비스에 사용하는 모델 BERT 기준으로 단일 추론 7ms 수준으로 개선
- batch 1, intel xeon sp2 2.5Ghz 20 core
- tensorflow 1.2 이상이어야하고 스케쥴링 변수가 잘 지정되어야하는 등의 조건을 만족해야함
- 챗봇 서비스에 사용하는 모델 BERT 기준으로 단일 추론 7ms 수준으로 개선
- AVX 512 VNNI
- 양자화된 모델 추론 가속을 적용하면 3배정도 빨라질 것이라 예상
- TensorRT
- 특정 환경 런타임을 기반으로 한 추론 라이브러리 등이 존재
- 범용 연산에서 전용 연산으로 내려온다면 연산 속도가 급격하게 줄어들 수는 있음
- 서비스에 따라서 비용계산을 유연하게 해야함
- 모델과 대화하기 그리고 설득하기
-
모델 정말 1만개를 서비스했을까?
- 도메인마다 특화된 서비스 튜닝, 빌드가 필요함 –> 상징적인 숫자 1만
- Auto ML + Auto Quantization
- 모델 튜닝하는 것과 데이터를 튜닝하는 것, 그 외 연구에 대해 필요한 모든 걸 준비하는 사전준비작업을 최대한 자동화함
- one source multi environment models
- 다양한 환경에서 (일반서버, GPU서버, 웨어러블, 가상, 오케스트레이션) 서빙 가능한 모델을 하나의 소스와 빌드 시스템으로 관리
- 모든 모델과 데이터들을 Freeze 된 버전별로 스냅샷으로 저장해서 관리, 배포, 수정할 수 있게함
- 네이버 딥러닝 분산 플랫폼 C3DL 기반으로 동작
- decentralized clusters - (kaa)
- 비 중앙화된 분산 클러스터를 이용한 머신러닝 모델 서빙 엔진을 설계
- Spark, scala, tensorFlow를 하나의 코드베이스로 동작하는 데이터 파이프라이닝과 서빙시스템 구축
- 공통으로 쓸 수 있는 로지컬한 코드를 다 분리해서 정적모듈화 해서 신속하게 모델 설계를 하고 실험할 수 있도록 함
- On-premise 등 패키징을 시스템 초기 설계 수준에서 고려
- 동일한 인터페이스에서 운용할 수 있도록
- 클러스터는 적어도 두벌 이상의 데이터가 존재
- 분산 클러스터, 한쪽이 죽어도 다른 부분에서 체크해서 안정적인 배포가 가능하게 함
Track 1) 레이블링 조금 잘못돼도 괜찮아요: Clova가 레이블 노이즈 잡는 법
- 레이블 노이즈 그게 왜 문제?
- 레이블 노이즈란?
- 같은 범주의 데이터를 잘못 설명하는 의도되지 않은 미스레이블링
- 레이블 노이즈는 어디에서나 존재함
- 왜 문제인가?
- 레이블영역에 대한 특징을 모델이 학습하는데 노이즈가 많이 있는 경우 더 복잡한 패턴을 학습하게됨
- 불필요하게 다른 내용을 학습하게된다는 것
- 모델의 feature extraction을 어렵게하여 모델 성능을 떨어뜨림
- 레이블영역에 대한 특징을 모델이 학습하는데 노이즈가 많이 있는 경우 더 복잡한 패턴을 학습하게됨
- 훈련모델 = 훈련방법(데이터, 모델구조)
- 복잡하고 큰 모델을 사용하면 됨(ex. BERT)
- 노이즈데이터를 알아서 필터링해서 사용
- 무거운 모델은 훈련비용, 서빙비용이 매우 증가함…
- 커리큘럼 러닝; MentorNet
- 사람이 학습하듯 쉬운 데이터부터 제공해서 학습
- 커리큘럼을 생성해주는 모델을 본 모델 앞단에 붙임
- 그러나 훈련 복잡도가 높아지고 추가 어노테이션(데이터셋)필요
- 데이터 클리닝! 데이터 자체를 정제하자
- 그러나 사람이 수동으로 작업해야함
- active learing for label cleaning
- 일단 기계가하고 사람이 2차검증
- 사람의 개입없이 레이블 노이즈를 제거해보자 => AutoML
- 레이블 노이즈란?
- 레이블링 바로잡는 AutoML
- Project Khan
- 챗봇 빌더에서 피쳐 엔지니어링, 하이퍼파라미터 튜닝 등을 담당하고 있음
- Split - Train - Check 알고리즘
- 전체 데이터셋을 트레인/밸리드 셋으로 분할
- 트레인은 콜렉션을 위한 기준데이터, 밸리드는 레이블링 검사대상임
- checker에 트레인셋을 밀어넣어 학습, 밸리드 셋을 훈련된 체커에 넣어서 레이블링을 체크함
- 그러나 모든 데이터를 검수할 수 없음
- MultiSplit – Train – Check - Vote; 전체 데이터를 빠짐없이 체크할 수 있는 방안
- 각 체크에서 나온 것들을 보증해서 업데이트함
- 여러버전의 스플릿 브랜치를 구성하고 각각의 S-T-C결과를 결합해서 Vote
- 다수결(majority vote)에 따라 결과 레이블을 업데이트
- 그러나 체커는 클래시피케이션 모델이기 때문에 코스트 밸류를 리턴 -> 이걸 soft-value로 활용할수 있지 않을지?
- PICO: Probabilistic Iterative COrrection
- 확률을 다루는 부분을 다시 사용
- checker결과를 위한 베이지안 확률 결합
- 레이블링의 interative probabilistic correction
- 레이블링 히스토리를 관리하는 모델링;Hidden Markov Model
- 반복적 확률적 vote를 통해 점진적으로 레이블 노이즈를 제거
- 주변의 꺠끗한 데이터로부터 correction, 노이즈데이터들도 교정되어감
- 어떻게 Interation에 따라서 어떻게 확률정보를 전달할까?
- 레이블링 히스토리 HMM모델링
- 현재에 과거의 이력을 알 수 없었음
- 과거의 확률을 array 형태로 보유해야 체크 가능
- => 서버 과부하!!
- N × N per iteration
- 이전의 단계만 기록함
- hidden markov process
- 이 경우에도 서버 과부하 ㅠㅠ
- Project Khan
- 설계와 구현사이 삽질기
- PICO 실제 구현
- GPU 리소스 이슈
- 브랜치 마다 데이터셋의 비율을 지켜야하는데(0.05) 약 88개가 필요했음…
- 아직 해결하진 못했으나 브랜치를 최소화하고 early stopping criterion을 도입할 예정
- 확률값을 저장하고 읽어와야함 => 메모리 이슈
- spark에 올리고 sparse matrix로 도입해서 해결
- sparse matrix; 중요한 정보만 매트릭스로 저장하는 방법
- spark에 올리고 sparse matrix로 도입해서 해결
- 학습된 모델에서 밸리데이션 셋을 통해 결과를 받아와야하는데 inference API가 과부하
- local에서 모델을 평가하는 방식으로 해결
- GPU 리소스 이슈
- PICO 실제 구현
- FAQ 데이터 셋에 적용해 보기
- 데이터셋 인텐트 분포
- 클래스 레이블링을 직접하다보면 실수가 발생할 수 있는데 이를 PICO가 잡아줄 수 있음
- 데이터셋 인텐트 분포
- 개선 방향
- 클래스 inference issue
- 주변이 없으면 볼 게 없다보니 고칠 수가 없음
- 이 문제를 해결하기 위해 문장 생성 프로젝트의 모듈을 가지고와서 문장을 생성해서 그 부분을 채워줌
- 다양한 metric voting 방식 적용
- 클래스 inference issue
- 요약
- 데이터품질전략이없는AI프로젝트는성공하기어려움
- AI 데이터 자동정제 파이프라인은 매우 큰 경쟁력
- Naver Clova Chatbot Builder는 PICO를 통해서 데이터 자동 정제하여 서비스 품질 개선
- PICO 아키텍쳐는 다른 종류 데이터 셋에도 적용 가능
- Human-free data cleaning can improve your AI performance
- 노동에서…벗어나자
Track 1) 모바일 서비스를 위한 가벼운 이미지 인식/검출용 딥러닝 모델 설계
- 소개
- 새로 만든 성능 좋은 가벼운 딥러닝 모델 소개
- 딥러닝 모델을 축소시키는 데 중요한 팁 공유
-
Deep Neural Network의 출현으로 도래한 인공지능 (AI) 시대
- CNN
- CNN -> 1026개의 숫자 결과가 나옴 -> 이미지의 feature value
- CNN을 여러 계층으로 쌓았을 때 기대되는 성능 좋음
- 나온지는 오래됐지만 학습시키기 어려워서 사용하지 못했음
- AlexNet
- CNN을 처음으로 학습에 성공시킴
- 10년 이상 지속된 성능 정체를 단번에 해소됨( 10%대가 깨지고 바로 20%대로 도약)
- 도래한 AI 시대
- object detection, segmentation 기술 등이 실생활에 도입
- 어떻게 deploy할 것인가?
- CNN
- 딥러닝 모델 (backbone)을 통한 이미지 분류/검출기 트레이닝의 개괄
-
backbone이란?
- CNN네트워크가 학습된 상태에서 가중치를 품고 있을 때, feature extractor
- backbone의 성능은 이미지 처리 딥러닝 모델의 성패를 좌우
- backbone에 이미지 데이터를 넣어주면 어떤 고차원의 벡터가 나옴 –> feature를 뽑아냄 => feature extractor, encoder 라고 볼 수 있음
-
Transfer learning?
- backbone 에서 나온 feature를 가져와서 학습
- backbone의 weight 파라미터들을 그대로 전이(transfer)
-
finetuning
- YOLO; 앞단의 backbone의 가중치를 고정하고 뒤쪽을 트레이닝해서 튜닝
- SDD; backbone의 가중치를 고정치 않고 미세하게 튜닝하기도 함
-
서비스에 딥러닝 모델을 적용한다면
- 어떻게 서비스에서 모델을 사용할 것인가?
- 큰 모델을 가지고 프리 트레인된 백본을 만들고, 그다음에 타켓에 맞춰진 모델을 파인튜닝 하는 것이 좋다
- 어떤 딥러닝 모델을 쓰느냐
- 어떤 빅데이터를 이용해서 모델을 프리트레이닝 할것인가
- 백본모델의 성능이슈
- 트레이닝 세팅을 어떻게 정밀화할지
-
딥러닝 물체분류 검출기 트레이닝 개요도
- 큰 데이터셋 확보; ImageNet 1k
- ILSVRC 에서 발표하고, 랭크 인 된 backbone들을 실제로 사용하고있음
- 수많은 사람들이 사용해서 성능이 잘 나온다고 나온 결과물들이 있음
- 전이학습하기 용이함
- 클래스 별로 많은 이미지를 쓸 수록, 많은 클래스를 써서 트레이닝 할 수록 모델 전이학습이 더 잘 됨
- 딥 러닝 모델 선택, 큰 데이터에 학습 (pretrain)
- 모델 선택&학습; 연산량 대비 성능(acc)이 높은 모델을 선택해야함
- Model-zoo; 빠른 개발을 위해서 model을 모아놓은 페이지를 공개함
- ImageNet 데이터 외 다른 데이터에 모델학습을 할 때에도 ImageNet기준으로 성능이 검증된 모델을 선택하는 것이 좋음
- 모델을 깎는다? 성능 좋은 모델 설계/개발 + 트레이닝 스킴 최적화
- Pretrained backbone 의 성능 관찰 (evaluation)
- 백본의 성능을 좋은 것을 쓰면 타겟 태스크의 성능이 무조건 좋아짐!
-
목표 데이터셋의 학습 데이터로 학습 (finetuning)
- 목표 데이터셋에서 검출기 성능 관찰 (evaluation)
- 큰 데이터셋 확보; ImageNet 1k
-
-
최신 가벼운 딥러닝 모델들 소개와 몇가지 이슈
-
최신 가벼운 모델들
- CNN을 두개로 쪼개서 더 적은 파라미터로 비슷한 성능을 낼 수 있게 함
- 일반적인 CNN에서도 이를 사용 => SqueezeNet, MobileNetV1, MobileNetV2, MobileNetV3, ShuffleNetV1, ShuffleNetV2, MNasNet, FBNet, CharmNet, EfficientNet 등
-
최신 가벼운 모델들의 성능 재현
-
논문을 따라서 잘 트레이닝 시켜도 리포트도니 성능을 얻기 쉽지 않음
-
다른 세팅으로 동일 결과를 얻을 수 있게 아래 내용을 세팅해야함
※ 트레이닝 세팅 – optimizer 종류, learning rate 값, weight decay 값, epoch 수, learning rate scheduling 방법, data augmentation 방법/강도, 기타 regularizer 유/무
-
- 파인튜닝 성능 이슈
- 실제 서비스 이슈; 성능측면
- Flop에 따라 속도가 비례하진 않음
- 실제 서비스 이슈; 모델 크기
- 모바일에 올리기 위한 기존의 엄격한 기준이 많이 완화됨
- 모델 크기가 작다해서 실제로 더 빠르지도 않음
- 실제로 돌려보고, 성능 측정해보고, Flop을 조정해야함!
-
-
새로 개발한 가벼운 모델과 성능 소개
-
모델 설계 배경, 목적&방법
- 가벼운 모델 사이의 이슈를 해결하고 SOTA 대부분인 모델 전부가 NAS로 찾아낸 모델이며 이미지넷 분류 문제에 피팅되어 설계된 모델임
- 가벼운 구조 중에서 SOTA를 얻어보자
- CPU inference 용 모델을 개발해보자
- 파인튜닝 잘 되는 구조로 개발
- NAS, Netadpt류 방법의 베이스라인 모델로 제공
-
모델설계 디테일
- 모델 구조 개선; input 쪽의 앞단을 계산량을 줄이기 위해 얇게(?) 되어있는데 이를 조금 더 보완하여 부족한 레이어의 피쳐 수를 보강함
- 이를 통해서 성능이 매우 올라감
-
모델 설계 프로세스 요약
1) 기존 모델 성능 reproduction - 제일 중요합니다
2) 비교 모델들 성능 reproduction 3) 신 모델 연구 (설계/트레이닝/테스트 반복)
– 모델 설계를 계속해서 바꿔가며 성능을 측정합니다
– ImageNet-1k이 매우 크므로 작은 데이터셋 (예: cifar 등)에서 먼저 실험을 추천합니다.
4) 모델 트레이닝 방법 (training scheme) 연구/최적화 – 최적 세팅을 연구하는 것이 중요합니다
5) 모델 정밀 설계 – 추가 모듈을 통한 성능 향상 여지가 더 있는 확인합니다 6) Finetuning 결과 확보 – object detection이나 segmentation 등에 활용하여 성능 확인
-
신모델에 쓰인 디테일
- 다운샘플링, 업샘플링 하나하나가 엘라스틱 모듈
-
학습환경
-
MXNet
-
Training 세팅 (MobileNet 등 기본 training 세팅에 더하여):- Mixed precision (fp16 + fp32) 사용
- Learning rate 등 training hyper parameter들의 최적 세팅 경험적 튜닝 - Tensorflow 기본 세팅인 EMA (exponential moving average) 등 사용하지 않음
-
Test 세팅:
- 기존 모델과 동일한 standard setting (256 resize 후 224x224 center crop) - 공정한 비교를 위해 찾아낸 세팅들 비교 모델에 모두 적용 후 비교
-
-
성능 비교
-
-
신모델을 활용한 finetuning 성능과 실서비스 적용 예 + 추가팁
- object detection 적용
-
결론
-
- Backbone 모델의 성능이 목표 task 성능을 크게 좌우하므로 좋은 backbone을 써서 트레이닝 하는 것이 중요합니다
-
- 최신 공개된 모델들은 finetuning 시 성능이 만족스럽지 않을 수도 있습니다
-
- 그러므로 리소스가 충분하면 좋은 backbone 개발을 시도하시고, 그렇지 않으면 공개할 저희
모델을 쓰시면 됩니다 (ImageNet 성능과 Finetuning 성능까지 모두 좋습니다)
-
Leave a comment