I have been watching [Joseph Redmon (developer of YOLOv3) lecture about YOLO from 45:04 here:
https://youtu.be/s989zzFkaFo?t=2704
where he explains why he needs both predictions: “objectness” called P0 VS class probabilities called p1,p2…
I understand that he kinda wants to filter out cells with small objectness, before he gets to classify them. But if I understood this right’ then I have such question of 2 parts:
a- when I run already trained YOLO it has 85 outputs where objectness prediction comes out at the same time with the classes predictions confidences - thus I do not see where he saves time or resources. I would understand if we have 2 stages of output: ex: First output of objectness and only than for cells who passed some threshold, another fully connected stage would work and output chosen cells classes probabilities. And it is not the case in the code.
So what do I miss? Maybe P0 plays role only in training process?
b- more over, I do not see in a code of running already trained YOLO any place where P0 is used at all. There are only two filterings take place:
1- one is selecting only predictions where specific class confidence probability is more than some minimum probabaility
2- use NMS function while P0 is not even sent to this function:
results = cv2.dnn.NMSBoxes(bounding_boxes, confidences, probability_minimum, threshold)
bounding boxes - is a list with coordinates of boxes which passed the first filtering by classes(p1,p2…p80)
confidences - is a list of the probabilitis of those classes(for example p1=0.8, p3=0.76 etc)
probability_minimum - is the parameter I have already used to filter out classes with small probabilities
threshold - is the threshold for IoU which is a part of NMS procedure…
Thus I do not see any place we use the objectness parameter (p0), which maybe says that my guess in the part one of the question is right - the P0 is usefull only in training stage? Am I right?
Thank you very much.