<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def load_backends(config, callback, internal_attributes):
 """ Load all backend modules specified in the config :type config: satosa.satosa_config.SATOSAConfig :type callback: (satosa.context.Context, satosa.internal.InternalData) -> satosa.response.Response :type internal_attributes: dict[string, dict[str, str | list[str]]] :rtype: Sequence[satosa.backends.base.BackendModule] :param config: The configuration of the satosa proxy :param callback: Function that will be called by the backend after the authentication is done. :return: A list of backend modules """

    backend_modules = _load_plugins(config.get("CUSTOM_PLUGIN_MODULE_PATHS"), config["BACKEND_MODULES"], backend_filter,
                                    config["BASE"], internal_attributes, callback)
    logger.info("Setup backends: %s" % [backend.name for backend in backend_modules])
    return backend_modules