Yolov12 support

Hi! Today yolov12 came out, has somebody already tried to compile it for hailo? In the Limitations section the paper warns that the model uses FlashAttention so I wonder whether this yolo version is possible to compile for the hailo8 chip.

Welcome to the Hailo Community!

Our R&D team will very likely look at the model. However they have lots of other exciting tings to do, so it will take a while until we can give you an answer.

I tried using the DFC to convert a modified YoloV12, but it failed when converting to HAR. I think the current architecture doesn’t support it yet.

1 Like

Hi, can I ask where do these specific paths come from? I have a yolo12m onnx-converted file and while inspecting it via Netron I do not find these, but instead find similar paths like:

/model.21/cv2.2/cv2.2.2/Conv
/model.21/cv3.2/cv3.2.2/Conv

model.21 instead of model.23 and slightly different paths confuse me, I wonder if I do something wrong at training or onnx conversion steps?

The article here refers to its origins (more details there), and the fact that yolov12s is sampled here . In order to adapt to yolov12m one could extract the paths using netron inspection tool, also can be compared with yolov12s described here.

Thanks, I’ve decided to try with these found paths (by analogy with yolov11):

end_node_names = [
    "/model.21/cv2.2/cv2.2.2/Conv",
    "/model.21/cv3.2/cv3.2.2/Conv",
    "/model.21/cv2.1/cv2.1.2/Conv",
    "/model.21/cv3.1/cv3.1.2/Conv",
    "/model.21/cv2.0/cv2.0.2/Conv",
    "/model.21/cv3.0/cv3.0.2/Conv",
]

But now get this error dump:

