Update output of SuperPointForKeypointDetection
Author: NielsRogge
Pull request: yes

# What does this PR do?

This PR suggests to not include `AutoModelForKeypointDetection`, at least for now, because of safety reasons.

From the past, I learned that it only makes sense to add an auto class if you have at least a few models that tackle the same task, in order to unify their APIs and have a class that is robust in terms of API.

By already including an `AutoModelForKeypointDetection` class now, we risk having a breaking change in the future when we want to unify Superpoint with other keypoint detection models.

The SuperPointForKeypointDetection class currently returns this:

```
return ImagePointDescriptionOutput(
            last_hidden_state=last_hidden_state,
            keypoints=keypoints,
            scores=scores,
            descriptors=descriptors,
            mask=mask,
            hidden_states=hidden_states,
        )
```
however, will future models also include keypoints, scores, descriptors? This is slightly inconsistent as head models usually have loss as the first argument, and don't include `last_hidden_state`, as that one is already included in the `hidden_states`. Hence we would need to think a bit more throughly about having a general `ImagePointDescriptionOutput` class that works across various models.

Another minor remark is that `SuperpointForKeypointDetection` is preferred over `SuperPointForKeypointDetection` (we use camelcase by default), I know I'm nitpicking. Happy to change that in this PR if required

Comments:
The docs for this PR live [here](https://moon-ci-docs.huggingface.co/docs/transformers/pr_29809). All of your documentation changes will be reflected on that endpoint. The docs are available until 30 days after the last update.

Thanks for opening this PR @NielsRogge! 

> This PR suggests to not include AutoModelForKeypointDetection, at least for now, because of safety reasons.

What is the safety concern? 

> return ImagePointDescriptionOutput(
            last_hidden_state=last_hidden_state,
            keypoints=keypoints,
            scores=scores,
            descriptors=descriptors,
            mask=mask,
            hidden_states=hidden_states,
        )

Agreed there can be issues with the returned model output. As mentioned in the SuperPoinr PR, having an auto class is necessary for the implementation of SuperGlue. SuperGlue is a separate model from SuperPoint and can technically use any local feature detector and descriptor (it just happens to work well with SuperPoint). Therefore, the pattern is similar to using `AutoBackbone` in our vision models or `AutoModel` in e.g. llava. 

I would suggest the following alternative changes, which does not remove the auto class, but address some of the concerns here: 
* Changing the model output for SuperPoint to `SuperPointKeypointDescriptionOutput` to make clear it's model specific
* Add a `loss` option in the model output
* Remove `last_hidden_state` - this is a hangover from when it was an AutoModel output 

For our AutoModel classes, the unified output defines:
* The shape of the outputs 
* The minimal set of outputs they should all have, but each of the models that can be loaded by the autoclass can return more outputs. For example, for image classification some models return `reshaped_hidden_states` and some don't return attentions, but all can be loaded with `AutoModelForImageClassification`

In this case, I think can can assume that all the models for keypoint detections should return: loss, keypoints, hidden_states. 

Alternatively, you could also rename to `AutoModelForKeypointDetectionDescription` to make it more narrow so that all the models would return: loss, keypoints, descriptors, hidden_states. 

> Another minor remark is that SuperpointForKeypointDetection is preferred over SuperPointForKeypointDetection (we use camelcase by default), I know I'm nitpicking. Happy to change that in this PR if required

I disagree. Yes, we use camel case to remove weird capitalizations in the repo e.g. LLaVA, to make it easier for people to use model classes. However, SuperPoint is already camel-case and this change wouldn't be consistent with other model naming in the library e.g. `OneFormer`, `BridgeTower`, `InstructBlip`