딥러닝 모델, 특히 CNN(Convolutional Neural Network)은 놀라울 정도로 정교하게 이미지를 분류한다.
하지만 한편으로는 ‘사람 눈에는 거의 구분이 안 되는 미세한 변화’에도 완전히 잘못된 판단을 내릴 만큼 취약하다.
이런 현상을 실험적으로 보여주는 것이 바로 Adversarial Attack(적대적 공격) 이다.
어떤 원리일까?
Adversarial attack은 이미지의 각 픽셀 값을 아주 조금씩(ε 만큼) 조정하는 방식으로 이루어진다.
이때 변화의 방향은 모델의 손실 함수(Loss)의 기울기(Gradient) 를 따라 정해진다.
즉, 모델이 헷갈릴 방향으로 이미지를 살짝 밀어주는 것이다.
사람 눈에는 전혀 보이지 않는 수준의 차이지만,
CNN 내부의 feature map에는 큰 혼란을 주어 엉뚱한 클래스로 오분류하게 만든다.
이를 구현한 가장 단순한 방법이 Fast Gradient Sign Method (FGSM) 이다.
이 방법은 한 번의 gradient 계산만으로 “공격용 이미지(adversarial image)”를 빠르게 만들 수 있어
보안 실험과 모델 강건성 평가에 자주 사용된다.

대표적인 예시
가장 유명한 사례는 “팬더 → 긴팔원숭이(Gibbon)” 공격이다.
왼쪽의 팬더 이미지는 CNN이 57.7% 확신으로 팬더로 분류한다.
그런데 여기에 사람이 거의 인식할 수 없는 수준의 노이즈(ε=0.007)를 더하면,
이미지는 여전히 팬더처럼 보이지만 모델은 이를 99.3% 확신으로 긴팔원숭이라고 판단한다.
이 한 장의 예시는 “딥러닝 모델이 얼마나 표면적인 패턴 통계에 의존하는지”를 극적으로 보여준다.

오버피팅된거 아니야? 왜 사람들이 그렇게 생각하냐면
처음 adversarial attack을 보면 보통 이렇게 생각한다.
“모델이 훈련 데이터에 너무 과하게 맞춰져서(overfitting),
새로운 입력(조금 다른 이미지)에 너무 예민하게 반응하는 거 아니야?”
즉, “너무 복잡한 모델이라서 생기는 현상” 처럼 보인다는 거다. 작은 변화(ε만큼의 노이즈)에도 예측 확률이 크게 흔들리니까...
그런데 논문에 따르면 이건 단순한 overfitting 문제가 아니다.
공격 이미지를 한 모델에서 만들었는데,
그 이미지를 완전히 다른 모델에 넣어도 똑같이 속는다!
딥러닝 구조 전반이 공유하는 취약한 방향(gradient space) 을 노린 결과임을 의미한다.
다시 말해, adversarial attack은 ‘학습을 잘못해서 생긴 문제’가 아니라
‘딥러닝의 본질적 구조가 가진 약점’을 드러내는 현상인 셈이다.
이걸 “transferability(전이성)” 현상이라고 한다.
즉, adversarial noise는 특정 모델의 과적합된 부분만 노린 게 아니라, 모델 구조 전반이 공통적으로 가지는 취약한 방향(gradient 방향) 을 찌르는 거예요.
그래서 CNN이든, 다른 네트워크든,
심지어 단순한 선형모델(linear model) 도 유사한 공격에 취약하다는 점이 밝혀졌다.
그럼 이런 연구를 왜 할까?
이런 공격을 연구하는 목적은 단순히 모델을 속이기 위한 것이 아니다.
모델의 취약성을 드러내고, 그로부터 ‘더 안전하고 신뢰할 수 있는 인공지능’을 만드는 것이 핵심이다.
Adversarial attack은 다음과 같은 연구 방향으로 이어진다:
- 모델 강건성(Robustness) 평가:
작은 입력 변화에도 일관된 출력을 내는가? - 방어 기법 개발(Defense Mechanism):
- Adversarial training (공격 이미지까지 함께 학습)
- Input denoising, gradient masking 등
- 모델 해석(Interpretability):
CNN이 ‘진짜 의미’를 학습하는지, 아니면 단순한 픽셀 패턴을 학습하는지 검증
이렇게 CNN이 이미지를 세밀하게 구분하고 해석할 수 있다는 점은, 반대로 아주 미세한 변화에도 예민하다는 취약성을 보여주기도 하지만,
동시에 그만큼 이미지 속 세부 정보를 읽어낼 수 있는 강력한 능력을 뜻하기도 한다.
이제 우리는 이 능력을 활용해, 단순히 “무엇이 있는가”를 넘어서 “어디에 있는가”까지 찾아내는 Object Detection, 즉 Bounding Box 기반 인식에 대해서 알아가보자.
이미지 속 객체를 단순히 “있다”고 판단하는 것만으론 충분하지 않다.
모델은 어디에 있는지, 얼마나 큰지를 수치로 알아야 한다.
이를 위해 오브젝트 디텍션에서는 각 객체를 사각형으로 둘러싼 Bounding Box 를 사용한다.
이 박스는 중심 좌표 (bx,by)(b_x, b_y) 와 폭과 높이 (bW,bH)(b_W, b_H) 로 표현된다.
자율주행차의 카메라가 촬영한 도로 장면을 예로 들면,
각 차량과 보행자마다 고유한 bounding box가 존재한다.
딥러닝 모델은 이 좌표값을 예측함으로써, “어떤 물체가 어디에 있는지”를 동시에 인식할 수 있게 된다.

