비대 칭 값 억제 알고리즘 파 이 썬 구현
7799 단어 Python비 극 대 치 억제NMS
여기 서 통용 되 는 NMS 알고리즘(논문'Efficient Non-Maximum Suppression'을 참고 하여 1 차원 과 2 차원 데이터 에 대한 NMS 구현)을 논의 하지 않 고 대상 검출 에서 점수 가 가장 높 은 창 을 추출 하 는 데 사용 된다.예 를 들 어 행인 검 측 에서 미끄럼 창 은 특징 을 추출 하고 분류 기 를 통 해 분류 하여 식별 한 후에 모든 창 은 하나의 점 수 를 얻 을 수 있다.그러나 슬라이딩 창 은 많은 창 이 다른 창 과 포함 되 거나 대부분 교차 하 는 상황 을 초래 할 수 있다.이 때 는 이웃 지역 에서 점수 가 가장 높 은(행인 의 확률 이 가장 높 은)NMS 를 사용 하고 점수 가 낮은 창 을 억제 해 야 한다.
NMS 는 컴퓨터 시각 분야 에서 영상 목표 추적,데이터 발굴,3D 재 구축,목표 인식 과 무늬 분석 등 매우 중요 한 응용 을 가진다.
2.NMS 가 목표 검 측 에서 의 응용
2.1 얼굴 검사 상자 중첩 예
우리 의 목적 은 불필요 한 검사 상 자 를 제거 하고 가장 좋 은 것 을 유지 하 는 것 이다.
이 문 제 를 해결 할 수 있 는 여러 가지 방법 이 있 습 니 다.Triggs et al.
Mean-Shift
알고리즘 을 사용 하 는 것 을 권장 합 니 다.bbox 의 좌표 와 현재 이미지 척도 의 대 수 를 이용 하여 bbox 의 다양한 모델 을 측정 하 는 것 이 좋 습 니 다.그러나 효 과 는 강 한 분류 기 를 사용 하여 NMS 와 결합 하 는 것 보다 좋 지 않 을 수 있 습 니 다.2.2 목표 검출 pipline
proposal 이 생 긴 후 분류 네트워크 를 사용 하여 상자 마다 신뢰 도 를 주 고 회귀 네트워크 로 위 치 를 수정 하 며 최종 적 으로 NMS 를 사용 합 니 다.
3.NMS 원리
Bounding Box 의 목록 B 와 그 에 대응 하 는 신뢰 도 S 는 아래 의 계산 방식 을 사용 합 니 다.최대 score 가 있 는 검 측 상자 M 을 선택 하여 B 집합 에서 제거 하고 최종 검 측 결과 D 에 추가 합 니 다.보통 B 에 남 은 검 측 상자 와 M 의 IoU 가 한도 값 Nt 이상 인 상 자 를 B 에서 제거 합 니 다.B 가 비어 있 을 때 까지 이 과정 을 반복 합 니 다.
3.1 중첩 율(중첩 구역 면적 비례 IOU)한도 값
자주 사용 하 는 한도 값 은
0.3 ~ 0.5
이다.그 중에서 정렬 을 사용 하면 오른쪽 아래 의 좌표 에 따라 정렬 하거나 면적 에 따라 정렬 할 수 있 고 SVM 등 분류 기 를 통 해 얻 은 득점 이나 확률 일 수도 있 으 며 R-CNN 에 서 는 득점 에 따라 정렬 할 수 있다.
위의 그림 처럼 한 차량 을 위치 시 키 고 마지막 알고리즘 은 한 무더기 의 네모 난 틀 을 찾 아 냈 다.우 리 는 어떤 사각형 틀 이 쓸모 가 없 는 지 판별 해 야 한다.비 극 대 치 를 억제 하 는 방법 은 먼저 6 개의 사각형 틀 을 가설 하고 분류 기의 분류 확률 에 따라 순 서 를 매 긴 다 는 것 이다.작은 것 부터 큰 것 까지 차량 에 속 할 확률 이 각각 A,B,C,D,E,F 라 고 가정 한다.
(1)최대 확률 의 사각형 상자 F 부터 A~E 와 F 의 중첩 도 IOU 가 특정한 설정 의 한도 값 보다 큰 지 판단 한다.
(2)B,D 와 F 의 중첩 도가 한도 값 을 초과 한다 고 가정 하면 B,D 를 버린다.첫 번 째 사각형 상자 F 를 표시 합 니 다.우리 가 남 겨 둔 것 입 니 다.
(3)남 은 사각형 상자 A,C,E 중에서 확률 이 가장 높 은 E 를 선택 한 다음 에 E 와 A,C 의 중첩 도 를 판단 하고 중첩 도가 일정한 한도 값 보다 크 면 버린다.그리고 E 는 우리 가 남 겨 놓 은 두 번 째 사각형 상자 입 니 다.
이렇게 계속 반복 해서 남 겨 진 사각형 상 자 를 찾 습 니 다.
3.2 코드 예시
R-CNN 에 서 는 최종 bbox 를 확인 하기 위해 NMS 를 사용 했다.각 후보 상자 에 분류 기 를 보 내 고 분류 기의 분류 확률 에 따라 정렬(논문 에 서 는 greedy-NMS 라 고 함)한다.그러나 분류 하기 전에 간단 한 버 전의 NMS 를 사용 하여 일부 상 자 를 제거 할 수도 있다.
python 에서 실 현 된 단일 분류 nms:py_cpu_nms.py.
def py_cpu_nms(dets, thresh):
"""Pure Python NMS baseline."""
#x1、y1、x2、y2、 score
x1 = dets[:, 0]
y1 = dets[:, 1]
x2 = dets[:, 2]
y2 = dets[:, 3]
scores = dets[:, 4]
#
areas = (x2 - x1 + 1) * (y2 - y1 + 1)
# score
order = scores.argsort()[::-1]
keep = [] #
while order.size > 0:
i = order[0]
keep.append(i) # box
# ,
xx1 = np.maximum(x1[i], x1[order[1:]])
yy1 = np.maximum(y1[i], y1[order[1:]])
xx2 = np.minimum(x2[i], x2[order[1:]])
yy2 = np.minimum(y2[i], y2[order[1:]])
# , 0
w = np.maximum(0.0, xx2 - xx1 + 1)
h = np.maximum(0.0, yy2 - yy1 + 1)
inter = w * h
# IoU: /( 1+ 2- )
ovr = inter / (areas[i] + areas[order[1:]] - inter)
# IoU box
inds = np.where(ovr <= thresh)[0]
order = order[inds + 1] # ovr order ,
return keep
Faster R-CNN 의 MATLAB 실현 은 python 버 전과 일치 합 니 다.코드 는 여기 있 습 니 다.nms.m.또한 nms_multiclass.m 은 여러 종류의 nms 로 for 순환 을 추가 하여 각 종 류 를 nms 할 뿐 입 니 다.4.NMS loss
값 의 주 의 는 여러 종류의 검 측 작업 에 대해 각각 NMS 를 진행 하면 검 측 결과 에 두 개의 서로 다른 유형 으로 나 뉘 어 진 목표 가 포함 되 고 그 IoU 가 비교적 클 때 받 아들 일 수 없 는 결 과 를 얻 을 수 있 습 니 다.다음 그림 에서 보 듯 이:
손실 함수 에 NMS 손실 을 일부 추가 하 는 개선 방식 이다.NMS 손실 은 분류 손실 과 같다 고 정의 할 수 있 습 니 다.
즉,실제 열 별 u 에 대응 하 는 log 손실,p 는 C 개 유형의 예측 확률 이다.실제 분류 오 차 를 늘 리 는 셈 이다.
논문'Rotated Region Based CNN for Ship Detection'(IEEE 2017 회의 논문)의 Multi-task for NMS 부분 을 참고 한다.
5.Soft-NMS
상기 NMS 알고리즘 의 주요 문 제 는 두 ground truth 의 목표 가 확실히 중첩 도가 높 을 때 NMS 는 비교적 낮은 신뢰 도 를 가 진 상 자 를 제거 하고 다음 그림 을 참조 하 는 것 이다.
논문:《Improving Object Detection With One Line of Code》
개선 점:
개선 방법 은 신뢰 도 를 IoU 의 함수 로 바 꾸 는 것 입 니 다.f(IoU)는 정렬 목록 에서 삭제 되 지 않 고 낮은 값 을 가지 고 있 습 니 다.
1.선형 함수
함수 값 이 연속 되 지 않 아 어떤 점 의 값 에서 점프 가 발생 합 니 다.
2.가우스 함수
시간 복잡 도 는 전통 적 인 greedy-NMS 와 같다.
5.1,python 코드 구현
ua = float((tx2 - tx1 + 1) * (ty2 - ty1 + 1) + area - iw * ih)
ov = iw * ih / ua #iou between max box and detection box
if method == 1: # linear
if ov > Nt:
weight = 1 - ov
else:
weight = 1
elif method == 2: # gaussian
weight = np.exp(-(ov * ov)/sigma)
else: # original NMS
if ov > Nt:
weight = 0
else:
weight = 1
# re-scoring
# boxes[pos, 4] = weight*boxes[pos, 4]
5.2,Caffe C++버 전 구현makefile/frcnn
효과.
proposal 방법 을 바탕 으로 하 는 모델 결과 에 응용 이 비교적 좋 고 검 측 효과 가 향상 되 었 습 니 다.
R-FCN 및 Faster-CNN 모델 에서 의 테스트 단계 에서 Soft-NMS 를 활용 하여 MS-COCO 데이터 세트 에서
mAP@[0.5:0.95]
은 약 1%의 향상(여기)을 얻 을 수 있 습 니 다.훈련 단계 에 응 용 된 proposal 선택 과정 이론 적 으로 도 향상 되 었 습 니 다.자신의 실험 에서 중첩 되 기 쉬 운 목표 유형 이 향상 되 었 다 는 것 을 알 수 있 습 니 다.(목표 가 반드시 픽 셀 상의 중첩 이 있 는 것 은 아 닙 니 다.비스듬히 자 른 목표 의 사각형 테 두 리 는 비교적 큰 중첩 이 있 을 것 이다).SSD,YOLO 등 비 proposal 방법 에 서 는 향상 되 지 않 았 다.
6.기타 응용
변두리 검 측:Canny 연산 자의 비 극 대 치 억 제 는 경사도 방향 을 따라 진행 되 는 것 입 니 다.즉,경사도 방향의 극치 점 인지 여부 입 니 다.
특징 점 검 측:각 점 검 측 등 장면 에서 말 하 는 비 극 대 치 억제,즉 중심 점 의 값 이 특정한 이웃 지역 내의 최대 치 인지 검사 하 는 것 입 니 다.
이상 은 비대 칭 값 억제 알고리즘 의 Python 실현 에 대한 상세 한 내용 입 니 다.비대 칭 값 억제 Python 실현 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.