기억의 기록(나의 기기)

[논문리뷰 / CarDD] Deep Learning-Based Crack Damage Detection Using Convolutional Neural Networks 본문

논문 리뷰

[논문리뷰 / CarDD] Deep Learning-Based Crack Damage Detection Using Convolutional Neural Networks

황경하 2024. 6. 26. 16:27
반응형

논문리뷰 - Deep Learning-Based Crack Damage Detection Using Convolutional Neural Networks

안녕하세요, 데이터과학 전공하고 있는 황경하입니다. 오늘은 저번 포스팅과 마찬가지로 프로젝트 진행에 참고할만한 논문을 읽어보고 리뷰를 남기려 합니다. 이 논문의 주제는 콘크리트의 균열(Crack)을 Deep CNN을 이용하여 찾아내는 것입니다. 바로 가시죠!

 

논문: https://onlinelibrary.wiley.com/doi/abs/10.1111/mice.12263?casa_token=fzE8SjsvRa4AAAAA:IsMC4J7ApyB-JHwX1qNI-cexYXhxjeajRFUUC6K-vxvmeIyQpNL_U6MpevR1PtniHMWxMqRQtAiqSZW_fg

* 이 글에 포함된 모든 사진은 위 논문에서 발췌한 것임을 미리 밝힙니다.

서론

위에서 밝혔지만, 이 논문의 주제는 "콘크리트의 균열을 CNN 기술을 이용하여 Detection 하는 것"입니다.

콘크리트는 교량, 빌딩 등을 건설할 때에 주로 쓰이는 재료 중 하나입니다. 모든 사물이 그렇지만, 오래 사용하면 노후화가 진행되고 부식, 스크래치 같은 손상이 생기기 마련입니다. 교량, 빌딩 등의 건축물같이 많은 사람이 이용하며 오래 사용하는 경우엔 그 정도가 더욱 심하겠죠. 그래서, 실제로 붕괴 사고도 일어나고 이에 따라 많은 인명 피해가 발생하기도 합니다. 따라서, 실시간 모니터링을 하며 건축물을 관리할 필요가 있죠.

 

만약, 이 일을 사람이 한다면 매우 많은 인력과 비용이 들 것입니다. 그래서 IPT라는 이미지 처리 기술들이 발전했습니다. 사람이 직접 모니터링하는 것이 아닌 건물의 사진을 전자 기기에 입력하여 균열을 찾아내는 것이죠. 이 논문에서는 기존의 IPT 기술이 아닌 CNN을 이용하여 해결하려 합니다. 뒤에서 나오겠지만, 기존 IPT 기술보다 층을 깊이 쌓은 CNN의 균열 Detection 정확도가 더 높음이 밝혀졌습니다.

Data Description

Deep CNN을 이용하여 균열을 Detection 하는 모델을 만들기 위해서는 대량의 이미지 데이터가 필요합니다. 또한, 통제된 상황에서 찍은 사진이 아닌 다양한 환경에서 찍은 사진을 이용해야 모델의 일반화 성능이 더 올라갈 것입니다.

따라서, 이 논문에서는 데이터를 아래와 같이 수집하였습니다.

 

  • DSLR 카메라를 이용하여 실제 교량의 사진을 322장 수집합니다. 이 중 4,928 X 3,264 해상도의 사진 277장을 훈련 데이터로, 5,888 X 3,584 해상도의 사진 55장을 테스트 데이터로 나눕니다.
  • 훈련 데이터만 256 X 256 해상도로 랜덤 하게 잘라 40,000장의 이미지를 만듭니다. 랜덤 하게 잘랐기에 어떤 이미지는 균열이 존재하고, 어떤 이미지는 균열이 존재하지 않습니다.
  • 잘린 이미지 중 가장자리에 균열이 있는 사진은 제외합니다. 이유는, 잘린 이미지이며 동시에 256 X 256 크기의 매우 작은 이미지이기 때문에 실제 균열인지 아니면 표면적 특징인지 구별이 되지 않아 정확한 라벨링이 불가합니다.
  • 남은 훈련 데이터에 라벨링을 하여 최종 훈련 데이터를 완성합니다.

위 사진이 바로 가장자리에 균열이 있는 경우입니다. 육안으로도 이게 균열인지 아니면, 표면적 특징인지 구별이 되지 않죠. 이러한 사진들을 제거하는 것입니다.