학습은 어떻게 하느냐?
Object detection 학습은 두 가지를 함께 학습한다.
| 클래스(class) | 어떤 객체인지 (예: 고양이, 자동차, 사람) | Cross-Entropy Loss |
| 위치(bounding box) | 사각형 좌표 (bₓ, bᵧ, b_W, b_H) | L1 또는 L2 Loss (회귀 문제) |
즉, 모델은 한 이미지에서 여러 객체가 있을 수 있으므로 각 객체마다 (클래스 + 위치) 를 예측하도록 설계된다.
학습 구조 (간단히)
모델 종류에 따라 조금 다르지만, 큰 그림은 이렇다.
- Feature Extractor (CNN backbone)
→ 이미지를 통해 feature map을 추출 (예: ResNet, VGG 등) - Region Proposal / Anchor 단계
→ 다양한 크기와 위치의 후보 박스(anchors)를 생성 - Bounding Box Regressor + Classifier
→ 각 anchor마다 “이게 무슨 물체인가 + 얼마나 박스를 조정해야 하는가” 예측
학습할 때는 정답 박스와 비교해서,
- 박스가 얼마나 잘 맞는지(위치 오차)
- 클래스가 제대로 맞는지(분류 오차)
두 손실을 합쳐서 최적화하게 된다.
그럼 평가는 어떻게?
“Intersection over Union (IoU)” 는 Object Detection에서 모델이 얼마나 정확하게 물체 위치를 맞췄는지를 평가하는 핵심 지표이다. 그리고 YOLO 같은 모델도 학습 중에 바로 이 IoU를 기준으로 정답 박스(Ground Truth) 와 예측 박스(Predicted Box) 의 일치도를 평가한다.
YOLO에서 IoU의 역할
YOLO(You Only Look Once)는 이미지를 여러 그리드(grid) 로 나눈 뒤, 각 그리드마다 여러 개의 anchor box 후보를 두고 학습한다.
학습 중에는
- 각 anchor box가 정답 박스와 얼마나 겹치는지(IoU) 를 계산하고,
- 그중 IoU가 가장 높은 anchor 만 “이 물체를 담당”하게 지정한다.
- 그 anchor에 대해
- 클래스(class)
- 박스 좌표(center x, y, width, height)
- confidence(이 박스 안에 물체가 있을 확률)
을 함께 학습한다.
즉, IoU는 YOLO에서 “이 anchor가 물체를 얼마나 잘 잡았는가” 를 정량화하는 기준이자, 정답 박스 할당과 손실 계산(loss function) 에 모두 쓰인다.


