본문 바로가기

AI/TensorFlow 학습

25. TensorFlow 2.x - GTSRB를 이용한 예제

참고: https://youtu.be/gT48GRKbADI?si=-3HjQxEn_jCZU3ZO

 

위 슬라이드에서 설명했듯이,

GTSRB는 German Traffic Sign Recognition Benchmark의 약자로, 교통 표지판 사진들의 모음이다.

https://sid.erda.dk/public/archives/daaeac0d7ce1152aea9b61d9f1e19370/GTSRB_Final_Training_Images.zip

여기에서 데이터셋을 다운 받을 수 있다. 앞에서 실습했던 content 폴더 아래 압축을 풀어준다.

압축을 풀면 Images 폴더 아래 숫자로 되어있는 폴더들이 나타나는데 이것이 해당 폴더안의 이미지들의 정답이다.

 

 

위의 순서대로 모델을 구현해 보자.

 

설명을 조금 덧붙이면, images 폴더에 있는 각 하위폴더들(이미지의 정답) 이름은 image_label_list에 저장되고,

경로를 포함한 각 이미지들은 img_file_list에 저장된다.

 

각 이미지에서 만든 list를 모델에 넣기 위해 학습용(x_train, y_train), 검증용 데이터(x_test, y_test)로 만드는 과정이다. 이미지들은 폴더에서 받아왔으므로 같은 정답들끼리 모여있기 때문에 shuffle()함수를 사용해서 섞어준다.

전체 데이터셋의 20%(SPLIT_RATIO)를 검증용으로 사용했고, 정규화를 위해서 255로 나누어 주었다.

 

이제 모델을 만드는 과정이다.

앞에서 설명했듯이 Conv layer를 두개 사용하고, MaxPooling과 Dense 사용하며, 출력의 activation함수는 softmax를 사용한다. 

 

EarlyStopping 조건을 걸었음에도 일찍 끝나지 않았다. 이는 학습을 더 하면 더 개선된다는 의미일 것이다.

첫 학습에서의 정확도는 8%였고, 30회 학습시 97%까지 올라갔다. 

 

 

오차도 줄고, 정확도는 올라가고 정말 바람직한 결과로 보인다.

 

다음 글에서는 이와 비슷하게 kaggle에서 콘크리트 표면 이미지로 갈라짐 여부를 판단하는 예제를 해보자.