Ultralytics YOLO27:
Get Started

Khắc phục các sự cố YOLO thường gặp#

YOLO common training and deployment issues

Hướng dẫn này đề cập đến những vấn đề thường gặp nhất khi làm việc với Ultralytics YOLO26, được nhóm theo giai đoạn phát sinh: cài đặt, huấn luyện model, dự đoán và triển khai. Chuyển đến danh mục phù hợp với lỗi của bạn hoặc xem qua FAQ để tìm câu trả lời nhanh. Mỗi mục nêu rõ vấn đề và cách khắc phục cụ thể mà bạn có thể áp dụng trực tiếp.



Xem: Các vấn đề thường gặp với Ultralytics YOLO26 | Lỗi cài đặt, sự cố huấn luyện model

Các sự cố thường gặp#

Lỗi cài đặt#

Lỗi cài đặt có thể phát sinh do nhiều nguyên nhân, chẳng hạn như phiên bản không tương thích, thiếu dependency hoặc cấu hình môi trường không chính xác. Trước tiên, hãy kiểm tra xem bạn có thực hiện những việc sau không:

  • Bạn đang sử dụng Python 3.8 trở lên như khuyến nghị.
  • Đảm bảo bạn đã cài đặt đúng phiên bản PyTorch (1.8 trở lên).
  • Cân nhắc sử dụng môi trường ảo để tránh xung đột.
  • Làm theo từng bước trong hướng dẫn cài đặt chính thức.

Ngoài ra, dưới đây là các giải pháp cho những vấn đề cài đặt thường gặp.

Luôn cập nhật Ultralytics và các dependency

Nhiều lỗi import, GPU và export có thể được khắc phục chỉ bằng cách nâng cấp. Chạy pip install -U ultralytics và xác nhận phiên bản PyTorch, CUDA tương thích trước khi tiến hành gỡ lỗi sâu hơn.

Lỗi import hoặc vấn đề về dependency#

Nếu gặp lỗi khi import YOLO26 hoặc xung đột dependency, hãy thử các bước sau:

  • Cài đặt mới: Bắt đầu bằng một lần cài đặt sạch có thể giải quyết các vấn đề ngoài dự kiến, đặc biệt là sau những bản cập nhật làm thay đổi cấu trúc hoặc chức năng của package.
  • Cập nhật thường xuyên: Sử dụng phiên bản thư viện mới nhất, vì các bản phát hành cũ hơn có thể không tương thích với những cập nhật gần đây.
  • Kiểm tra dependency: Xác minh tất cả dependency bắt buộc đã được cài đặt chính xác và có phiên bản tương thích.
  • Xem lại các thay đổi: Nếu bạn đã cài đặt phiên bản cũ, hãy tham khảo tài liệu chính thức hoặc changelog để hiểu những thay đổi lớn về cấu trúc.

Chạy YOLO26 trên GPU#

Nếu gặp sự cố khi chạy YOLO26 trên GPU, hãy cân nhắc các bước khắc phục sau:

  • Xác minh khả năng tương thích và cài đặt CUDA: Đảm bảo GPU của bạn tương thích với CUDA và CUDA đã được cài đặt chính xác. Sử dụng lệnh nvidia-smi để kiểm tra trạng thái GPU NVIDIA và phiên bản CUDA.
  • Kiểm tra tích hợp PyTorch và CUDA: Đảm bảo PyTorch có thể sử dụng CUDA bằng cách chạy import torch; print(torch.cuda.is_available()) trong terminal Python. Nếu lệnh trả về 'True', PyTorch đã được thiết lập để sử dụng CUDA.
  • Kích hoạt môi trường: Đảm bảo bạn đang ở đúng môi trường, nơi đã cài đặt tất cả package cần thiết.
  • Cập nhật package: Package lỗi thời có thể không tương thích với GPU của bạn. Hãy luôn cập nhật chúng.
  • Cấu hình chương trình: Kiểm tra xem code của bạn có yêu cầu sử dụng GPU hay không. Bạn có thể đặt đối số device khi chạy huấn luyện hoặc dự đoán (ví dụ: device=0).
