Faster RCNN 추리 처음부터 자바(6)NMS(비 최대 치 억제)
6. NMS ( )
입력:
3:code by code
추출[x1,y1,x2,y2]
INDArray x1 = boxes.get(NDArrayIndex.all(), NDArrayIndex.point(0));
INDArray y1 = boxes.get(NDArrayIndex.all(), NDArrayIndex.point(1));
INDArray x2 = boxes.get(NDArrayIndex.all(), NDArrayIndex.point(2));
INDArray y2 = boxes.get(NDArrayIndex.all(), NDArrayIndex.point(3));
각 box 의 면적 을 계산 하 다
INDArray area = x2.sub(x1).mul(y2.sub(y1));
bbox 의 확률 을 작은 것 에서 큰 것 으로 정렬 하여 다음 색인 으로 되 돌려 줍 니 다.
List idxs = new ArrayList<>(argsort_v1(probs.toFloatVector()));
마지막 으로 남 긴 box 아래 색인 을 표시 합 니 다.
List pick = new ArrayList<>();
옮 겨 다 니 며 마지막 bbox,즉 확률 이 가장 높 은 box 를 가 져 옵 니 다.
while (idxs.size() > 0)
{
int last = idxs.size() - 1;
// .
int i = idxs.get(last);
pick.add(i);
최대 확률 box 를 제외 한 모든 box 의 색인 가 져 오기
SpecifiedIndex exceptLastIndex = new SpecifiedIndex(Ints.toArray(idxs.subList(0, last)));
최대 확률 bbox 이외 의 모든 bbox 의 사각형 상자 데 이 터 를 추출 하고 면적 교 집합 상 자 를 계산 합 니 다.
INDArray xx1 = Transforms.max(x1.get(exceptLastIndex), x1.getDouble(i));
INDArray yy1 = Transforms.max(y1.get(exceptLastIndex), y1.getDouble(i));
INDArray xx2 = Transforms.min(x2.get(exceptLastIndex), x2.getDouble(i));
INDArray yy2 = Transforms.min(y2.get(exceptLastIndex), y2.getDouble(i));
구속 너비 최소 0
INDArray ww = Transforms.max(xx2.sub(xx1), 0);
INDArray hh = Transforms.max(yy2.sub(yy1), 0);
계산 면적 교차
INDArray area_intersection = ww.mul(hh);
계산 면적 병집
INDArray area_union = area.get(exceptLastIndex).add(area.getFloat(i)).sub(area_intersection);
최대 확률 을 계산 하 는 bbox 와 다른 모든 box 의 overlap 는 IOU 라 고도 부 르 며,교 집합 면적/집적 면적
INDArray overlap = area_intersection.div(area_union.add(1e-6));
최대 bbox 의 IOU 가 밸브 값 보다 큰 bbox 를 삭제 합 니 다.
for (int k = idxs.size() - 1; k >= 0 ; k--)
{
if (overlap.getFloat(k) > overlap_thresh)
{
idxs.remove(k);
}
}
마지막 으로 남 긴 bbox 를 추출 하고 함 수 를 되 돌려 줍 니 다.
INDArray valid_boxes = boxes.get(valid_index, NDArrayIndex.all()).castTo(DataType.INT);
INDArray valid_probs = probs.get(valid_index);
return Arrays.asList(valid_boxes, valid_probs);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.