위와 같은 과정으로 40,000장의 훈련 데이터를 만들고, 이 데이터를 모델에 학습시킵니다. 중요한 점은, 훈련 데이터만 256 X 256 해상도로 자른다는 것입니다. 이 논문에서는 모델을 구성할 때 슬라이딩 윈도우 방식으로 CNN을 구성하여 훈련 이미지는 256 X 256 해상도이지만, 실제 테스트 이미지에서는 5,888 X 3,584 해상도의 사진 55장을 입력으로 받습니다. 그림으로 보면, 아래와 같습니다.

Modeling

훈련 데이터와 테스트 데이터를 준비했으니, 이제 본격적으로 모델을 만들어봅시다.

(논문에서는 각 레이어에 대한 설명이 명시되어 있으나, 내용이 너무 길어져 넘어가겠습니다. 레이어에 대한 자세한 설명은 논문을 참고해 주세요!)

 

전체적인 아키텍처는 아래와 같습니다.

  • C(합성곱층): Convolution Layer
  • L(연산층): 연산을 수행하는 층입니다.
  • P(풀링층): Pooling Layer로 Max Pooling을 사용합니다.
  • Activation(활성화 함수): 중간 중간 Batch Normalization 층과 Relu층이 포함되어 있으며, 과적합 방지를 위해 Dropout을 사용하고, 마지막에는 Softmax함수를 사용합니다.

 

이 신경망에서 주의 깊게 봐야 할 부분은, Flatten Layer 혹은 GAP(Global Average Pooling) Layer가 없다는 점입니다. 저도 처음 보는 경우인데요, 일반적으로 CNN을 구현한다고 하면, 특성 추출기 부분과 분류기 부분으로 구성하죠. 그리고, 이 분류기 부분에는 Flatten(혹은 GAP) → Dense → Relu → .. → Softmax 형태로 구성됩니다.

 

그러나, 이 논문에서는 이러한 분류기 없이 합성곱과 풀링만을 이용하여 2차원 벡터를 만들고 softmax를 거쳐 확률 벡터로 변환하였습니다. 그림으로 보면, 아래와 같습니다.

Why?

그렇다면, 왜 분류기를 구성하지 않고 합성곱과 풀링층만 이용하여 2차원 벡터로 변환하였을까요? 저도 이 의문이 들어 자료를 찾아보니, 그 이유는 간단한 패턴을 학습할 때는 복잡한 분류기 없이도 가능하다는 것입니다. 예를 들어, 지금과 같은 균열을 감지하는 일이나 색상 구분 같은 간단한 작업은 굳이 분류기를 통해 복잡한 특징을 추출하지 않아도 된다는 것이죠. 이 논문에서는 그 말을 "ITP와 결합 없이 CNN을 이용한다"라고 말합니다. 이렇게 사용할 때 장단점은 아래와 같습니다.

 

  • 장점: 학습할 파라미터 수가 줄어들어 수행 속도가 빠르며, 적은 데이터셋으로 학습할 수 있습니다.
  • 단점: 복잡한 패턴을 학습할 수 없습니다. 파라미터 수가 많다는 것은 더 복잡한 패턴에 잘 적응할 수 있을 뜻합니다.

결론적으로, 이 논문에서는 비교적 간단한 패턴인 균열을 감지하는 것이 목표이기에 분류기를 사용하지 않는 모델로 사용하였습니다.

Training & Test Result

훈련은 Momentum방식을 사용합니다. Momentum 방식은 SGD(경사하강법)에 기초하지만, 경사하강법과 달리 중력 + 관성을 이용합니다. 그 덕에 "spiky region(극소점)"에 빠지는 것을 방지할 수 있죠. 아래 사진처럼 SGD는 그저 등고선의 수직 방향으로 움직인다면, Momentum은 관성과 중력까지 고려하여 조금 더 빨리 등고선의 중앙 즉, 최소점에 도달할 수 있습니다.

Momentum 설명

또한, 학습률을 지정하는 것도 매우 중요합니다. 학습률을 너무 크게 설정하면, 아래와 같이 최소점을 지나갈 수 있기 때문이죠. 반대로, 너무 작게 설정하면,  최소점에 도달하기도 전에 멈춰버리죠. 

그래서 이 논문에서는 에폭마다 학습률을 변경합니다. 초반에는 빠르게 학습을 진행하기 위해 학습률을 높이지만, 후반으로 갈수록 학습률을 낮추어 미세하게 학습하게 바꾸는 것이죠.


