New algorithms, such as hard example mining in incremental_learning and joint_inference, aggreagtion in federated_learning, multiple task learning and unseen task detect in lifelong learning, need to be extended based on the basic classes provided by Sedna.
The algorithm named Threshold is used as an example to describe how to add an HEM algorithm to the Sedna hard example mining algorithm library.
class_factory.pyFirst, let's start from the class_factory.py. Two classes are defined in class_factory.py, namely ClassType and ClassFactory.
ClassFactory can register the modules you want to reuse through decorators. For the new ClassType.HEM algorithm, the code is as follows:
@ClassFactory.register(ClassType.HEM, alias="Threshold")
class ThresholdFilter(BaseFilter, abc.ABC):
def __init__(self, threshold=0.5, **kwargs):
self.threshold = float(threshold)
def __call__(self, infer_result=None):
# if invalid input, return False
if not (infer_result
and all(map(lambda x: len(x) > 4, infer_result))):
return False
image_score = 0
for bbox in infer_result:
image_score += bbox[4]
average_score = image_score / (len(infer_result) or 1)
return average_score < self.threshold
After registration, you only need to change the name of the hem and parameters in the yaml file, and then the corresponding class will be automatically called according to the name.
deploySpec:
hardExampleMining:
name: "Threshold"
parameters:
- key: "threshold"
value: "0.9"