티스토리 뷰
이미지 수집
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()