GPU đời cũ và cuDNN 9.11.0+

Hỗ trợ cho các kiến trúc GPU đời trước Turing — compute capability (SM) dưới 7.5, chẳng hạn như 1080 Ti — đã bị loại bỏ trong cuDNN 9.11.0. Trên GPU đời cũ, bạn có thể cần bản PyTorch được biên dịch với phiên bản CUDA/cuDNN cũ hơn. Kiểm tra cấu hình của bạn bằng lệnh sau:

import torch

cap = torch.cuda.get_device_capability(0) if torch.cuda.is_available() else (0, 0)
cudnn = torch.backends.cudnn.version() or 0
ok = "not compatible" if cudnn >= 91100 and (cap[0] < 7 or (cap[0] == 7 and cap[1] < 5)) else "should be ok"
print(f"Compute capability: SM {cap[0]}.{cap[1]}, cuDNN: {cudnn} => {ok}")

Sự cố khi huấn luyện model#

Dưới đây là các vấn đề huấn luyện thường gặp và cách khắc phục.

Xác minh các thiết lập cấu hình#

Vấn đề: Bạn không chắc các thiết lập cấu hình trong file .yaml có được áp dụng chính xác trong quá trình huấn luyện model hay không.

Giải pháp: Thiết lập dataset và thiết lập huấn luyện nằm trong các file .yaml khác nhau và được truyền qua các đối số khác nhau của model.train(). Để đảm bảo các thiết lập này được áp dụng chính xác, hãy thực hiện các bước sau:

  • Xác nhận đường dẫn đến các file .yaml của bạn là chính xác.

  • Truyền .yaml của dataset (đường dẫn, tên class, các tập dữ liệu) làm đối số data, và file .yaml chứa thiết lập huấn luyện tùy chỉnh (ví dụ: epochs hoặc lr0) làm đối số cfg. Các đối số được truyền trực tiếp vào model.train() sẽ được ưu tiên hơn cả hai:

    model.train(data="/path/to/your/data.yaml", cfg="/path/to/your/cfg.yaml", batch=4)

Tăng tốc huấn luyện bằng nhiều GPU#

Vấn đề: Huấn luyện trên một GPU chậm và bạn muốn tăng tốc quá trình bằng nhiều GPU.

Giải pháp: Tăng batch size có thể tăng tốc huấn luyện, nhưng cần cân nhắc dung lượng bộ nhớ GPU. Để tăng tốc huấn luyện bằng nhiều GPU, hãy thực hiện các bước sau:

  • Đảm bảo bạn có nhiều GPU khả dụng.

  • Đặt đối số device thành danh sách chỉ số GPU, ví dụ: device=[0,1,2,3].

  • Tăng batch size tương ứng để tận dụng tối đa nhiều GPU mà không vượt quá giới hạn bộ nhớ.

  • Chỉnh sửa lệnh huấn luyện để sử dụng nhiều GPU:

    # # Điều chỉnh batch size và các thiết lập khác nếu cần để tối ưu tốc độ huấn luyện
    model.train(data="/path/to/your/data.yaml", batch=32, device=[0, 1, 2, 3])

Các tham số cần theo dõi liên tục#

Vấn đề: Bạn muốn biết cần theo dõi liên tục những tham số nào trong quá trình huấn luyện ngoài loss.

Giải pháp: Loss là metric quan trọng cần theo dõi, nhưng việc theo dõi các metric khác để tối ưu hiệu năng model cũng rất cần thiết. Một số metric quan trọng cần theo dõi trong quá trình huấn luyện gồm:

Bạn có thể truy cập các metric này từ log huấn luyện hoặc sử dụng các công cụ như TensorBoard hay Weights & Biases để trực quan hóa. Áp dụng early stopping dựa trên các metric này có thể giúp bạn đạt kết quả tốt hơn.

Công cụ theo dõi tiến độ huấn luyện#

Vấn đề: Bạn đang tìm kiếm đề xuất về các công cụ theo dõi tiến độ huấn luyện.

