yolov3进行nms的函数
时间: 2024-05-10 09:14:16 浏览: 136
yolov3+SORT.zip
Yolov3中使用的nms函数是在darknet库中实现的,具体实现代码如下:
```c
void do_nms_sort(detection *dets, int total, int classes, float thresh)
{
int i, j, k;
k = total - 1;
for(i = 0; i <= k; ++i){
if(dets[i].objectness == 0){
swap(dets[i], dets[k]);
--k;
--i;
}
}
total = k+1;
for(k = 0; k < classes; ++k){
for(i = 0; i < total; ++i){
dets[i].sort_class = k;
}
qsort(dets, total, sizeof(detection), nms_comparator);
for(i = 0; i < total; ++i){
if(dets[i].prob[k] == 0) continue;
box a = dets[i].bbox;
for(j = i+1; j < total; ++j){
box b = dets[j].bbox;
if (box_iou(a, b) > thresh){
dets[j].prob[k] = 0;
}
}
}
}
}
```
其中,`detection`结构体表示检测结果,`total`表示总共检测出的框的数量,`classes`表示类别的数量,`thresh`表示iou的阈值,函数中的`qsort`是C语言标准库中的快速排序函数,`nms_comparator`是一个比较函数,用于排序。在函数中,首先将objectness为0的框移到数组末尾,然后按照每个类别的置信度进行排序,最后按照iou进行非极大值抑制。
阅读全文