티스토리 뷰

반응형

이미지 수집

roboflow에서 수집해서 로컬에서 수정해도 된다.

 

최소한 클래스 3개 이상 분류

 

Non - Iconic 한 이미지(어떤 특정 object를 가르키는지 모른다.)

 

이런 조건이 있으면 실습하기 좋은 이미지

 

Iconic과 non-Iconic이 반반 섞이는 게 이상적이다.

 

최소한 1만장 이상이 best이다.

 

roboflow에서 annotation 하기

프로젝트 만들기 -> 이미지 업로드

annotation group에 class 이름을 따로 구분해야 한다.

save and continue를 누른다.

 

manual labeling을 하기 위해 한다.

assign images

 

upload가 다 되면 annotate 창으로 넘어간다.

start annotating을 해서 좌측 하단에서 이미지 사이즈 조절

 

ctrl 누르고 마우스 드래그로 조정

단축키 b를 누르면 박스를 그릴 수 있다.

잘못된 것 지우는 것 - layer에서 delete 눌러도 되고, options에서 삭제해도 된다.

 

겹치는 object의 bounding box를 어떻게 그려야 할까?

정답은 없으나, 상반신만 들어가면, 훈련되었을 때 상반신만 보고도 그려질 가능성이 있다.

그러므로 최대한 전체를 그려주는 게 좋을 것이다.

 

layers 누르면 우리가 그린 것들을 볼 수 있다.

 

annotation이 다 되면, create new version

preprocessing option -> 기본이 가장 좋다.

 

Augmentation step

 

rotation을 아주 살짝

create -> 무료 버전이라서 3배까지만 가능하다.

 

export 눌러서 yolov8 버전으로 다운로드도 가능하고, 코드로도 쓸 수 있다.

 

코드를 쓰면 roboflow 설치하고, 그 아래에 데이터셋

yaml 파일 경로를 수정

 

colab에서 사용할 때는 ..train으로 다 바꿔줘야 한다.

 

ybat master

가장 먼저 할 것은 image만 있는 폴더 만들기

그래서 image를 옮긴다.

 

classes.txt에 클래스를 넣는다.

좌우 -> 이미지 바꾸기

상하 -> class 선택

 

박스 사이즈 조절 가능

더블클릭해야 완료

 

save yolo

ybat -master 폴더에 가져와서 이미지 폴더에 있는 파일 명과 똑같은 txt 파일이 생성된다.

 

로컬에서 작업한다면, 이미지를 내 구글 드라이브에 바로 올리던지 해야 한다.

그 다음에 yaml 파일을 만들어야 한다.

 

roboflow 통해서 만든 yaml 파일을 가져와보자.

train ../train/images

val: ../valid/images

test: ../test/images -옵션

 

nc :2

names : ['car','person'] 순서대로 넣어야 한다.

 

roboflow 아래 있는 건 신경쓰지 않아도 된다.

 

구글 드라이브에 업로드 한다면, 이 경로를 drive 경로로 수정해줘야 한다.

 

예시: datasets 폴더가 있으면 아래 train, val 폴더가 있어야 하고,

각각

images

labels

폴더에 해당 하는 데이터가 들어가 있어야 한다.

 

학습할 때 patience와 epoch는 defalut를 100이나 준다.

그럼에도 안되면 conf와 iou 조절

그렇게 해도 안되면 이미지 더 수집하고 annotation을 더 해야 한다.

 

유튜브 video로 predict

 

얼굴 감지 모델을 학습시키고, 유튜브 경로를 넣어주면 된다.

results = model2.predict(source='https://youtu.be/SKUhfH2yJmY?feature=shared',
                         save=True,
                         line_width=2,
                         stream=True)

 

for r in results :
    r_bbox = r.boxes

 

 

음식 이미지 classification

png 파일 형태로 rgb로 되어 있다.

csv에 라벨이 있다.

import numpy as np
import pandas as pd
df = pd.read_csv('/content/food_labels.csv') #food_label이 적혀져 있는 csv

df.head(2)

img_path = glob.glob('/content/food_images/*.png')
img_path = sorted(img_path) #img_path를 sorting 한다.

labels = np.array( df['label'] ) #이름을 label에 넣는다.

 

yolov8에는 classification 모델이 있다.

 yolov8n-cls

 

이것도 yolo다 보니까 yaml을 건드려야 한다.

 

1. Convolutional NN으로 쓰고,

2. Transfer Learning

그 후에

3. YOLO-cls 로 써봐라.

+4. 모바일에서 yolo 모델 동작시키기(pc에서 수행한 걸 모바일로 전달하는 것)

프로트엔드, 웹, 백엔드

 

과연 어떤 차이가 있는가?

 

모바일에서 google ml kit는 잘 돌아간다.

만약 할 거라면 mobilenet 같은 걸로 직접 구축

아직은 pytorch보다 tensorflow가 유용하다. ->  tensorflow lite

 

전처리, 모델링, 학습, 추론 전 과정

기본적으로 array화 시키는 과정에서 메모리가 엄청나게 소모된다.

 

그래서 128*128 그대로 사용할 수는 없을 것이다.

그리고 여기서 label는 타겟이다.

import glob
from keras.preprocessing import image
files = glob.glob('/content/drive/MyDrive/my_data/img1/*')
files

img = image.load_img(files[-1], color_mode='rgb', target_size = (128,128) )
img = image.img_to_array(img)
img = img.reshape((-1,224,224,3))
print(f'preprocess 전: 최대값={np.max(img)}, 최소값={np.min(img)}')

img = preprocess_input(img)
print(f'preprocess 후: 최대값={np.max(img)}, 최소값={np.min(img)}')

features = vgg_model.predict(img)
print(decode_predictions(features, top=3))

plt.imshow(image.load_img(files[-1]))
plt.show()

 

 

반응형