Giải pháp: Để theo dõi và trực quan hóa tiến độ huấn luyện, bạn có thể cân nhắc sử dụng các công cụ sau:

  • TensorBoard: TensorBoard là lựa chọn phổ biến để trực quan hóa các metric huấn luyện, bao gồm loss, độ chính xác và nhiều metric khác. Bạn có thể tích hợp TensorBoard vào quy trình huấn luyện YOLO26.
  • Comet: Comet cung cấp bộ công cụ toàn diện để theo dõi và so sánh thí nghiệm. Comet cho phép bạn theo dõi metric, hyperparameter và cả trọng số model. Comet cũng dễ dàng tích hợp với các model YOLO, giúp bạn có cái nhìn tổng quan đầy đủ về chu kỳ thí nghiệm.
  • Nền tảng Ultralytics: Ultralytics Platform cung cấp môi trường chuyên biệt để theo dõi model YOLO, mang đến một nền tảng duy nhất để quản lý metric, dataset và cộng tác với nhóm. Với trọng tâm chuyên biệt vào YOLO, nền tảng này cung cấp các tùy chọn theo dõi được tùy chỉnh hơn.

Cách kiểm tra quá trình huấn luyện có đang chạy trên GPU hay không#

Vấn đề: Giá trị 'device' trong log huấn luyện là 'null' và bạn không chắc quá trình huấn luyện có đang chạy trên GPU hay không.

Giải pháp: Giá trị 'device' là 'null' thường có nghĩa là quá trình huấn luyện được thiết lập để tự động chọn GPU khả dụng; đây là hành vi mặc định. Để huấn luyện trên một GPU cụ thể, hãy đặt đối số device khi bắt đầu huấn luyện. device là đối số huấn luyện, vì vậy đặt đối số này trong .yaml của dataset sẽ không có tác dụng:

from ultralytics import YOLO

# Tải model
model = YOLO("yolo26n.pt")

# # Sử dụng GPU 0; device=[0, 1] cho nhiều GPU, device="cpu" cho CPU
model.train(data="path/to/data.yaml", device=0)

Theo dõi thư mục 'runs' để xem log và metric nhằm giám sát hiệu quả tiến độ huấn luyện.

Những điểm cần lưu ý để huấn luyện model hiệu quả#

Dưới đây là một số điều cần ghi nhớ nếu bạn đang gặp vấn đề liên quan đến huấn luyện model.

Định dạng dataset và nhãn

  • Tầm quan trọng: Nền tảng của mọi model machine learning nằm ở chất lượng và định dạng của dữ liệu dùng để huấn luyện model.
  • Khuyến nghị: Đảm bảo dataset tùy chỉnh và các nhãn đi kèm tuân theo định dạng yêu cầu. Điều quan trọng là phải xác minh các annotation chính xác và có chất lượng cao. Annotation không chính xác hoặc kém chất lượng có thể làm chệch hướng quá trình học của model, dẫn đến kết quả khó dự đoán.

Hội tụ của model

  • Tầm quan trọng: Đạt được sự hội tụ của model đảm bảo model đã học đầy đủ từ dữ liệu huấn luyện.
  • Khuyến nghị: Khi huấn luyện model 'từ đầu', điều quan trọng là đảm bảo model đạt mức hội tụ thỏa đáng. So với việc fine-tune một model hiện có, quá trình này có thể cần thời gian huấn luyện lâu hơn, với nhiều epoch hơn.

Learning Rate và Batch Size

  • Tầm quan trọng: Các hyperparameter này đóng vai trò then chốt trong việc quyết định cách model cập nhật trọng số trong quá trình huấn luyện.
  • Khuyến nghị: Thường xuyên đánh giá xem learning rate và batch size đã chọn có tối ưu cho dataset cụ thể của bạn hay không. Các tham số không phù hợp với đặc điểm của dataset có thể làm giảm hiệu năng của model.