[root@e6a4bc308899 hailo]# python3 convert.py
[info] Translation started on ONNX model yolov12
[info] Restored ONNX model yolov12 (completion time: 00:00:00.23)
[info] Extracted ONNXRuntime meta-data for Hailo model (completion time: 00:00:00.83)
[info] Simplified ONNX model for a parsing retry attempt (completion time: 00:00:10.90)
Error during model translation: Parsing failed. The errors found in the graph are:
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.0/attn/Reshape_1: Failed to determine type of layer to create in node /model.6/m.0/m.0.0/attn/Reshape_1
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.0/attn/Transpose_1: Failed to determine type of layer to create in node /model.6/m.0/m.0.0/attn/Transpose_1
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.1/attn/Reshape_1: Failed to determine type of layer to create in node /model.6/m.0/m.0.1/attn/Reshape_1
UnsupportedFeatureSplitterLayerError in op /model.6/m.0/m.0.0/attn/Split: Feature splitter vertex /model.6/m.0/m.0.0/attn/Split is splitting input over unsupported axis 2
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.1/attn/Transpose_1: Failed to determine type of layer to create in node /model.6/m.0/m.0.1/attn/Transpose_1
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.0/attn/Transpose_5: Failed to determine type of layer to create in node /model.6/m.0/m.0.0/attn/Transpose_5
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.0/attn/Reshape_1: Failed to determine type of layer to create in node /model.6/m.1/m.1.0/attn/Reshape_1
UnsupportedFeatureSplitterLayerError in op /model.6/m.0/m.0.1/attn/Split: Feature splitter vertex /model.6/m.0/m.0.1/attn/Split is splitting input over unsupported axis 2
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.0/attn/Transpose_4: Failed to determine type of layer to create in node /model.6/m.0/m.0.0/attn/Transpose_4
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.0/attn/Reshape_4: Failed to determine type of layer to create in node /model.6/m.0/m.0.0/attn/Reshape_4
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.0/attn/Transpose_1: Failed to determine type of layer to create in node /model.6/m.1/m.1.0/attn/Transpose_1
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.1/attn/Transpose_5: Failed to determine type of layer to create in node /model.6/m.0/m.0.1/attn/Transpose_5
UnsupportedSoftmaxLayerError in op /model.6/m.0/m.0.0/attn/Softmax: Unsupported softmax
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.0/attn/Reshape_3: Failed to determine type of layer to create in node /model.6/m.0/m.0.0/attn/Reshape_3
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.0/attn/Transpose_7: Failed to determine type of layer to create in node /model.6/m.0/m.0.0/attn/Transpose_7
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.1/attn/Reshape_1: Failed to determine type of layer to create in node /model.6/m.1/m.1.1/attn/Reshape_1
UnsupportedFeatureSplitterLayerError in op /model.6/m.1/m.1.0/attn/Split: Feature splitter vertex /model.6/m.1/m.1.0/attn/Split is splitting input over unsupported axis 2
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.1/attn/Transpose_4: Failed to determine type of layer to create in node /model.6/m.0/m.0.1/attn/Transpose_4
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.1/attn/Reshape_4: Failed to determine type of layer to create in node /model.6/m.0/m.0.1/attn/Reshape_4
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.0/attn/Transpose_6: Failed to determine type of layer to create in node /model.6/m.0/m.0.0/attn/Transpose_6
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.1/attn/Transpose_1: Failed to determine type of layer to create in node /model.6/m.1/m.1.1/attn/Transpose_1
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.0/attn/Transpose_5: Failed to determine type of layer to create in node /model.6/m.1/m.1.0/attn/Transpose_5
UnsupportedSoftmaxLayerError in op /model.6/m.0/m.0.1/attn/Softmax: Unsupported softmax
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.1/attn/Reshape_3: Failed to determine type of layer to create in node /model.6/m.0/m.0.1/attn/Reshape_3
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.1/attn/Transpose_7: Failed to determine type of layer to create in node /model.6/m.0/m.0.1/attn/Transpose_7
UnsupportedFeatureSplitterLayerError in op /model.6/m.1/m.1.1/attn/Split: Feature splitter vertex /model.6/m.1/m.1.1/attn/Split is splitting input over unsupported axis 2
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.0/attn/Transpose_4: Failed to determine type of layer to create in node /model.6/m.1/m.1.0/attn/Transpose_4
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.0/attn/Reshape_4: Failed to determine type of layer to create in node /model.6/m.1/m.1.0/attn/Reshape_4
UnsupportedShuffleLayerError in op /model.6/m.0/m.0.1/attn/Transpose_6: Failed to determine type of layer to create in node /model.6/m.0/m.0.1/attn/Transpose_6
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.1/attn/Transpose_5: Failed to determine type of layer to create in node /model.6/m.1/m.1.1/attn/Transpose_5
UnsupportedSoftmaxLayerError in op /model.6/m.1/m.1.0/attn/Softmax: Unsupported softmax
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.0/attn/Reshape_3: Failed to determine type of layer to create in node /model.6/m.1/m.1.0/attn/Reshape_3
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.0/attn/Transpose_7: Failed to determine type of layer to create in node /model.6/m.1/m.1.0/attn/Transpose_7
UnsupportedShuffleLayerError in op /model.8/m.0/m.0.0/attn/Transpose_5: Failed to determine type of layer to create in node /model.8/m.0/m.0.0/attn/Transpose_5
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.1/attn/Transpose_4: Failed to determine type of layer to create in node /model.6/m.1/m.1.1/attn/Transpose_4
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.1/attn/Reshape_4: Failed to determine type of layer to create in node /model.6/m.1/m.1.1/attn/Reshape_4
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.0/attn/Transpose_6: Failed to determine type of layer to create in node /model.6/m.1/m.1.0/attn/Transpose_6
UnsupportedShuffleLayerError in op /model.8/m.0/m.0.0/attn/Transpose_4: Failed to determine type of layer to create in node /model.8/m.0/m.0.0/attn/Transpose_4
UnsupportedShuffleLayerError in op /model.8/m.0/m.0.0/attn/Reshape_3: Failed to determine type of layer to create in node /model.8/m.0/m.0.0/attn/Reshape_3
UnsupportedSoftmaxLayerError in op /model.6/m.1/m.1.1/attn/Softmax: Unsupported softmax
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.1/attn/Reshape_3: Failed to determine type of layer to create in node /model.6/m.1/m.1.1/attn/Reshape_3
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.1/attn/Transpose_7: Failed to determine type of layer to create in node /model.6/m.1/m.1.1/attn/Transpose_7
UnsupportedShuffleLayerError in op /model.8/m.0/m.0.1/attn/Transpose_5: Failed to determine type of layer to create in node /model.8/m.0/m.0.1/attn/Transpose_5
UnsupportedShuffleLayerError in op /model.8/m.0/m.0.0/attn/Reshape_2: Failed to determine type of layer to create in node /model.8/m.0/m.0.0/attn/Reshape_2
UnsupportedShuffleLayerError in op /model.8/m.0/m.0.0/attn/Transpose_7: Failed to determine type of layer to create in node /model.8/m.0/m.0.0/attn/Transpose_7
UnsupportedShuffleLayerError in op /model.6/m.1/m.1.1/attn/Transpose_6: Failed to determine type of layer to create in node /model.6/m.1/m.1.1/attn/Transpose_6
UnsupportedShuffleLayerError in op /model.8/m.0/m.0.1/attn/Transpose_4: Failed to determine type of layer to create in node /model.8/m.0/m.0.1/attn/Transpose_4
UnsupportedShuffleLayerError in op /model.8/m.0/m.0.1/attn/Reshape_3: Failed to determine type of layer to create in node /model.8/m.0/m.0.1/attn/Reshape_3
UnsupportedShuffleLayerError in op /model.8/m.0/m.0.0/attn/Transpose_6: Failed to determine type of layer to create in node /model.8/m.0/m.0.0/attn/Transpose_6
UnsupportedShuffleLayerError in op /model.8/m.1/m.1.0/attn/Transpose_5: Failed to determine type of layer to create in node /model.8/m.1/m.1.0/attn/Transpose_5
UnsupportedShuffleLayerError in op /model.8/m.0/m.0.1/attn/Reshape_2: Failed to determine type of layer to create in node /model.8/m.0/m.0.1/attn/Reshape_2
UnsupportedShuffleLayerError in op /model.8/m.0/m.0.1/attn/Transpose_7: Failed to determine type of layer to create in node /model.8/m.0/m.0.1/attn/Transpose_7
UnsupportedShuffleLayerError in op /model.8/m.1/m.1.0/attn/Transpose_4: Failed to determine type of layer to create in node /model.8/m.1/m.1.0/attn/Transpose_4
UnsupportedShuffleLayerError in op /model.8/m.1/m.1.0/attn/Reshape_3: Failed to determine type of layer to create in node /model.8/m.1/m.1.0/attn/Reshape_3
UnsupportedShuffleLayerError in op /model.8/m.0/m.0.1/attn/Transpose_6: Failed to determine type of layer to create in node /model.8/m.0/m.0.1/attn/Transpose_6
UnsupportedShuffleLayerError in op /model.8/m.1/m.1.1/attn/Transpose_5: Failed to determine type of layer to create in node /model.8/m.1/m.1.1/attn/Transpose_5
UnsupportedShuffleLayerError in op /model.8/m.1/m.1.0/attn/Reshape_2: Failed to determine type of layer to create in node /model.8/m.1/m.1.0/attn/Reshape_2
UnsupportedShuffleLayerError in op /model.8/m.1/m.1.0/attn/Transpose_7: Failed to determine type of layer to create in node /model.8/m.1/m.1.0/attn/Transpose_7
UnsupportedShuffleLayerError in op /model.8/m.1/m.1.1/attn/Transpose_4: Failed to determine type of layer to create in node /model.8/m.1/m.1.1/attn/Transpose_4
UnsupportedShuffleLayerError in op /model.8/m.1/m.1.1/attn/Reshape_3: Failed to determine type of layer to create in node /model.8/m.1/m.1.1/attn/Reshape_3
UnsupportedShuffleLayerError in op /model.8/m.1/m.1.0/attn/Transpose_6: Failed to determine type of layer to create in node /model.8/m.1/m.1.0/attn/Transpose_6
UnsupportedShuffleLayerError in op /model.8/m.1/m.1.1/attn/Reshape_2: Failed to determine type of layer to create in node /model.8/m.1/m.1.1/attn/Reshape_2
UnsupportedShuffleLayerError in op /model.8/m.1/m.1.1/attn/Transpose_7: Failed to determine type of layer to create in node /model.8/m.1/m.1.1/attn/Transpose_7
UnsupportedShuffleLayerError in op /model.8/m.1/m.1.1/attn/Transpose_6: Failed to determine type of layer to create in node /model.8/m.1/m.1.1/attn/Transpose_6