이제 데이터도 준비되었고, 모델과 하이퍼파라미터도 정했으니 한번 학습을 시켜보고, 결과를 살펴보겠습니다. 아래 사진과 같이 훈련 정확도의 최고값은 98.22%, 테스트 정확도의 최고값은 97.95%로 높은 정확도를 보여줍니다. 여기서 다시 한 번 생각해 보면, 우리는 256 X 256 해상도의 이미지로 모델을 학습했지만 테스트 데이터는 5,888 X 3,584 해상도 이미지를 넣었습니다. 그래도 정확도가 높은 것으로 보아 큰 이미지에도 잘 반응함을 알 수 있죠. 그 이유는, 슬라이딩 윈도우 방식을 사용하여 학습 이미지 보다 더 큰 이미지에서도 특징을 찾을 수 있도록 했기 때문입니다. 그러나, 반대로 학습 이미지보다 더 작은 이미지를 넣게 되면, 잘 인식되지 않는 단점도 존재합니다. 그래서, 학습 이미지의 해상도를 256 X 256으로 선택한 것이죠.

그리고, C2(두번째 합성곱층)의 필터를 시각화하여 필터가 어느 정도 균열 특징을 학습했는지 확인해 보겠습니다. 아래에 보이는 것과 같이 왼쪽 사진은 학습이 덜 된 필터, 오른쪽은 충분히 학습한 필터입니다. 쉽게 알 수 있듯이 오른쪽 사진이 노이즈도 상대적으로 적고, 특징도 더 밝게 잘 나타남을 알 수 있죠. 이런 필터 시각화를 통해 우리 모델이 잘 학습되었는지를 확인할 수 있습니다. 

comparison

위에서도 언급했듯, 기존에도 이런 균열 감지 기법은 존재했습니다. 그래서 기존 기법과 Deep CNN 기법에 같은 이미지를 넣고 어떤 기법이 더 나은 성능을 보이는지 비교해 보겠습니다.

위 사진은 그림자라는 noise가 포함된 사진의 결과입니다. (b)의 결과는 Deep CNN으로 나온 결과인데, 보시다시피 균열을 정확히 Detection 하고 있죠. 물론, 빨간색 동그라미처럼 잘 못 인식된 부분도 존재합니다. 기존 기법인 (c), (d)의 결과를 봤을 때는 균열이 정확히 보이지 않습니다. (d)는 어느 정도 균열이 보이긴 하지만, Dark area를 봤을 때 그림자 영역을 전혀 detection 하지 못하고 있음을 알 수 있습니다. 저 Dark area는 균열을 가릴 수도 있는 noise입니다. 따라서, 그림자에 민감하다는 단점을 가지고 있음을 알 수 있습니다. 따라서, 이 논문에서 주장하는 (b) 방법이 가장 좋은 성능을 보이네요.


이 방법 외에도 밝은 환경에서 찍은 사진의 결과, 작은 스크래치 정도의 균열 사진의 결과 등의 비교 사진이 있지만, 모두 Deep CNN 방법이 가장 좋은 결과를 보였습니다. (그 사진들을 다 넣으면, 글만 길어질 것 같아 요약했습니다.)

이미지 처리 기술의 단점과 활용 방안

이 논문의 목적은 크게 두 가지였습니다. 1) 조명, 그림자 같은 noise에 민감하지 않은 모델을 만들자. 2) 균열 외에도 부식, 스크래치 등도 Detection 할 수 있는 모델을 만들자.  1번은 입증이 되었지만, 2번에 대한 내용은 논문에 나오지 않았습니다. 그런데, 이미지를 이용한 손상 유형 detection 기법에는 큰 단점이 존재합니다. 바로, 겉만 보고 판단한다는 것이죠. 즉, 안 쪽에서 일어나는 어떤 균열, 손상은 전혀 찾아낼 수 없습니다. 따라서, 간단한 스크래치나 균열을 모니터링하며 관리할 순 있지만, 결국 인력을 들여 점검을 해야 한다는 것이죠,


활용 방안으로는 드론에 카메라를 설치하고, 카메라에 찍히는 사진 혹은 영상들을 이 모델을 통해 균열된 부분인지 아닌지를 찾는 것입니다. 드론은 인력이 들지 않기 때문에 훨씬 더 쉽고 빠르게 데이터를 수집할 수 있죠. 이렇게 드론에 카메라를 설치하여 건물을 모니터링할 수 있습니다.

마치며..

오늘은 이렇게 CNN만을 이용한 균열 감지 모델을 살펴봤습니다. 이 논문을 읽으며 처음 보는 내용이 정말 많았고, 이해하기 어려웠습니다. 그래도, 자료도 찾아가며 공부하니 나름 논문 하나를 읽었지만 더 많은 것들을 배우게 된 것 같네요. 이 글을 읽는 분들에게도 도움이 되었으면 합니다.

 

오늘도 읽어주셔서 감사합니다.

반응형