2025 학부 인턴/N주차 리뷰

학부 인턴 5주차 정리

dbwls-log 2025. 8. 11. 16:30

5주차 연구실 미팅은 오늘 8월 11일에 진행하였다! 

 

일단 5주차에는 4주차에서 발생했던 문제점을 해결하기 위하여 다른 데이터셋을 탐색하고, 이를 가지고 새로 학습을 진행하였다. 

 

사실 산불을 드론으로 촬영한 데이터셋을 찾기에는 너무 힘든 일이다. 

공개된 데이터셋이 일부 있지만, 내가 원하는 프로젝트에는 어울리지 않거나, 4주차 처럼 성능이 나오지 않는 데이터셋이 있어 적합한 데이터셋을 찾는 것이 참 힘들었다. 

 

그러던 중 아래 논문을 발견했다. 

해당 논문에서는 YOLOv5n 모델을 일반 화재 데이터셋으로 학습을 시키고, 그 후 산불 데이터셋 소량을 가지고 전이 학습을 진행하여 산불탐지에 대한 성능을 향상시킨다는 내용이 나온다. 

https://arxiv.org/abs/2501.08639

 

Detecting Wildfire Flame and Smoke through Edge Computing using Transfer Learning Enhanced Deep Learning Models

Autonomous unmanned aerial vehicles (UAVs) integrated with edge computing capabilities empower real-time data processing directly on the device, dramatically reducing latency in critical scenarios such as wildfire detection. This study underscores Transfer

arxiv.org

나도 해당 논문을 참고해서 일단 일반 화재 데이터로 YOLO 모델을 학습시키고, 일부 퀄리티 좋은 산불 데이터를 학습시켜 성능을 향상 시켜본 후에 구조를 변경하는 방향으로 가면 좋을 것 같다는 생각이 들었다. 

 

그래서 나는 괜찮은 화재 데이터셋을 찾기 시작했고, 논문에 잠깐 언급된 D-Fire 데이터셋을 찾아보게 되었다. 

https://github.com/gaiasd/DFireDataset?tab=readme-ov-file

 

GitHub - gaiasd/DFireDataset: D-Fire: an image data set for fire and smoke detection.

D-Fire: an image data set for fire and smoke detection. - gaiasd/DFireDataset

github.com

 

아래 이미지는 실제 D-Fire에서 제공하는 데이터셋의 예시를 보여주는 이미지이다. 

드론으로 촬영한 것 같은 산불 데이터셋을 포함해서 뉴스나 건물 화재 등 다양한 화재 상황에서 fire와 smoke를 탐지할 수 있도록 제작된 데이터셋이다. 

그래서 나는 일단 해당 데이터셋으로 YOLO 모델을 학습시키기로 결정했다. 

 

 

이를 학습시킨 모델을 통한 추론을 진행할 때는 산불 이미지를 사용하면 좋을 것 같다는 생각이 들었다. 

실제로 해당 데이터셋으로 학습을 시키고 난 후, 해당 모델이 산불 탐지에는 어떤 성능을 보이는 가를 실험해보기 위해서이다. 

따라서 추론 이미지는 아래와 같은 산불 상황에서 불과 연기가 잘 보이는 이미지로 선택을 하였다. 

 

 


1. YOLOv5s (batch_size=64, epcochs=50) 

그래프를 보면 일단 Train_loss 나 Val_loss도 안정적으로 감소하는 모습을 볼 수 있다. 

또한 클래스별 Precision/Recall이나 전체 Precision/Recall도 꽤 괜찮은 모습을 볼 수 있다. 

위 그래프의 내용을 정리한 표이다. 

이게 처음 실험이였는데 data.yaml에서 클래스 순서를 바꿔서 써서 fire와 smoke의 라벨이 바뀌긴 했는데.. 

이후에는 제대로 바꿨지만 첫번째 실험은 바꾸지 못했다 ㅠㅠㅠ 

그래도 탐지에는 이상이 없으니 ...^^ 흐린 눈하고 봐야겠다 싶었다. 

추론 이미지에서도 작은 불꽃까지 잘 잡는 모습을 보이고 있고, smoke 박스에 대한 confidence score는 살짝 떨어지긴 하지만 그래도 대체로 탐지를 잘 하는 모습을 보이고 있다. 

특히 큰 불꽃의 경우 confidence score도 매우 높은 것을 볼 수 있다. 

 


2. YOLOv5m (batch_size=64, epcochs=50) 

1번 실험과 동일한 조건인데 이번엔 YOLOv5m 모델로 돌려보았다. 

