Algorithm Development Guide

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.

1. Add an hard example mining algorithm

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.

1.1 Starting from the class_factory.py

First, 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

2. Configuring in the CRD yaml

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"