Phân bố class

  • Tầm quan trọng: Phân bố class trong dataset có thể ảnh hưởng đến xu hướng dự đoán của model.
  • Khuyến nghị: Thường xuyên đánh giá phân bố class trong dataset. Nếu dữ liệu mất cân bằng giữa các class, model có nguy cơ thiên lệch về class xuất hiện nhiều hơn. Có thể thấy rõ thiên lệch này trong ma trận nhầm lẫn, khi model chủ yếu dự đoán class chiếm đa số.

Đối chiếu với trọng số pretrained

  • Tầm quan trọng: Tận dụng pretrained weights có thể tạo điểm khởi đầu vững chắc cho quá trình huấn luyện model, đặc biệt khi dữ liệu còn hạn chế.
  • Khuyến nghị: Để chẩn đoán, hãy cân nhắc huấn luyện model bằng cùng một bộ dữ liệu nhưng khởi tạo bằng pretrained weights. Nếu cách này tạo ra confusion matrix có cấu trúc tốt, điều đó có thể cho thấy model được huấn luyện “from scratch” cần được huấn luyện thêm hoặc điều chỉnh.

Dưới đây là các vấn đề thường gặp khi dự đoán bằng model và cách khắc phục.

Lấy dự đoán bounding box bằng model YOLO26 tùy chỉnh#

Vấn đề: Khi chạy dự đoán bằng model YOLO26 tùy chỉnh, bạn có thể gặp khó khăn với định dạng và cách hiển thị tọa độ bounding box.

Giải pháp:

  • Định dạng tọa độ: YOLO26 cung cấp tọa độ bounding box theo giá trị pixel tuyệt đối. Để chuyển đổi sang tọa độ tương đối (trong khoảng từ 0 đến 1), bạn cần chia tọa độ cho kích thước ảnh. Ví dụ, giả sử ảnh của bạn có kích thước 640x640. Khi đó, bạn thực hiện như sau:

    # Chuyển tọa độ tuyệt đối thành tọa độ tương đối
    x1 = x1 / 640  # Chia tọa độ x cho chiều rộng ảnh
    x2 = x2 / 640
    y1 = y1 / 640  # Chia tọa độ y cho chiều cao ảnh
    y2 = y2 / 640
  • Tên tệp: Để lấy tên tệp của ảnh đang được dự đoán, hãy đọc đường dẫn tệp ảnh từ thuộc tính path của từng đối tượng kết quả (ví dụ: result.path) trong vòng lặp dự đoán.

Lọc đối tượng trong dự đoán YOLO26#

Vấn đề: Gặp khó khăn khi lọc và chỉ hiển thị một số đối tượng cụ thể trong kết quả dự đoán khi chạy YOLO26 bằng thư viện Ultralytics.

Giải pháp: Để phát hiện các lớp cụ thể, hãy dùng đối số classes để chỉ định những lớp cần đưa vào đầu ra. Ví dụ: để chỉ phát hiện ô tô (giả sử lớp 'cars' có chỉ số 2):

yolo segment predict model=yolo26n-seg.pt source='path/to/car.mp4' show=True classes=2

Tìm hiểu các chỉ số precision trong YOLO26#

Vấn đề: Nhầm lẫn về sự khác biệt giữa precision của box, precision của mask và precision của confusion matrix trong YOLO26.

Giải pháp: Precision của box đo độ chính xác của bounding box dự đoán so với bounding box ground truth thực tế, sử dụng IoU (Intersection over Union) làm chỉ số. Precision của mask đánh giá mức độ khớp giữa mask phân đoạn dự đoán và mask ground truth trong phân loại đối tượng theo từng pixel. Trong khi đó, precision của confusion matrix tập trung vào độ chính xác phân loại tổng thể trên tất cả các lớp và không xét đến độ chính xác hình học của dự đoán. Cần lưu ý rằng bounding box có thể chính xác về mặt hình học (true positive) ngay cả khi dự đoán lớp sai, dẫn đến sự khác biệt giữa precision của box và precision của confusion matrix. Các chỉ số này đánh giá những khía cạnh riêng biệt về hiệu năng của model, cho thấy cần dùng các chỉ số đánh giá khác nhau cho từng tác vụ.

Trích xuất kích thước đối tượng trong YOLO26#