오브젝트 디텍션에서는 단순히 “무엇을 찾았는가”뿐 아니라 “얼마나 정확하게 그 위치를 찾았는가”도 중요하다.
이를 정량적으로 평가하는 지표가 IoU (Intersection over Union) 이다.
예측 박스와 실제 박스가 완벽히 겹치면 IoU=1, 거의 겹치지 않으면 0에 가까워진다.
YOLO 같은 모델은 학습 중 IoU를 활용해 각 anchor box가 어떤 물체를 담당할지 결정하고,
예측된 위치의 오차(localization loss)를 계산한다. 결국 IoU는 “모델이 얼마나 정확하게 물체를 찾았는가”를 판단하는 오브젝트 디텍션의 핵심 척도다.
슬라이딩 윈도우에서 CNN 기반 객체 탐지로의 진화
초기의 객체 탐지(Object Detection)는 슬라이딩 윈도우(sliding window) 방식이었다.
즉, 이미지를 여러 위치와 크기의 윈도우로 잘라가며 “이 영역에 객체가 있는가?”를 일일이 분류기(Classifier)로 판단하는 방식이었다.
이 접근은 단순하지만, 중복 계산이 많고 비효율적이었다. 같은 영역을 여러 번 처리하면서 엄청난 연산량이 발생했던 것이다.
그러나 CNN(Convolutional Neural Network) 의 등장으로 상황이 달라졌다.
CNN은 애초에 커널(kernel) 이 입력 이미지를 슬라이딩(striding) 하며 지역적 특징(local feature)을 추출하는 구조를 가지고 있었기 때문이다.
즉, 슬라이딩 윈도우의 연산을 하나의 convolution layer로 통합할 수 있었고, 이를 통해 중복된 계산을 한 번의 forward pass로 처리하는 혁신적인 효율 개선이 가능해졌다.
이 아이디어를 실제 객체 탐지에 확장한 것이 바로 R-CNN (=Region-based Convolutional Neural Network) 계열이다.
R-CNN(2014)은 “이미지를 잘라가며 CNN을 돌리는 대신, 한 번의 feature map을 만든 뒤 영역(region)을 분류하자”는 접근을 제안했다.
이후 Fast R-CNN과 Faster R-CNN은
- feature map을 공유하여 중복 계산을 제거하고,
- Region Proposal Network (RPN) 을 도입해 영역 후보를 자동으로 생성하며
탐지 속도를 획기적으로 높였다.
하지만 여전히 “후보 영역”을 따로 뽑는 과정이 필요했다.
이를 완전히 없앤 모델이 바로 YOLO(You Only Look Once) 다.
YOLO는 이미지를 여러 격자(grid)로 나누고, 각 격자에서 객체의 존재 여부와 위치를 동시에 예측한다.
즉, 슬라이딩 윈도우를 CNN 구조 안에 완전히 내재화시켜 “한 번의 forward pass”로 이미지 전체에 대한 객체 탐지를 수행하게 된 것이다.

슬라이딩 윈도우가 정사각형인데, 다양한 비율(aspect ratio)과 크기(scale)의 객체를 잘 잡을 수 있을까?”
Scale pyramid (스케일 피라미드)
이 문제를 해결하기 위해,
“윈도우 크기를 바꾸는 대신, 이미지 크기를 여러 버전으로 바꿔서 동일한 윈도우로 탐색하자!”
즉, 입력을 여러 스케일로 복제해서 각각 CNN에 넣는 방식이다.
- 작은 객체를 찾고 싶다면 → 이미지를 크게 확대
- 큰 객체를 찾고 싶다면 → 이미지를 줄임
이렇게 하면 같은 크기의 윈도우(예: 224×224)로도 다양한 크기의 객체를 “상대적으로” 동일한 스케일에서 탐지할 수 있다.
비율(aspect ratio) 보정
고양이처럼 앉아 있을 때는 세로로 긴 bounding box, 누워 있을 때는 가로로 긴 bounding box가 필요하다.
그래서 모델은 “비율”도 달리하면서 여러 형태의 박스를 시도한다.
→ YOLO, SSD 같은 모델은 이를 anchor box 개념으로 해결한다.
(미리 다양한 비율과 크기의 박스를 정의해두고, 그중 최적의 것을 예측하는 방식)
스케일을 원래로 돌린다”는 의미
모델은 축소/확대된 여러 버전의 이미지를 탐지하니까,
탐지된 bounding box의 좌표는 스케일 조정된 좌표계에서 계산된다.
그래서 마지막에
→ “원래 이미지의 비율과 위치”로 되돌려야한다.
(예: 확대된 이미지에서 x=100은, 원본에서는 x=50일 수도 있으니까...)

같은 객체에 대한 중복 탐지?
CNN 기반 탐지 모델(예: YOLO, Faster R-CNN 등)은
보통 “이 위치에 객체가 있을 확률”을 여러 박스(anchor box) 단위로 예측한다.
그런데 모델이 불확실할 때는, → 비슷한 위치에 여러 개의 박스를 동시에 내놓기도 한다.
(예: 사람 한 명인데 IoU 0.9짜리 겹치는 박스가 여러 개 생김)
즉, 한 객체가 여러 번 탐지되는 중복 문제가 발생한다.
Non-Maximum Suppression (NMS)
NMS는 말 그대로 “최댓값이 아닌 것들을 눌러 없앤다”는 뜻이다.
동작 방식은 간단하다.
- 모델이 예측한 모든 박스를 confidence score(신뢰도 점수) 기준으로 정렬
- 가장 높은 점수를 가진 박스를 남기고,
- 그 박스와 겹치는 영역(IoU, Intersection over Union) 이 일정 임계값(예: 0.5) 이상인 다른 박스들은 제거.
- 남은 박스 중 다음 높은 점수를 가진 박스를 다시 기준으로 반복.
결과적으로 → 한 객체당 하나의 박스만 남게 되는 것. 같은 객체에 대해 여러 박스가 나오면, 가장 신뢰도 높은 박스만 남기고 나머지는 없애는 과정이다.
아 근데.. 보더한경우는 어떻게 되려나
하지만 두 객체가 매우 가까이 붙어 있을 경우(예: 사람이 두 명 나란히 서 있음), 서로 다른 객체임에도 박스가 겹쳐서 IoU가 높게 계산될 수 있다.
이때 NMS는 두 박스 중 하나를 제거해버려 결과적으로 한 사람만 탐지되는 under-detection이 발생할 수 있다.
즉,
- IoU 기준이 너무 높으면 실제 다른 객체가 삭제되고,
- IoU 기준이 너무 낮으면 하나의 객체가 여러 박스로 중복 탐지된다.
이것이 NMS의 대표적인 한계다.

