본문 바로가기

개인 공부

6/15 수_ImageDataGenerator, PYTHONPATH, YOLO v5, metrics

728x90

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

https://chowdera.com/2022/130/202205100529561485.html

728x90