|
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import numpy as np
- import pandas as pd
- import os
- from PIL import Image
- from tqdm import tqdm
- from ensemble_boxes import *
-
- def xywh2x1y1x2y2(bbox):
- x1 = bbox[0] - bbox[2]/2
- x2 = bbox[0] + bbox[2]/2
- y1 = bbox[1] - bbox[3]/2
- y2 = bbox[1] + bbox[3]/2
- return ([x1,y1,x2,y2])
-
- def x1y1x2y22xywh(bbox):
- x = (bbox[0] + bbox[2])/2
- y = (bbox[1] + bbox[3])/2
- w = bbox[2] - bbox[0]
- h = bbox[3] - bbox[1]
- return ([x,y,w,h])
-
- IMG_PATH = '/VisDrone2019-DET-test-challenge/images/'
- TXT_PATH = './runs/val/'
-
- OUT_PATH = './runs/wbf_labels/'
-
-
- MODEL_NAME = os.listdir(TXT_PATH)
- # MODEL_NAME = ['test1','test2']
-
- # ===============================
- # Default WBF config (you can change these)
- iou_thr = 0.67 #0.67
- skip_box_thr = 0.01
- # skip_box_thr = 0.0001
- sigma = 0.1
- # boxes_list, scores_list, labels_list, weights=weights,
- # ===============================
-
- image_ids = os.listdir(IMG_PATH)
- for image_id in tqdm(image_ids, total=len(image_ids)):
- boxes_list = []
- scores_list = []
- labels_list = []
- weights = []
- for name in MODEL_NAME:
- box_list = []
- score_list = []
- label_list = []
- txt_file = TXT_PATH + name + '/labels/' + image_id.replace('jpg', 'txt')
- if os.path.exists(txt_file):
- # if os.path.getsize(txt_file) > 0:
- txt_df = pd.read_csv(txt_file,header=None,sep=' ').values
-
- for row in txt_df:
- box_list.append(xywh2x1y1x2y2(row[1:5]))
- score_list.append(row[5])
- label_list.append(int(row[0]))
- boxes_list.append(box_list)
- scores_list.append(score_list)
- labels_list.append(label_list)
- weights.append(1.0)
- else:
- continue
- # print(txt_file)
-
- boxes, scores, labels = weighted_boxes_fusion(boxes_list, scores_list, labels_list, weights=weights, iou_thr=iou_thr, skip_box_thr=skip_box_thr)
- if not os.path.exists(OUT_PATH):
- os.makedirs(OUT_PATH)
- out_file = open(OUT_PATH + image_id.replace('jpg', 'txt'), 'w')
-
- for i,row in enumerate(boxes):
- img = Image.open(IMG_PATH + image_id)
- img_size = img.size
- bbox = x1y1x2y22xywh(row)
- out_file.write(str(int(labels[i]+1)) + ' ' +" ".join(str(x) for x in bbox) + " " + str(round(scores[i],6)) + '\n')
- out_file.close()
|