딥러닝 학습방법
- 부적합 : train, test 데이터셋 모두에서 성능이 떨어지는 경우
- 과적합 : train, valid 데이터셋 성능이 우수하나 test 에서 떨어지는 경우
- Gradient vanishing 기울기소실 / exploding 기울기폭주 : 학습의 역전파 과정에서 이상가중치 발생
-- > 적용가능한 해결방안 : 활성함수변경, 가중치초기화, 정규화(요즘 사용안하는 추세임)
모델 학습 하이퍼파라미터
**주의 : 모델 찾을때 최근 3년 넘어가는건 사용하지말기 & 너무최신꺼는 버그가 많음**
1) Loss Function
- 모델이 도출한 output과 정답지target의 차이를 수치화하는 함수
- 회귀분석문제에는 MSE / classification에는 Cross-Entropy
- 이진분류문제는 Binary Cross-Entropy
2) optimizer
- 가중치가 구성하는 공간을 탐색하여 모델loss 가 최저가 되는지점 찾아내는 알고리즘
- 기본형 SGD(경사하강법),,이를 활용한기법으로 : Momentum, AdaGrad(RMSprop), Adam(Momentum+AdaGrad)
3) Learning rate
- optimizer 보폭 조절할수있는 하이퍼파라미터
- 이값이 크면 optimizer의 이동이 크고, 작으면 작게이동함
- 0.01을 기본으로 사용
4) 배치의 크기 batch size
- mini batch 를 주로 사용, 일반적으로 컴퓨터에서 가능한 최대크기로 설정
[ batch size 따라 stochastic, full batch, mini-batch ]
- stochastic: 학습 시 소요되는 연산량 적음. 하나씩만 학습하므로 학습 효율 저조
- full batch: 많은 컴퓨팅 자원 소모. 데이터셋 전체를 학습하므로 양질의 학습 가능
=> mini-batch: 절충 방식. 사용자의 컴퓨팅 환경에 맞춰 1회 학습량을 조절할 수 있음
주의할점 : augmentation 적용할때, 랜덤스케일 걸어뒀으면 터진다 (resize나 scale 없다면 full batch 사용) 보통 32
yolo5 : 논문이 없음 -> yolo7 : 무거움
학습횟수 / epoch / step
object detection은 학습이 좀 많이 돼야함
- 학습횟수 = epoch의 횟수
- epoch : 전체데이터셋에대해 한 번 학습 진행하는것
- step : 한 epoch에 사용되는 mini-batch의 개수 ('iteration'은 보통 step을 의미)
활성함수
sigmoid : 요즘엔 잘 사용하지는 않지만(gradient vanishing 이슈), 이진분류에는 사용함
- 모델의 각 layer단의 출력값을 조절하기위해 사용
- 현재는 ReLU, Leaky ReLU가 자주 사용됨
image net zoo- model
- Tensorflow, PyTorch, MxNet 등에서 빠른 학습을 위해 모델을 모아 놓은 것
모델 선택과 학습
- 기존모델 사용시 : 일반적으로 ImageNet 기준 성능 좋았던모델 사용,, ResNet50, VggNet16 등
- 새로운모델 사용시 : 모델구조 설계개발및 최적화진행
object detection 모델
- OpenMMLab : cuda환경 맞춰주면 그나마 사용하기 쉬움
- Detection Zoo : Detectron2 : facebook ai research에서 개발한 pytorch기반의 object detection, segmentation 라이브러리
성능측면 : 무거운 딥러닝 모델
1) VGG-16 (파라미터는 많으나, 생각보다 빠르고 성능이 좋음)
2) ResNet50-SE (ResNet101이나 ResNet152 대비 efficient, GPU 서빙의 마지노선)
3) ResNeXT101-SE + FPN (FPN은 detection등에 적용할 때 성능에 큰 영향)
4) Xception 계통 (의외로 효율적이고 강력한 모델, group-conv 기반)
5) EfficientNet-B4 (효율적이고 성능이 좋지만, dw-conv 기반)
속도측면 : 가벼운 딥러닝 모델
1) ResNet-18 (ResNet-50보다 빠르지만, 여전히 크기가 큼) / 2) Xception 계통 (CPU용, Xception을 작게 만들어 사용)
3) MobileNetV1 (CPU용, MobileNetV2보다 더 좋을 때가 많음) / 4) YOLO 계열 / 5) SSD 계열
회귀모델 성능지표
1. 평균 절대 오차 2. 평균 제곱 오차 3. 평균 제곱근 오차 4. 평균 절대 비율 오차
평균절대오차 : 특이값이 많은 경우에 주로 사용
평균절대비율오차 : 단점) 실제 정답이 1보다작을 경우,무한대의 값으로 수렴할 수 있음
분류모델 성능평가지표
- Accuracy, precision, recall, F1score
- confusion matrix(혼동행렬, 오차행렬) : 모델이 두개의 클래스를 얼마나 헷갈려하는지 알수있다
1) Accuracy 정확도
- 모델이 전체문제중 정답을 맞춘 비율, 1에 가까울수록 좋다 (데이터 불균형할때 Recall, Precision까지 같이 봄)
2) Precision 정밀도 : PPV - 잘 사용 안됨
3) Recall 재현율 : Sensitivity 민감도= TPR (true positive rate)
- 의료쪽 데이터에서 많이 사용
4) F1 score
객체인식모델의 성능지표
1) IOU : 젤많이 사용됨 : 실제 경계 박스와 예측 경계 박스가 정확히 일치할수록 IoU가 1에 가까워진다
- 실제 객체위치 bouding box와 예측한 bounding box 두 box가 중복되는 영역의 크기를 통해 평가하는 방식으로, 겹치는 영역이 넓을수록 잘 예측한것으로 파악한다
2) Precision Recall Curve
3) Averate Precision (AP , 평균 정밀도)
- ap 0.5~0.9 사이의 평균이 높아야됨
- ap 곡선(average precision curve) : precision과 recall을 고려한 종합적 평가지표
4) maP : mean Average Performance
- 각 클래스별로 AP를 구한후 (전체)평균낸것
- 어떤 라벨이 제대로 못잡는지 알게됨
Pretrained Backbone
Backbone이란?
- Detection, Segmentation 등 고도화된 이미지 처리 인공지능 모델에서 이미지 특징 추출을 위해 사용되는 Image Classification 모델
- backbone 을 사용해야하는 이유 : 더 좋은 backbone을 사용한다면 : 더 좋은 detection수준을 가질것으로 기대
Fine tuning이란?
- Transfer learning: Pre-trained model을 가져와 사용하는 것 / Finet uning: 사전 학습된 가중치를, 사용 목적에 맞도록
업데이트하는 것
- fine tuning 전략 : 1. 전체 모델 새로 학습: 사전 학습된 모델의 구조를 사용하되, 데이터셋에 맞춰 새로 학습시키는 방법.
/ 2. Convolutional base의 일부만 고정하고, 나머지 계층과 Classifier 새로 학습 / 3. Convolutional base는 고정하고, Classifier만 새로 학습 --- 우리가 fine tuning 을 손댈필요는 거의 없을것
Mixup Training
- Data augmentation 기법의 일종으로 두 데이터와 라벨을 일정 비율로 섞어 새로운 데이터를 생성 하는 방법
- 비슷한것끼리 분류할때는 잘 안씀, 패턴이 단순하면(라벨이 여러개가 아니라) 큰의미 없음
Model ensemble
- 여러 모델 결합하여 모델의 정확도 향상시키는것 (대회에서 순위굳히기 용도, 평소엔 잘 안씀, 모델이 너무 많아지므로)
1) Bagging : Bootstrap Aggregation의 약자. 데이터셋으로부터 여러 개의 샘플을 추출(bootstrap)하여 모델들을 학습시키며, 문제에 대한 모델들의 결과를 집계(aggregate)하여 최종 결과 도출
2) Boosting : 약 학습기들이 순차적으로 결합하여 문제 해결 규칙 형성. 잘못분류된 데이터가있을경우 이를 평균치로 땡기는것(대회에서 사용, 잘 안씀)
- 차이 : Bagging : 병렬학습, 빠른학습속도, 각 모델학습이 독립적임
Boosting : 순차학습(한모델의 학습결과가 다음모델에 영향미침), 느린학습속도, 오버피팅 발생할수있음