본문 바로가기
Infra/Google Cloud Platform

[GCP] Vertex AI로 동영상 분류 모델 만들기

by jaeaemin 2022. 2. 25.

 

Vetex AI 

- 모델 만들기

 

" Vertex AI의 두 번째 포스팅입니다 "

" 이전의 내용은 이전 포스팅을 참고해주세요 "

 

Cloud Storage의 영상 데이터 셋 라벨링

 

 

 

이전 포스팅에서 저희는 GCP의 계정을 설정하고, Storage에 데이터를 저장한 뒤 Vertax AI의 설정과 모델에 사용될 데이터 셋을 만들었습니다.

위의 콘솔창을 확인하면 최근 데이터세트에 새로 만든 데이터 셋이 제작된 것을 확인 할 수 있습니다. 

하지만 이 데이터 셋은   라벨링이 되지 않은 데이터 셋입니다. 

학습을 시켜줄려면 이제 라벨링을 해줘야겠죠 라벨링을 지원하는 방법은 총 3가지가 존재합니다.



[1] CSV 파일 형식을 이용하여 CSV 문서와 영상 셋의 위치정보를 매핑시켜서 한번에 라벨링을 처리하는 방법

[2] 일일히 영상의 라벨링을 하는 방법 ( gcp에서 지원 )

[3] GCP에 일정 수준의 돈을 지불하고 라벨링 팀에게 라벨링을 맡기는 방법 

 

 

일단 제 데이터 셋은 영상 전체가 집중함/ 집중안함의 15초의 영상 셋으로 이루어졌기 떄문에 일일히 영상마다 라벨링할 필요가 없습니다.

그렇기 때문에 1번 방법을 사용해 줍니다.

( 10초에서 13초는 집중안함 , 30초에서 45초는 집중안함  ... 이런 경우는 일일히 라벨링 필요 )

 

 

지금부터 조금 까다로울 수도 있는데 먼저 제가 학습시킬 영상은 "Cloud Storage"에 위치하고 있습니다.

이녀석들을 라벨링하기 위해서는

"Cloud Storage에 위치한 파일 경로" / "라벨링할 내용" / "영상 시간 (시작~끝)" 이 정보를 담은 CSV파일을 만들고 던져주면 

vertex AI에서 저장소의 파일들을 알아서 라벨링 한 뒤에 "학습 모델이 사용하는 저장소"에 가져다 줍니다.

 

 

일단 제가 train하기 위해 만든 코드를 첨부합니다.

이 코드를 쓰신다면 필요에 맞게 알아서 수정해서 사용하셔야 합니다.

현재 데이터 셋은 good과 bad라는 집중도 관련 영상이 처음부터 끝까지 동일한 라벨링을 사용하고 있습니다.

 

< data 상황 >

bad1.mov 전체  => distracted 라벨링  ,  bad2.mov 전체 => distracted 라벨링 ...

good1.mov 전체 => concentrate 라벨링  ... 

 

 

<코드>

import csv
import numpy as np
f = open('train.csv',"w",newline='')
wr = csv.writer(f)

file_locate = 'gs://file_locate/'
file_name = 'filename'
label = 'labeling_context'
start_s = '0'
end_s = 'INF'
file_cnt = 31


"""
아래는 제 파일위치와 상황입니다 
file_locate = 'gs://uou_hanjaemin_bucket/'
file_name = 'good'
label = 'concentrate'
start_s = '0'
end_s = 'INF'
file_type = '.mov'
file_cnt = 31
"""

# 파일명 순서대로 저장 
cloud_file_locate = file_locate+file_name

# csv 파일에  파일 위치와 라벨링 하여 row 추가하기
for file_number in np.arange(1, file_cnt+1):
  file_numbering = cloud_file_locate + str(file_number) + file_type
  wr.writerow([file_numbering,label,start_s,end_s])
  print(file_numbering+'   '+label+'    '+start_s+'   '+end_s)


