# Extracting Wind Turbine Blade Tips as Keypoints

**URL:** <https://community.ultralytics.com/t/extracting-wind-turbine-blade-tips-as-keypoints/731>\
**Category:** YOLO\
**Created:** [January 30, 2025, 3:45pm UTC](https://community.ultralytics.com/t/extracting-wind-turbine-blade-tips-as-keypoints/731 "2025-01-30T15:45:30Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![Nikelnack](https://sea1.discourse-cdn.com/flex001/user_avatar/community.ultralytics.com/nikelnack/32/573_2.png) [@Nikelnack](https://community.ultralytics.com/u/Nikelnack)\
**Post date:** [January 30, 2025, 3:45pm UTC](https://community.ultralytics.com/t/extracting-wind-turbine-blade-tips-as-keypoints/731/1 "2025-01-30T15:45:31Z")

</div>

My project is looking to estimate the yaw angle of a Wind Turbine relative to the camera. My idea was to extract the Blade Tips as Keypoints, which I can then use to calculate the excentricity of an elllipse formed by the rotating tips and relate the excentricity to the angle. However I am not able to get my keypoint detection accurate enough, see pics:

 ![val_batch0_pred 8](https://us1.discourse-cdn.com/flex001/uploads/ultralytics1/original/1X/fad33cbe2e5362f0bf96b5fb195182fa3e77b900.jpeg)  
The training metrics: [Imgur: The magic of the Internet](https://i.imgur.com/o8t75FV.png)

I already tried a Hyperparameter Tuning, that didn’t help. The annotation is looking like this: [Imgur: The magic of the Internet](https://i.imgur.com/WInZ0Kj.png)

Could the problem result from the rotational symmetry?  
Or do you have a more straight forward idea for how to extract the relative angle?  
Thank you

---

<div class="post-metadata">

**Author:** ![Toxite](https://sea1.discourse-cdn.com/flex001/user_avatar/community.ultralytics.com/toxite/32/123_2.png) [@Toxite](https://community.ultralytics.com/u/Toxite)\
**Post date:** [January 30, 2025, 5:42pm UTC](https://community.ultralytics.com/t/extracting-wind-turbine-blade-tips-as-keypoints/731/2 "2025-01-30T17:42:56Z")

</div>

Each keypoint is like a class of its own. So the model will try to learn what makes one keypoint distinct from the other within the same object. In your case, there’s no distinction between the keypoints and the assignment is arbitrary. You can try labeling each blade as a new object instead.

---

<div class="post-metadata">

**Author:** ![Nikelnack](https://sea1.discourse-cdn.com/flex001/user_avatar/community.ultralytics.com/nikelnack/32/573_2.png) [@Nikelnack](https://community.ultralytics.com/u/Nikelnack)\
**Post date:** [January 30, 2025, 5:51pm UTC](https://community.ultralytics.com/t/extracting-wind-turbine-blade-tips-as-keypoints/731/3 "2025-01-30T17:51:40Z")

</div>

I’m gonna try that out, thank you

---

<div class="post-metadata">

**Author:** ![pderrenger](https://sea1.discourse-cdn.com/flex001/user_avatar/community.ultralytics.com/pderrenger/32/73_2.png) [@pderrenger](https://community.ultralytics.com/u/pderrenger)\
**Post date:** [February 12, 2025, 1:32pm UTC](https://community.ultralytics.com/t/extracting-wind-turbine-blade-tips-as-keypoints/731/4 "2025-02-12T13:32:06Z")

</div>

Hello Nikelnack,

It’s great to see your project applying keypoint detection to estimate the yaw angle of wind turbines!

Regarding the accuracy of your keypoint detection, the rotational symmetry could indeed be a factor influencing the results. The similarity between blade tips might make it challenging for the model to distinguish each tip uniquely.

Since you are looking to improve keypoint detection, I recommend reviewing the `Keypoints` class documentation, where you can find detailed information on attributes and methods for handling keypoint data which includes coordinate manipulation and confidence values. You can also explore the `calculate_keypoints_loss` function to get a better understanding of how the keypoint loss is computed, which can be helpful.

Additionally, the Ultralytics [pose/keypoint estimation task guide](https://docs.ultralytics.com/tasks/pose/) might provide more useful insights.

The YOLO community and the Ultralytics team are always working on improving and refining these tools, so your feedback is valuable.

---

<div class="post-metadata">

**Author:** ![Jakob\_Gebler](https://sea1.discourse-cdn.com/flex001/user_avatar/community.ultralytics.com/jakob_gebler/32/906_2.png) [@Jakob\_Gebler](https://community.ultralytics.com/u/Jakob_Gebler)\
**Post date:** [August 12, 2025, 1:03pm UTC](https://community.ultralytics.com/t/extracting-wind-turbine-blade-tips-as-keypoints/731/5 "2025-08-12T13:03:23Z")

</div>

Hello,

Just a quick update on this: The problem was indeed, as suspected here, the **rotational symmetry**.

In a research project, we solved this problem by treating the keypoints as an **unordered set** and implementing a **permutation-invariant loss function**. This way, it doesn’t matter to the model which tip is identified as which, as long as the positions of _all_ tips are correct.

We have published the method and the results in a paper. If you’re interested, you can have a look here:

> **[Wind Turbine Feature Detection Using Deep Learning and Synthetic Data](https://arxiv.org/html/2507.21611v1)**

Best regards  
Jakob Gebler

---

<div class="post-metadata">

**Author:** ![BurhanQ](https://sea1.discourse-cdn.com/flex001/user_avatar/community.ultralytics.com/burhanq/32/7_2.png) [@BurhanQ](https://community.ultralytics.com/u/BurhanQ)\
**Post date:** [August 12, 2025, 1:08pm UTC](https://community.ultralytics.com/t/extracting-wind-turbine-blade-tips-as-keypoints/731/6 "2025-08-12T13:08:25Z")

</div>

Very cool! Thanks for sharing the publication and glad to hear you were able to get it sorted out.
