真阳性、假阳性、假阴性计算数据帧python
我已经训练了一个目标探测网络。我有一个地面真相注释CSV格式,真阳性、假阳性、假阴性计算数据帧python,python,pandas,computer-vision,precision,object-detection,Python,Pandas,Computer Vision,Precision,Object Detection,我已经训练了一个目标探测网络。我有一个地面真相注释CSV格式, 文件名、高度、宽度、xmin、ymin、xmax、ymax、class。当我对输入图像评分时,我得到以下格式的输出CSV:filename、xmin、ymin、xmax、ymax、class、confidence 考虑到IoU,我需要合并这些数据帧。所以基本上输出数据帧应该包含 如果找到匹配项,则基础真相及其相应的预测以及IoU值 如果未找到匹配的IoU则为基本真值和Nan预测值 如果未找到匹配的IoU则为Nan地面真值和预测值 这
文件名、高度、宽度、xmin、ymin、xmax、ymax、class
。当我对输入图像评分时,我得到以下格式的输出CSV:filename、xmin、ymin、xmax、ymax、class、confidence
考虑到IoU
,我需要合并这些数据帧。所以基本上输出数据帧应该包含
IoU
值IoU
则为基本真值和Nan预测值IoU
则为Nan地面真值和预测值 filename xmin ymin xmax ymax class confidence
0 dummyfile.jpg 4060 2060 4214 2242 DR 0.999985
1 dummyfile.jpg 3599 1282 3732 1456 DR 0.999900
地面真相样本:
filename width height class xmin xmax ymin ymax
0 dummyfile.jpg 7201 5400 DR 3598 3728 1279 1451
1 dummyfile.jpg 7201 5400 DR 3916 4038 2186 2274
预期最终产出:
我添加了我目前的方法作为答案。有没有更好的方法来实现这一点?数据可能相当大。这是我发现的一种方法
将熊猫作为pd导入
将numpy作为np导入
导入操作系统
def IOU(df):
''计算数据帧行内IOU的功能''
#确定相交矩形的最小和最大坐标
xmin_inter=max(df.xmin,df.xmin_pred)
ymin_inter=max(df.ymin,df.ymin_pred)
xmax_inter=min(df.xmax,df.xmax_pred)
ymax_inter=min(df.ymax,df.ymax_pred)
#求交矩形的面积
内部面积=max(0,xmax\u内部-xmin\u内部+1)*max(0,ymax\u内部-ymin\u内部+1)
#计算实际和预测框的面积
实际面积=(df.xmax-df.xmin+1)*(df.ymax-df.ymin+1)
pred_面积=(df.xmax_pred-df.xmin_pred+1)*(df.ymax_pred-df.ymin_pred+1)
#并上交的计算
iou=内部面积/浮动(实际面积+预面积-内部面积)
#返回与并集值的交点
归还欠条
ground\u truth=pd.read\u csv(“示例”\u gt.csv”)
预测=pd.read\u csv('sample\u preds.csv')
###使用_pred后缀重命名预测df列
pred_cols=prediction.columns.tolist()
pred_cols.remove('文件名')
新列=[col+“\u pred”代表pred列中的列]
new_col_dict=dict(zip(pred_cols,new_cols))
prediction.rename(列=new\u col\u dict,inplace=True)
#####外部连接前提和基本事实df
newdf=pd.merge(预测,基本事实,'outer',on='filename')
###应用iou计算
newdf['iou']=newdf.apply(iou,axis=1)
###筛选所有iou=0
newdf=newdf[newdf['iou']>0]
final_df=pd.merge(prediction,newdf,on=prediction.columns.tolist(),how='left')
final\u df=pd.merge(final\u df,ground\u truth,on=ground\u truth.columns.tolist(),how='outer')
有更快的解决方案吗?