이 실험도 1번과 비슷하게 loss나 PR 곡선들이 잘 학습이 된 모습을 띄고 있다. 

전체적으로 1번 실험과 비슷한 값을 가지고 있지만, 성능은 소폭 향상된 모습을 보인다.

 

테스트 이미지로 추론을 진행했는데.. 이게 무슨일일까? 

학습 자체의 성능은 향상되었는데, 테스트 이미지로 추론을 해보니 1번 실험보다 성능이 떨어지는 결과가 나왔다.

smoke에 대한 confidence score도 약 1/2 정도 감소하였고, fire 부분에서도 confidence score가 소폭 감소하며, 옆에 있는 작은 불꽃은 탐지하지도 못했다. 

 


3. YOLOv5s (batch_size=32, epcochs=100) 

fire와 같이 작은 객체는 배치 사이즈가 너무 크면 학습이 잘 안된다고 해서, 배치사이즈는 줄이고 그만큼 학습은 더 돌려보았다. 

다른 실험들과 마찬가지로 학습이 잘 된 모습을 보인다. 

뭔가 배치 사이즈가 64일 때보다 그래프의 모양이 조금 더 안정적으로 변한 것 같다. 

 

학습 결과를 표로 정리해보았다. 

같은 모델에 배치 사이즈만 줄인 것인데, Precision은 1번 실험보다 전체적으로 감소하긴 했지만, 나머지 Recall, mAP@0.5, mAP@0.5:0.95 는 전체적으로 소폭 향상된 모습을 보인다. 

 

추론 이미지를 1번 실험과 비교해보면 smoke에 대한 confidence score는 감소했지만, fire에 대한 confidence score는 소폭 향상된 모습을 보인다. 

하지만 배치 사이즈가 64일 때는 옆에 작은 불꽃까지 탐지를 했는데, 배치 사이즈를 32로 줄이니 탐지를 못하는 모습을 보인다. 

 

학습 성능은 전체적으로 향상되었는데, 실제 산불 이미지로 테스트해보니 성능이 감소된 것으로 보인다... 

 


4. YOLOv5m (batch_size=32, epcochs=100) 

스포하자면 해당 모델이 성능이 가장 좋게 나왔다! 

(학습 성능과 추론에서 모두 !! ) 

 

다른 실험들과 마찬가지로 학습은 잘 된 모습을 볼 수 있다. 

일단 동일한 m 모델인데 배치 64와 비교를 해보자. 

2번 실험과 비교해보면 전체적인 성능이 향상된 것을 볼 수 있다. 

fire 클래스와 smoke 클래스에서 Precision, Recall, mAP@0.5, mAP@0.5:0.95 모든 부분에서 더 좋은 점수를 가지고 있는 것을 알 수 있다. 

그리고, 동일 배치 사이즈이지만 모델이 다른 3번 실험과 비교해봐도, 전체적으로 성능이 좋은 것을 볼 수 있다. 

 

 

추론 이미지를 봐도 다른 실험들에 비해 smoke, fire의 confidence score가 높은 편이며, fire는 다른 실험과 비슷한 수준이지만, smoke는 성능이 확실히 좋다. 

그리고 옆에 있는 작은 fire 클래스까지 잘 탐지를 하는 모습을 보인다. 

 


5. YOLOv5s (batch_size=16, epcochs=300) 

이번에는 배치사이즈를 16으로 감소시키고, epochs를 300까지 늘려보았다. 

대신 성능이 저하되기 전 early stopping을 할 수 있도록 했다. 

그래프를 보면 알겠지만, 100-130 epochs 이후에 학습을 멈춰도 성능차이가 거의 존재하지 않는다. 

따라서 early stopping 해주었다.

조기 종료를 해서 300 epochs를 다 돌지 않았는데도 학습하는데 거의 20시간이 걸렸다. 

근데 성능을 보면 ... 딱히 다른 모델과 차이가 크지 않고, 오히려 감소하는 모습을 보이기도 한다. 

같은 모델인 1,3번 실험과 비교해봐도 성능이 크게 차이가 나지 않는다. 오히려 떨어진 부분도 있었다. 

그래서 굳이 배치 사이즈를 16으로 줄일 필요는 없는 것 같다. 

성능은 그대로인데 학습 효율만 떨어지는 느낌이다 ...

 

추론 이미지를 보면 fire는 잘 탐지를 한다. confidence score도 높은 편이고, 옆에 작은 불도 탐지를 잘 하는 모습을 보인다. 

