1. ImageDataGenerator로 증식한 이미지를 저장하는 방법(save_to_dir, save_format 옵션 이용)
https://www.tensorflow.org/api_docs/python/tf/keras/preprocessing/image/ImageDataGenerator#flow
from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
datagen = ImageDataGenerator(
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
fill_mode=`nearest`)
img = load_img(`data/train/cats/cat.0.jpg`) # PIL 이미지
x = img_to_array(img) # (3, 150, 150) 크기의 NumPy 배열
x = x.reshape((1,) + x.shape) # (1, 3, 150, 150) 크기의 NumPy 배열
# 아래 .flow() 함수는 임의 변환된 이미지를 배치 단위로 생성해서
# 지정된 `preview/` 폴더에 저장합니다.
i = 0
for batch in datagen.flow(x, batch_size=1,
save_to_dir=`preview`, save_prefix=`cat`, save_format=`jpeg`):
i += 1
if i > 20:
break # 이미지 20장을 생성하고 마칩니다
2. EC2에서 Tensorflow Object Detection API 가져올 때 권한 및 환경변수(PYTHONPATH) 관련 에러 발생
(root 계정/관리자 권한으로 점유 중인 프로세스를 모두 닫고 우분투 내 패키지들을 업데이트/업그레이드 시켜줘도 동일한 에러 발생)
진행 중인 모든 프로세스 끄기
killall apt apt-get
방법 1 : 우분투 내 패키지들을 업데이트/업그레이드
su
apt-get update && apt-get upgrade -y
혹은 방법 2 : 우분투 내 패키지들을 업데이트/업그레이드
sudo apt-get update && apt-get upgrade -y
혹은 방법 3 : lock 걸린 파일들 지워주고
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock*
패키지 설정 후 업데이트
sudo dpkg --configure -a
sudo apt update
혹은 방법 4 : remove the lock file
sudo rm /var/lib/dpkg/lock-frontend
sudo dpkg --configure -a
sudo apt update
3. YOLO v5 공식 깃허브에 모델 성능을 높이는 팁
- 데이터 셋이 충분이 크고 라벨링이 정확하게 되어야 (class당 1500개의 이미지)
- Background Image 넣기 (탐지할 물체가 없는 데이터들) → False Positives (FP)가 줄어드는 효과. 전체 학습 데이터 셋에 0-10% 정도 넣는 것을 추천. (COCO 데이터 셋은 1000 개의 백그라운드 이미지를 가지고 있음 - 학습 데이터 셋의 1%)
- Pre-Trained Weights 사용하기 → 작거나 중간 정도 사이즈의 데이터셋에 추천 (--weights 인자 값을 넣으면 됨)
- Epoch는 300부터 시작해서 over-fit 이 발생하면 줄이고 발생하지 않으면 600, 1200 등으로 점점 늘리기
- 작은 크기의 물체가 많을 수록 높거나 원래의 해상도 사이즈를 쓰면 좋음
- 최고의 인퍼런스 성능을 내려면 인퍼런스 돌릴 때 input으로 들어가는 이미지 사이즈가 학습 때 설정한 이미지 사이즈와 같아야
- 기본값으로 저장된 모델 하이퍼 파라미터들은 data 폴더 안에 hyp.scratch.yaml 에서 찾을 수 있음. 먼저 이 하이퍼파라미터로 학습하는 것을 추천
- YoloV5의 Hyperparameter evolution 기법 → Genetic Algorithm(GA) 를 사용해서 하이퍼파라미터를 최적화하는 방법+) 인자 값으로 --evolve를 줘서 Hyperparameter evolution을 사용할 수 있음. 시나리오 50번을 돌려서 hyperparameter를 최적화하고 결과값은 evolve.txt 에 저장됨
github.com/ultralytics/yolov5/issues/607
https://lynnshin.tistory.com/47
https://github.com/ultralytics/yolov5/issues/607
4. YOLO의 성능지표(mAP)
- IoU(Intersection Over Union)? GT(Ground Truth, 정답) 박스와 검출된(예측된) 박스 간의 겹침을 평가하는 기법
- Precision(정밀도)? 모든 예측된 바운딩 박스들 중에서 맞은 것의 비율
- Recall(재현율)? 전체 타깃 바운딩 박스(정답)들 중에서 우리가 검출한 것의 비율(맞춘 것)
- AP(Average Precision)? Recall을 0부터 0.1 단위로 증가시켜서 1까지 (총 11개의 값) 증가시킬 때 필연적으로 Precision이 감소하게 되는데 각 단위마다 Precision 값을 계산하여 평균을 냄
- mAP(mean Average Precision)? 전체 클래스 개수에 대해 AP를 계산하여 평균을 낸 값
- mAP_0.5? mAP의 평균을 IoU Threshold = 0.5로 구한 값
- mAP_0.5:0.95? 0.5~0.95 사이의 IOU threshold 값을 0.05씩 값을 변경해서 측정한 mAP의 평균
https://lynnshin.tistory.com/48
Validate a trained YOLOv5 model accuracy on a custom dataset
https://github.com/ultralytics/yolov5/blob/master/val.py
5. YOLO v5 Error during Training Session on Colab
error can't get attribute 'sppf' on < module 'models Solution of common 'from' xxx '>
→ utils/google_utils.py 열어 25번째 라인 다음과 같이 수정 후 저장 & 업로드
response = requests.get(f'https://api.github.com/repos/{repo}/releases/tags/v5.0').json() # github api
'개인 공부' 카테고리의 다른 글
6/18 토_리눅스 명령어(압축), Git LFS, credential.helper store (0) | 2022.06.18 |
---|---|
6/16 목_YOLO v5 Models & Training Arguments, 리눅스 HDD 용량 확인 (0) | 2022.06.16 |
6/9 목_PermissionError (0) | 2022.06.09 |
5/4 수_Up/Down-Sampling, Over/Under-Sampling (0) | 2022.05.05 |
4/30 토_OSHW (0) | 2022.04.30 |