alibaba / easyrobust

EasyRobust: an Easy-to-use library for state-of-the-art Robust Computer Vision Research with PyTorch.
Apache License 2.0
325 stars 37 forks source link

About the overlap of the visualization of the BATS. #18

Closed Cverchen closed 12 months ago

Cverchen commented 1 year ago

Great works! But i want to know how you calculate the overlap value of the visualization of the BATS. For example, in following figure: image overlap = 33.49% how can i get it? Thanks for your reply!

ZY123-GOOD commented 12 months ago

Thank you for raising this good question. The overlapping area in this diagram is estimated using the following method.

Draw the frequency histogram:

n1, bins1, patches1  = plt.hist(IDScore,bins=100,density=True,color='orange',alpha=0.)
plt.fill_between(bins1[:-1], n1, color='orange', alpha=1.0,label="ImageNet")
plt.plot(bins1[:-1],n1,'--',color='coral')

n2, bins2, patches2  = plt.hist(OODScore,bins=100,density=True,color='lightgreen',alpha=0.)
plt.fill_between(bins2[:-1], n2, color='lightgreen', alpha=0.8,label="SUN")
plt.plot(bins2[:-1],n2,'--',color='green')

The estimated overlapping position of the two parts: for example, threshold = 13.5.

Then:

overlap = []
flag1=0
for i in range(100):
    if bins1[i]<threshold :
        flag1=i
for i in range(flag1):
    overlap.append(n1[i])

flag2=0
for i in range(100):
    if bins2[i]<threshold :
        flag2=i
for i in range(99-flag2):
    overlap.append(n2[99-i])      

At last you can get the overlap by: print(sum(overlap)*(bins1[:-1][1]-bins1[:-1][0])) Of note, this is only an estimated value derived during the plotting process, and there might be better computational methods.

If you have any further questions, please feel free to email me at ee_zhuy@zju.edu.cn or chat with me on WeChat.

Wishing you all the best!

Cverchen commented 12 months ago

Thanks for your reply!