근데 smoke에 대한 성능이 다른 s 모델 실험과 비교해보면 제일 낮은 성능을 보이고 있다 

 

학습 성능, 추론 성능, 학습 효율을 다 비교해봐도 굳이 16으로 할 이유는 없어 보인다! 

 


5. YOLOv5m (batch_size=16, epcochs=300) 

해당 실험도 5번 실험과 비슷하다. 

train_loss는 꾸준히 잘 감소하는데, val_loss가 약 100epochs 이후로 미세하게 증가한다. 

Precision도 초반에는 급 상승하다가 130epochs가 지나고 나서 거의 변동이 없다. 

Recall은 100epochs 이후로 거의 변동이 없다 . 

따라서 5번 실험과 동일하게 조기 종료를 시켰다. 

근데 5번보다는 조금 더 일찍 조기 종료가 되어서 학습 시간은 6번 실험이 조금 덜 걸렸다. 

전체적인 점수는 다른 m 모델과 비슷한 수준을 보인다. 살짝 성능이 떨어지는 부분도 있지만 그래도 비슷한 점수를 보인다. 

근데 학습 시간도 오래걸리고, val_loss를 보면 과적합의 위험도 있어서 굳이 16으로 돌리지는 않을 것 같다. 

 

추론 이미지를 보면 사실 fire와 smoke 박스의 confidence score는 높은 편이지만 우측에 있는 작은 불꽃은 탐지를 못한다. 

학습 효율 대비 성능이 떨어지는 모습을 볼 수 있다. 

 

 


실험 결과 요약 

 

학습 지표와 추론 결과를 기준으로 가장 좋은 모델을 골라보면, YOLOv5m (batch_size=32, epochs=100)이 가장 좋다. 

클래스 별로 비교해보면 smoke 클래스가 fire 클래스보다 안정적인 성능을 보이고 있고, 추론 이미지에서도 smoke의 경계가 안정적으로 탐지되었다.

 

다만 조금 궁금했던 부분은 smoke의 학습 성능이 더 우수한데, confidence score를 비교해보면 fire가 훨씬 더 높다는 것이다. 

이게 학습 데이터와 테스트 데이터의 도메인 차이라서 그런건지, 단지 테스트 이미지에서 fire가 눈에 더 잘보여서 그런건지 다른 테스트를 통해 조금 더 알아보면 좋을 것 같다는 생각이 들었다. 

 


문제점 및 보완 사항 

1. mAP@0.5:0.95 점수 낮음 문제 

일단 mAP@0.5에 비해 mAP@0.5:0.95가 낮다. 

학습 해상도 및 앵커 재조정을 통해 작은 객체와 박스 정밀도 개선이 필요하다고 생각된다. 

 

2. fire 클래스의 상대적 성능 

지난 주보다 매우 높은 성능 향상을 보였지만, 여전히 smoke에 비해 성능이 낮다는 것을 볼 수 있다. 

그래서 이 부분을 개선할 수 있는 데이터 보강이 필요해 보인다. 

 


향후 계획 

일단 앞서 논문처럼 전이학습을 진행해볼 예정이다. 

괜찮은 산불 데이터(소량이라도)를 찾아서 전이학습을 진행해볼 예정이다. 

그 후 활성화 함수나 옵티마이저 등 다양한 하이퍼파라미터 변경 실험을 진행하여, 속도, 성능 개선을 해볼 예정이다. 

 


교수님 피드백 

일단 저번주에 비해 성능이 향상된 것은 좋다고 말씀해주셨다. 

그리고 전이학습을 진행하고, 하이퍼파라미터 변경 실험 계획도 괜찮은 것 같다고 해주셨다. 

내가 찾은 괜찮은 산불 데이터셋이 유료 구독을 해야 볼 수있는 것 같은데, 교수님이 이 부분은 한번 확인해주신다고 하셨다!

 

 

 

이번주는 지난주에 비해 성능이 향상된 모습을 볼 수 있어서 좋았다. 

앞으로는 단순히 학습 후 추론을 해보는 것을 넘어 실제 구조를 변경해보며 더 좋은 성능을 보이는 모델을 찾아보고 싶다! 

'2025 학부 인턴 > N주차 리뷰' 카테고리의 다른 글

학부 인턴 8주차 정리  (0) 2025.09.12
학부 인턴 7주차 정리  (1) 2025.09.11
학부 인턴 6주차 정리  (2) 2025.08.29
학부 인턴 4주차 정리  (1) 2025.08.11
학부 인턴 3주차 정리  (5) 2025.07.30