返回首頁

GitHub Repo

Ultralytics 8.4.160 修補標註快取漏更新,OOM 重試保留優化器狀態

新版讓等長標註修改也能觸發資料重新掃描,並避免縮小批次時清空優化器狀態。保留大小與修改時間的檔案仍可能漏查,重試也仍會重跑該訓練週期。

Internet Archive Book Images · No restrictions · Image source
zh-Hant

Ultralytics 於 9 月 22 日發布 8.4.160,修正資料標註已變更、訓練卻沿用舊快取的問題,並調整記憶體不足後自動縮小批次的恢復流程。GitHub 正式版本與 PyPI 套件均已上線;這批變更影響訓練資料與狀態的一致性。[版本公告](https://github.com/ultralytics/ultralytics/releases/tag/v8.4.160)、[PyPI 發布紀錄](https://pypi.org/project/ultralytics/8.4.160/)

快取問題有很直接的觸發方式:把 YOLO 標籤的類別由 0 改成 1,檔案長度保持相同。舊版以路徑與檔案大小總和產生快取鍵,因此修改後仍可能命中原有快取。提交者以單張影像資料集重現,第二次載入仍取得類別 0;套用修補後才重新掃描並取得類別 1。[修補說明](https://github.com/ultralytics/ultralytics/pull/26283)

新版共用函式 `get_hash` 逐一納入路徑、個別檔案大小與奈秒修改時間,再計算 SHA-256;它檢查的是檔案中繼資料,沒有讀取全文計算內容雜湊。官方文件已呈現這項實作。偵測、深度與語意等使用共用函式的資料快取都受影響,既有快取升級後會重新掃描一次。[函式文件](https://docs.ultralytics.com/reference/data/utils/)、[適用範圍](https://github.com/ultralytics/ultralytics/pull/26283)

同版另一項修補處理首個訓練週期中的 OOM 重試。舊流程重建資料載入器時也重建優化器,可能丟失已累積的動量、自適應統計,甚至從檢查點恢復的狀態。現在只有優化器尚未存在時才建立它與學習率排程器;縮小批次後重用原物件,並重新計算相關權重衰減係數。[訓練狀態修補](https://github.com/ultralytics/ultralytics/pull/26284)

兩項修補仍有明確邊界。若資料同步工具同時保留檔案大小與修改時間,快取依然可能漏掉內容變更,須手動移除受影響快取。OOM 恢復則仍會重新執行該訓練週期;保留優化器不代表能從失敗批次精確接續。提交者回報了強制觸發 OOM 的本機驗證,但專用回歸測試後來被維護者移出該 PR。[快取限制](https://github.com/ultralytics/ultralytics/pull/26283)、[重試與驗證紀錄](https://github.com/ultralytics/ultralytics/pull/26284)

從工程角度看,反覆修訂標註或接續訓練的團隊,應以已知類別變更確認快取重建,並抽查 OOM 前後的動量與學習率。首次重新掃描的時間也應納入排程,避免把升級後的資料讀取開銷誤判為訓練效能退步。舊快取可能已影響哪些訓練產物,仍須對照資料版本及執行紀錄追查;升級本身不會修復先前完成的模型。

來源

  1. Ultralytics v8.4.160 release
  2. Invalidate dataset caches when files are edited in place — PR #26283
  3. Preserve optimizer state when OOM auto-reduces batch size — PR #26284
  4. ultralytics 8.4.160
  5. data.utils API Reference