Vấn đề: Khó lấy chiều dài và chiều cao của các đối tượng được phát hiện trong YOLO26, đặc biệt khi phát hiện nhiều đối tượng trong một ảnh.

Giải pháp: Để lấy kích thước bounding box, trước tiên hãy dùng model Ultralytics YOLO26 để dự đoán đối tượng trong ảnh. Sau đó, trích xuất thông tin chiều rộng và chiều cao của bounding box từ kết quả dự đoán.

from ultralytics import YOLO

# Load a pretrained YOLO26 model
model = YOLO("yolo26n.pt")

# Specify the source image
source = "https://ultralytics.com/images/bus.jpg"

# Make predictions
results = model.predict(source, save=True, imgsz=320, conf=0.25)

# Extract bounding box dimensions
boxes = results[0].boxes.xywh.cpu()
for box in boxes:
    x, y, w, h = box
    print(f"Width of Box: {w}, Height of Box: {h}")

Thách thức khi triển khai#

Vấn đề khi triển khai trên GPU#

Vấn đề: Việc triển khai model trong môi trường nhiều GPU đôi khi có thể dẫn đến những hành vi bất ngờ, chẳng hạn như mức sử dụng bộ nhớ không như dự kiến, kết quả không nhất quán giữa các GPU, v.v.

Giải pháp: Kiểm tra việc khởi tạo GPU mặc định. Một số framework như PyTorch có thể khởi tạo các thao tác CUDA trên GPU mặc định trước khi chuyển sang GPU được chỉ định. Để tránh việc khởi tạo mặc định ngoài dự kiến, hãy chỉ định trực tiếp GPU khi triển khai và dự đoán. Sau đó, dùng các công cụ để theo dõi mức sử dụng GPU và bộ nhớ nhằm phát hiện bất thường theo thời gian thực. Đồng thời, hãy đảm bảo bạn đang dùng phiên bản mới nhất của framework hoặc thư viện.

Vấn đề khi chuyển đổi/xuất model#

Vấn đề: Trong quá trình chuyển đổi hoặc xuất model machine learning sang các định dạng hay nền tảng khác nhau, người dùng có thể gặp lỗi hoặc hành vi ngoài dự kiến.

Giải pháp: Xem lại các định dạng được hỗ trợ và tùy chọn theo từng định dạng trong tài liệu chế độ Export, sau đó lần lượt kiểm tra các mục sau:

  • Kiểm tra tính tương thích: Đảm bảo bạn đang dùng các phiên bản thư viện và framework tương thích với nhau. Các phiên bản không khớp có thể gây ra lỗi ngoài dự kiến trong quá trình chuyển đổi.
  • Đặt lại môi trường: Nếu đang dùng môi trường tương tác như Jupyter hoặc Colab, hãy cân nhắc khởi động lại môi trường sau khi thực hiện các thay đổi lớn hoặc cài đặt. Khởi động lại từ đầu đôi khi có thể giải quyết các sự cố tiềm ẩn.
  • Tài liệu chính thức: Luôn tham khảo tài liệu chính thức của công cụ hoặc thư viện bạn dùng để chuyển đổi. Tài liệu thường có hướng dẫn cụ thể và các phương pháp tốt nhất để xuất model.
  • Hỗ trợ từ cộng đồng: Kiểm tra kho lưu trữ chính thức của thư viện hoặc framework để tìm các sự cố tương tự do người dùng khác báo cáo. Người duy trì hoặc cộng đồng có thể đã đưa ra giải pháp hay cách khắc phục trong các luồng thảo luận.
  • Cập nhật thường xuyên: Đảm bảo bạn đang dùng phiên bản mới nhất của công cụ hoặc thư viện. Nhà phát triển thường xuyên phát hành bản cập nhật để sửa lỗi đã biết hoặc cải thiện chức năng.
  • Kiểm thử từng bước: Trước khi thực hiện chuyển đổi toàn bộ, hãy thử quy trình với model hoặc tập dữ liệu nhỏ hơn để sớm phát hiện các vấn đề tiềm ẩn.

Cộng đồng và hỗ trợ#

