---
# System prepended metadata

title: PoseFormerV2：升級YOLOv8遇到的問題

---

## 說明

目前為了升級PoseFormerV2內的YOLO版本，進行了多方嘗試。雖然尚未成功，不過大致有兩個可行的方向：

### 方向一

一個是根據「[Day-04:從YOLO v4 到 YOLO v3](https://ithelp.ithome.com.tw/articles/10239903?sc=rss.iron&fbclid=IwAR1KODR3d0CU0V4BdDp6sfcmYkLjcClXK7mCTompz-g3hwkKgfOeAFvYp18_aem_AYE5ll8hKLNrg7Oy9DP6jZBj6AuRnhGDoABdmfumEgpHYedxt326iQRo0_5I_5Rbk3UXow8dRng3HtCrFNX-Zcb8)」提出的概念，將PoseFormerV2內的yolov3.weights、yolov3.cfg、darknet.py進行抽換（當前是根據[AlexeyAB](https://github.com/AlexeyAB)提供的YOLOv7進行測試），然而在替換後會出現「找不到darknet.dll」的錯誤，尚不清楚如何排除。

![error-2](https://hackmd.io/_uploads/H1RXDUYg0.png)
（錯誤示意圖）

### 方向二

另一個做法是直接取代PoseFormerV2內的YOLOv3，在外部得出YOLOv8估測的bounding box，再將其導回PoseFormerV2做下一步運算。目前能夠根據下面的程式來得出YOLOv8的bounding box：

#### 程式碼

```python=
from ultralytics import YOLO
import cv2

# 載入模型
model = YOLO('yolov8n.pt')

# 載入影片
video_path = './test.mp4'
cap = cv2.VideoCapture(video_path)

ret = True
# 讀取幀數
while ret:
    ret, frame = cap.read()
    if ret:
        # 偵測及追蹤物體
        results = model.track(frame, persist=True)

        # 繪製結果
        # cv2.rectangle
        # cv2.putText
        frame_ = results[0].plot()

        # 輸出影片
        cv2.imshow('frame', frame_)
        if cv2.waitKey(25) & 0xFF == ord('q'):
            break
```

#### 輸出結果

{%youtube mxrs29ss4kI %}

不過，要將YOLOv8的輸出結果導回PoseFormerv2，需要對PoseFormerv2內的哪些檔案進行修改，目前尚不明朗。
