Ai

[Deep-Learning] Fire Classifier 과제 최종 정리

bumheeeee 2024. 11. 19. 14:35

 

인생 처음 Deep - Learning입니다..

 

# 서론

 

 

- 기간 ( 11/4 ~ 11/18 )

 

처음 만들어 보는 것이라 완성도 측면이나 내용이 정말 부실하다.

 

그리고 Deep learning이라는 것을 단 1도 접해보지 않았기 때문에 이번 과제를 하면서

 

많은 어려움을 겪게 되었다.

 

특히 구현적 측면이나 어떤 전처리 처리 그리고 데이터 사이즈 및 rate 조절도 많이 어려웠다.

 

그래도 했다는 것에 의의를 두고 2주간 완성했던 결과물을 정리하려 한다.

 


 

FIRE / NEUTRAL >> 불에서 나는 연기까지 생각해서 분류를 총 3개를 나누려고 했으나

 

불씨가 일어나서 불이 일어나는 특성도 있기 때문에 초반 진압을 위해서

 

정확히 FIRE과 NEUTRAL을 비교하려 함.

 

방법으로는 RESNET50을 사용하여

 

Fully Connected Layer(FC / 완전 연결 계층)을 변경하려 함.

 

FC는 간단히 Layer들 중에서 가장 끝에 있는 Layer를 변경시킨다고 생각하면 됨.

 

layer 계층에서 2차원에서 1차원 배열로 이미지를 분류함.

 

https://cs231n.github.io/convolutional-networks/

 

 

결과적으로 FC는 CNN에서 분류를 하는 단계임.

 

이 layer를 훈련시켜서 불과 불이 아닌 이미지를 분류하고

 

분류된 이미지는 Window sliding이라는 알고리즘 기법으로 불인 지점을 마킹해 주면서 최종적인 예측 모델로

 

불의 이미지를 분류할 것이다.

 

이렇게 데이터셋으로 훈련된 결과를 log ( json )와 pth에 저장해 두어서 실제로 모델 평가와 예측 모델에 사용할 예정이다.

 

간단하게 모델을 평가할 수 있게 log에 훈련이 진행되면서 loss를 저장하고

 

완성된 훈련은 result.pth에 저장해서 예측 모델을 사용하여 사진을 얼마나 잘 분류하는지 확인할 것이다.

 

 

# 본론 및 결과

 

예측 결과

 

 

실제 사진

 

 

 

Fire dataset >>  kaggle - 데이터셋은 kaggle이라는 사이트에서 가져옴.

 

 

파일 구조

 

Main.py  모델 평가 ( loss에 대한 그래프 )

 

Loader / train / path .py – 훈련 모델

 

Predict / Predict_view .py – 예측 모델

 

데이터 – Train Data ( 4000 )

 Val_Data (1000)

Test_Data ( 약 500개 )

 

전처리 과정

 

 

과정별 지표

 

- Batch_size 에 따른 지표 결과 변화
 
- learning_rate에 따른 지표 결과 변화
 
- Batch_size / learning_rate / epoch 에 따른 지표 결과 변화

 

 

 

1.  Batch size

 

 

Batch size32의 배수로 많이 시도 ( 32 ~ 320 )

고정 – learning rate 0.005 / epoch 20

시도 중에 가장 처음 돌린 지표와 제일 마지막에 돌렸던 지표

 

32
80

 

 

Validation loss가 갑자기 폭등한 경우가 있었음.

-Batch 64 / rate 0.1

Rate를 건드는 실수.

Epoch 15에서 갑자기 폭등한 가장 이상한 최저점 찾는 모습 중에 큰 조건 중 하나가 띄었음.

-실제 결과적으로 predict를 돌려본 결과 가장 예측 모델 중 불을 잘 구별했음.

 

 

 

Batch size의 깨달음

 

Batch size를 크게 할 수록 더 좋은 결과를 얻을 수 있었지만 데이터를 많이 잡아먹는 단점이 존재
 

각각의 맞는 Batch size를 해줘야 한다는 것을 알게 됨.

 

그렇게 Batch size 128에서 가장 좋은 결과를 얻게 됨

 

 

 

2. Learning rate

 

( epoch 20 / batch_size 64  고정 )

Learning rate 대표적으로 0.005 VS 0.01 를 비교하였고

0.001씩 증가시키면서 확인을 하였음. ( 5)

차이를 극악으로 0.1 0.1까지 해보았을 때

loss가 많이 튀는 현상을

보게 되었음.

 

 

0.005 VS 0.01 ( 결과적으로 rate을 어느정도 낮췄을 경우에 완만한 그래프 양상을 띔 )

 

rate 0,005

 

rate 0.001

 

Learning_rate 깨달음

 

Learning_rate는 이상적인 곡선이 있으면

그 곡선을 얼마나 빠르게 가는 것인지?라는? 일반적인 것을 알게 되며

일종에 상승/하강 폭이라고 생각하게 되었다.

적절한 rate를 사용해서 이상적인 validation 최저점을 찾는 것이

중요하다고 깨달음.

 

 

3. Batch_size / learning_rate / epoch에 따른 지표 결과 변화

 

Batch_size – 150 / Rate - 0.02 / Epoch – 20
 

 

Batch_size – 180 / Rate - 0.1 / Epoch – 60
 

 

 

 


 

# 결론 및 깨달은 것

 

이전에 살짝 알아보고 공부했던 detection이 있었다.

 

특히 CNN 모델 중에 YOLO를 많이 사용해서 훈련된 모델을 직접 돌려보았다.

 

이 구조 자체 파악을 하지 못하고 바로 과제를 해야 했기 때문에 정말 기초적인 것을 알아보면서 했다.

 

특히 데이터셋을 통해서 처음 돌려보았을 때 과적합 문제도 많이 일어났다.

 

데이터 조절도 어느 정도 조절을 해야 하는 것도 알게 되었고 

 

Loss의 이상적인 곡선과 훈련의 관계도 배우게 되면서 첫 딥러닝 공부를 시작했다.

 

처음에는 CNN이 뭔지도 모르고 시작했고 Layer가 무엇인지도 모르고 했다.

 

하지만 2주간 과제를 해나가면서 지인에게도 배우면서 다른 사람들에게는 쉽거나 완성도가 떨어졌다 할지라도

 

나에게 있어서는 가장 많이 배우는 과제가 되었다.