Nhận trợ giúp và chia sẻ giải pháp qua các kênh và tài nguyên sau.

Diễn đàn và kênh hỗ trợ#

GitHub Issues: Repository Ultralytics trên GitHub có tab Issues, nơi bạn có thể đặt câu hỏi, báo lỗi và đề xuất tính năng mới. Cộng đồng và các maintainer thường xuyên hoạt động tại đây, đây cũng là nơi tuyệt vời để nhận trợ giúp cho các vấn đề cụ thể.

Máy chủ Discord của Ultralytics: Ultralytics có máy chủ Discord, nơi bạn có thể trao đổi với những người dùng khác và các nhà phát triển.

Tài liệu và tài nguyên chính thức#

Tài liệu Ultralytics YOLO26: Tài liệu chính thức cung cấp tổng quan toàn diện về YOLO26 cùng hướng dẫn cài đặt, sử dụng và khắc phục sự cố.

Kết luận#

Phần lớn sự cố YOLO26 bắt nguồn từ một số nguyên nhân phổ biến: phiên bản không tương thích, định dạng tập dữ liệu và cấu hình GPU. Nếu gặp lỗi chưa được đề cập ở đây, hãy tìm trong mục GitHub Issues hoặc đặt câu hỏi trên máy chủ Discord — rất có thể đã có người giải quyết vấn đề đó. Nếu gặp vấn đề chuyên sâu hơn về huấn luyện, hãy xem hướng dẫn Mẹo huấn luyện model để tham khảo các lời khuyên thiết thực nhằm đạt kết quả tốt hơn với dự án thị giác máy tính của bạn.

Câu hỏi thường gặp#

  • Lỗi cài đặt thường do vấn đề tương thích hoặc thiếu dependency. Hãy đảm bảo bạn dùng Python 3.8 trở lên và đã cài PyTorch 1.8 trở lên. Nên dùng môi trường ảo để tránh xung đột. Để xem hướng dẫn cài đặt từng bước, hãy làm theo hướng dẫn cài đặt chính thức của chúng tôi. Nếu gặp lỗi import, hãy thử cài đặt lại từ đầu hoặc cập nhật thư viện lên phiên bản mới nhất.

  • Huấn luyện trên một GPU có thể chậm do batch size lớn hoặc không đủ bộ nhớ. Để tăng tốc huấn luyện, hãy dùng nhiều GPU. Đảm bảo hệ thống có nhiều GPU và đặt đối số device, chẳng hạn device=[0,1,2,3]. Tăng batch size tương ứng để tận dụng tối đa GPU mà không vượt quá giới hạn bộ nhớ. Ví dụ lệnh:

    model.train(data="/path/to/your/data.yaml", batch=32, device=[0, 1, 2, 3])
  • Nếu giá trị 'device' hiển thị là 'null' trong log huấn luyện, điều đó thường có nghĩa là quy trình huấn luyện được cấu hình để tự động chọn GPU khả dụng. Để chỉ định rõ một GPU cụ thể, hãy truyền đối số device khi bắt đầu huấn luyện, ví dụ yolo train data=path/to/data.yaml device=0 để chọn GPU đầu tiên. Tham khảo lệnh nvidia-smi để xác nhận cấu hình CUDA.

  • Có thể theo dõi và trực quan hóa tiến độ huấn luyện hiệu quả bằng các công cụ như TensorBoard, Comet và Ultralytics Platform. Các công cụ này cho phép ghi lại và trực quan hóa những chỉ số như loss, precision, recall và mAP. Áp dụng early stopping dựa trên các chỉ số này cũng có thể giúp cải thiện kết quả huấn luyện.

  • Đảm bảo tập dữ liệu và nhãn tuân theo định dạng dự kiến. Kiểm tra để xác nhận annotation chính xác và có chất lượng cao. Nếu gặp vấn đề, hãy tham khảo hướng dẫn Thu thập và gán nhãn dữ liệu để biết các phương pháp tốt nhất. Để được hướng dẫn cụ thể hơn về tập dữ liệu, hãy xem mục Tập dữ liệu trong tài liệu.

Bình luận