Please try to parse the model again, using these end node names: /model.6/cv1/act/Mul, /model.4/cv2/act/Mul, /model.6/m.0/m.0.0/attn/Transpose

Suggested output paths do not seem right to me, although I could be mistaken, any hints here?

Something is wrong, you end up with unsupported shuffle later. Will look at yolov12m for you later tod

The whole idea here is to cut off the last layers, in one hand they are large dims >8k , other is that some ops are not supported as HW. Not only hailo accels does not support such but also others like rk3588. These final computations are moved to cpu (hailo have this nms specific replacement), all at very little expense of performance.

Hi @Anton_Kumaigorodskyi

It seems stock yolov12 (GitHub - sunsmarterjie/yolov12: YOLOv12: Attention-Centric Real-Time Object Detectors) does not work due tu Shuffle layer missing in the Hailo converter. I have no solution for these stock ones, to avoid confusion I removed the tutorial steps posted here, being inappropriate.

Thanks a lot for looking into this! I guess we just have to wait until Hailo team gets to this.

Even if this got fixed, due to the introduced attention mechanism it is possible that on this kind of NPU (Hailo) there will be a significant slowdown. At least on other types of NPU available on embeded platforms (e.g. rockchip) performance drop is about 3 times in case of v12, and this is quite a lot. I believe currently the best model in yolo class that is also HW friendly is still version 11 .

1 Like

is there a plan or maybe a date when it get fixed for v12?