개선된 해결 방법
- IoU threshold 조정
- NMS의 겹침 기준(IoU threshold)을 0.5 → 0.3 정도로 조정하면
겹쳐 있는 객체도 서로 다른 대상으로 유지할 가능성이 커진다.
- NMS의 겹침 기준(IoU threshold)을 0.5 → 0.3 정도로 조정하면
- Soft-NMS
- 박스를 완전히 제거하지 않고,
겹침 정도에 따라 신뢰도를 점진적으로 낮춘다. - 이렇게 하면 가까운 두 객체가 모두 남을 수 있다.
- 박스를 완전히 제거하지 않고,
- DIoU / CIoU-NMS
- 단순히 IoU만 보지 않고,
박스 중심 간 거리(distance)나 비율(aspect ratio)까지 함께 고려한다. - 중심이 다르면 다른 객체로 인식하게 되어
붙어 있는 객체를 더 잘 구분할 수 있다.
- 단순히 IoU만 보지 않고,
- 멀티 스케일 feature map 활용 (YOLOv5 이후)
- 서로 다른 크기와 위치의 객체를
서로 다른 feature map에서 탐지하도록 하여
인접 객체의 구분 능력을 향상시켰다.
- 서로 다른 크기와 위치의 객체를
YOLO는 정리 하진 않았지만 여기까지 흐름으로 정리해보면(객체 탐지의 진화 흐름 요약)
- Sliding Window (전통 방식)
- 이미지를 일정 크기의 윈도우로 잘라가며 “이 영역에 객체가 있는가?”를 일일이 분류
- 단점: 중복 연산 너무 많음 → 매우 느림
- R-CNN (Region-based CNN, 2014)
- “모든 위치를 검사하지 말고, 객체가 있을 법한 영역(region) 만 CNN으로 보자!”
- Selective Search로 region proposals 생성
- 성능은 좋지만, 여전히 후보 영역별 CNN forward 때문에 느림
- Fast R-CNN (2015)
- 이미지 전체를 한 번 CNN에 통과시켜 공유 feature map 생성
- 각 region만 RoI pooling으로 잘라내 분류 → 연산 중복 크게 감소
- Faster R-CNN (2016)
- region을 사람이 정하지 않고, Region Proposal Network (RPN) 으로 자동 생성
- 완전 end-to-end 구조
- 정확도와 효율 모두 향상
- YOLO (You Only Look Once, 2016)
- 이름 그대로 “이미지를 한 번만 본다!”
- 이미지를 격자(grid) 로 나누고,
각 격자가 객체 존재 여부 + 위치(bounding box) + 클래스 를 동시에 예측 - R-CNN 계열의 “후보 영역 생성” 단계를 완전히 제거 → 실시간 탐지 가능
'ML&AI' 카테고리의 다른 글
| GNN 수업을 듣다가 알게 된 GNN RAG – 관계를 학습하는 그래프 신경망의 가능성 (0) | 2025.11.27 |
|---|---|
| JSON / Function-Call 기반 스트럭처드 아웃풋은 응답시간(latency)과 토큰 비용이 확실히 증가하는 경향이 있다. (0) | 2025.11.03 |
| 대화 인텐트 분류, BERT에서 GPT까지 — 분류의 본질을 다시 생각해보자. (0) | 2025.10.30 |
| 데이터의 구조를 모델이 이해한다는 것, CNN은 왜 시각 피질을 닮았을까 — CNN의 철학 (0) | 2025.10.30 |
| 패턴마이닝 : Support, Confidence, Lift로 보는 연관규칙: 데이터 속 숨은 관계를 해석하는 법 (0) | 2025.10.22 |