# 다른 이름의 파일과 다른 라벨링 (알맞게 수정)
label = 'distracted'
file_name = 'bad'
#################
cloud_file_locate = file_locate+file_name
print('++++++'+label+'+++++=')
for file_number in np.arange(1, file_cnt+1):
  file_numbering = cloud_file_locate + str(file_number) + file_type
  wr.writerow([file_numbering,label,start_s,end_s])
  print(file_numbering+'   '+label+'    '+start_s+'   '+end_s)



# 다른 라벨링 (라벨링이 2개이상이라면 추가 필요)
# ...
# 코랩을 사용한다면 파일 위치자에서 다운로드 받으면 되고, 주피터라면 바로 파일은 다운받는 코드를 사용합니다
f.close()

 

 

 

위의 코드를 통해 만들어진 train.csv라는 파일이 생성됬습니다.

아래의 형식을 확인하셔서 저와 다르게 코드를 짜셔도 무방합니다.

< 파일 경로 > < 라벨 내용 > < 시작 시간 (s) > < 끝 시간 (s) > 

 

csv파일 에시

 

 

이제 라벨링 해줄 Csv 파일을 만들었습니다.

이녀석은 아까 언급한대로 vertex-ai의 모델에 데이터를 라벨링 시켜주는 파일입니다. 

즉 이 파일을 주기만 하면 GCP에서 Cloud Storage에 위치한 파일들을 찾아서 바로 ai Model Stroage에 라벨링과 함께 파일을 전달하는 것입니다. ( csv파일은 라벨링 시켜달라는 주문서 ) 

그러면 이 CSV 파일도 Vertex ai가 사용할 수 있도록 Cloud 플랫폼 안의 저장소에 넣어줘야 되겠죠

 

 

 

 

 

다시 우리가 학습시킬 데이터를 넣어두었던 Cloud Stroage의 bucket 으로 이동합시다.

저번 포스팅에서 제 bucket은 uou_hanjaemin이라는 버킷에 학습 셋 데이터들을 넣어두었습니다. 

 

 

파일 업로드를 눌러서 저희가 만든 CSV 파일을 이 저장소 안에 넣어둡니다.

이제 저장소에는 "학습 시킬 영상 데이터 셋" + "라벨을 주문할 CSV 파일" 이 위치하고 있습니다.

라벨링을 시켜봅시다. 

 

 

 

 

 

Vertex AI 대시보드로 돌아옵시다.

 

 

우리가 만들어두었던 최근 데이터 세트에 들어갑니다.

이 데이터 세트는  Cloud Storage와는 별개의 저장소로 Vertex AI 의 Model이 사용하는 Storage입니다.

새로운 데이터 세트를 생성하거나 기존의 생성해논 데이터 세트를 눌러서 데이터를 추가하는 창으로 들어갑니다.

 

 

 

저희는 CSV파일과 데이터셋을 Cloud Storage에 저장해두었기 때문에 3번째 선택창의

"Cloud Storage에서 가져오기 파일 선택"을 클릭한 뒤 "찾아보기" 눌러줍니다.

그러면 Cloud Storage의 파일계층을 표시하는 인터페이스가 실행됩니다. 

여기 우리가 넣어두었던 CSV파일을 선택합니다. 

그 후 다음 단계 계속을 눌러줍니다.

 

Import in progress

This can take several minutes or more. You will be emailed once processing completes.

 

위의 창과 함께 데이터가 라벨링되게 됩니다. 

일정 시간을 기다리면 email과 함께 라벨링된 영상들이 Vertex-ai의 저장소 (데이터세트)로 저장될 것입니다.

 

 

 

 



데이터 셋 라벨링이 완료되었습니다. 

이제 이 라벨링된 데이터를 기반으로 학습을 진행하겠습니다. 

다음 포스팅에서는 학습과 함께 결과 보고서를 살펴보고 만들어진 모델에 대해 일괄처리를 실행해보겠습니다.

 

 

 

 

 

 

 

 

 

반응형

'Infra > Google Cloud Platform' 카테고리의 다른 글

[GCP] Vertex AI로 동영상 분류 학습  (0) 2022.02.26
[GCP] Vertex AI  (0) 2022.02.25