Ultralytics YOLO27:
Get Started

Các phương pháp và mẹo hay nhất về Machine Learning để huấn luyện model#

Giới thiệu#

Một trong những bước quan trọng nhất khi thực hiện dự án thị giác máy tính là huấn luyện model. Trước khi đến bước này, bạn cần xác định mục tiêu và thu thập, gán nhãn dữ liệu. Sau khi tiền xử lý dữ liệu để đảm bảo dữ liệu sạch và nhất quán, bạn có thể bắt đầu huấn luyện model.

Huấn luyện model là quá trình giúp model nhận diện các mẫu hình ảnh và đưa ra dự đoán từ dữ liệu; quá trình này tác động trực tiếp đến độ chính xác của ứng dụng. Hướng dẫn này trình bày các phương pháp hay nhất, kỹ thuật tối ưu hóa và mẹo khắc phục sự cố để giúp bạn huấn luyện hiệu quả các model thị giác máy tính.



Xem: Mẹo huấn luyện model | Cách xử lý dataset lớn | Batch size, mức sử dụng GPU và Độ chính xác hỗn hợp

Cách huấn luyện model Machine Learning#

Model thị giác máy tính được huấn luyện bằng cách điều chỉnh các tham số bên trong để giảm thiểu lỗi. Ban đầu, model được cung cấp một tập lớn ảnh đã gán nhãn. Model dự đoán nội dung của các ảnh này, sau đó các dự đoán được so sánh với nhãn hoặc nội dung thực tế để tính lỗi. Các lỗi cho biết dự đoán của model sai lệch bao nhiêu so với giá trị thực.

Trong quá trình huấn luyện, model liên tục đưa ra dự đoán, tính lỗi và cập nhật tham số thông qua quy trình gọi là lan truyền ngược. Trong quy trình này, model điều chỉnh các tham số bên trong (weights và bias) để giảm lỗi. Lặp lại chu kỳ này nhiều lần giúp độ chính xác của model dần được cải thiện. Theo thời gian, model học cách nhận diện các mẫu phức tạp như hình dạng, màu sắc và kết cấu.

What is Backpropagation?

Quá trình học này cho phép model thị giác máy tính thực hiện nhiều tác vụ, bao gồm phát hiện đối tượng, phân đoạn instance, phân đoạn ngữ nghĩa và phân loại ảnh. Mục tiêu cuối cùng là tạo ra model có thể khái quát hóa những gì đã học sang các ảnh mới chưa từng thấy, từ đó hiểu chính xác dữ liệu hình ảnh trong các ứng dụng thực tế.

Giờ đã biết những gì diễn ra bên trong khi huấn luyện model, hãy cùng xem xét các điểm cần lưu ý khi huấn luyện model.

Huấn luyện trên dataset lớn#

Có một số khía cạnh cần cân nhắc khi dự định sử dụng dataset lớn để huấn luyện model. Ví dụ: bạn có thể điều chỉnh batch size, kiểm soát mức sử dụng GPU, chọn huấn luyện đa tỷ lệ, v.v. Hãy cùng tìm hiểu chi tiết từng tùy chọn.

Batch size và mức sử dụng GPU#

Khi huấn luyện model trên dataset lớn, việc sử dụng GPU hiệu quả là yếu tố then chốt. Batch size là một yếu tố quan trọng, biểu thị số lượng mẫu dữ liệu mà model Machine Learning xử lý trong một iteration huấn luyện. Sử dụng batch size lớn nhất mà GPU hỗ trợ giúp khai thác tối đa khả năng của GPU và giảm thời gian huấn luyện model. Tuy nhiên, cần tránh để GPU hết bộ nhớ. Nếu gặp lỗi bộ nhớ, hãy giảm dần batch size cho đến khi model huấn luyện ổn định.



Xem: Cách sử dụng batch inference với Ultralytics YOLO26 | Tăng tốc phát hiện đối tượng trong Python 🎉

Đối với YOLO26, bạn có thể đặt tham số batch trong các đối số của chế độ huấn luyện để phù hợp với khả năng của GPU. Trên một bộ tăng tốc duy nhất, batch=-1 thực hiện profiling model và chọn batch size hướng đến mức sử dụng bộ nhớ khoảng 60%; một tỷ lệ như batch=0.70 hướng đến mức sử dụng bộ nhớ khác. Các lượt chạy nhiều GPU yêu cầu chỉ định tường minh batch size toàn cục là bội số của số lượng thiết bị. Trên CPU và Apple silicon, AutoBatch đưa ra cảnh báo và chuyển sang batch=16.

Huấn luyện trên tập con#

Huấn luyện trên tập con là chiến lược hiệu quả, trong đó model được huấn luyện trên một tập dữ liệu nhỏ hơn nhưng đại diện cho dataset lớn. Phương pháp này có thể tiết kiệm thời gian và tài nguyên, đặc biệt trong giai đoạn phát triển và kiểm thử model ban đầu. Nếu không có nhiều thời gian hoặc đang thử nghiệm các cấu hình model khác nhau, huấn luyện trên tập con là lựa chọn phù hợp.

Với YOLO26, bạn có thể dễ dàng triển khai huấn luyện trên tập con bằng tham số fraction. Dùng tỷ lệ như fraction=0.1 để chọn 10% dữ liệu huấn luyện, số nguyên như fraction=300 để chọn chính xác 300 ảnh huấn luyện, hoặc danh sách [train, val, test] như fraction=[300, 100, 0] để giới hạn từng split và bỏ qua ảnh kiểm thử. Danh sách gồm hai phần tử như [300, 100] sẽ giữ nguyên toàn bộ split kiểm thử. Dataset NDJSON chọn đều các bản ghi trước khi tải xuống, nhờ đó các lần chạy lặp lại sử dụng đúng cùng một tập con. Kỹ thuật này hỗ trợ lặp và tinh chỉnh nhanh trước khi chuyển sang dùng toàn bộ dataset.

Huấn luyện đa tỷ lệ#

Huấn luyện đa tỷ lệ là kỹ thuật cải thiện khả năng khái quát hóa của model bằng cách huấn luyện trên ảnh có kích thước khác nhau. Model có thể học cách phát hiện đối tượng ở các tỷ lệ và khoảng cách khác nhau, nhờ đó trở nên mạnh mẽ hơn.

Ví dụ: khi huấn luyện YOLO26, bạn có thể bật tăng cường scale bằng cách đặt tham số scale. Tham số này điều chỉnh kích thước ảnh huấn luyện theo một hệ số xác định, mô phỏng các đối tượng ở khoảng cách khác nhau. Chẳng hạn, đặt scale=0.5 sẽ phóng to ngẫu nhiên ảnh huấn luyện theo hệ số từ 0,5 đến 1,5 trong quá trình huấn luyện. Cấu hình tham số này giúp model tiếp xúc với nhiều tỷ lệ ảnh khác nhau và cải thiện khả năng phát hiện ở các kích thước đối tượng cũng như tình huống khác nhau.

Ultralytics cũng hỗ trợ huấn luyện đa tỷ lệ theo kích thước ảnh thông qua tham số multi_scale. Khác với scale, vốn phóng to ảnh rồi padding/crop về imgsz, multi_scale thay đổi chính imgsz ở mỗi batch (được làm tròn theo stride của model). Ví dụ, với imgsz=640 và multi_scale=0.25, kích thước huấn luyện được lấy mẫu từ 480 đến 800 theo các bước stride (ví dụ: 480, 512, 544, ..., 800), trong khi multi_scale=0.0 giữ kích thước cố định.

Caching#

Caching là kỹ thuật quan trọng giúp tăng hiệu quả huấn luyện model Machine Learning. Lưu ảnh đã tiền xử lý trong bộ nhớ giúp giảm thời gian GPU chờ dữ liệu được tải từ đĩa. Model có thể liên tục nhận dữ liệu mà không bị chậm trễ do các thao tác I/O trên đĩa.

Có thể kiểm soát caching khi huấn luyện YOLO26 bằng tham số cache:

  • cache=True: Lưu ảnh dataset trong RAM, cho tốc độ truy cập nhanh nhất nhưng làm tăng mức sử dụng bộ nhớ.
  • cache='disk': Lưu ảnh trên đĩa, chậm hơn RAM nhưng nhanh hơn tải dữ liệu mới mỗi lần.
  • cache=False: Tắt caching, hoàn toàn dựa vào I/O trên đĩa; đây là tùy chọn chậm nhất.

Huấn luyện với độ chính xác hỗn hợp#

Huấn luyện với độ chính xác hỗn hợp sử dụng cả kiểu số dấu phẩy động 16-bit (FP16) và 32-bit (FP32). Phương pháp này tận dụng ưu điểm của cả FP16 lẫn FP32: dùng FP16 để tính toán nhanh hơn và FP32 để duy trì độ chính xác khi cần. Hầu hết phép toán của mạng nơ-ron được thực hiện bằng FP16 nhằm tăng tốc tính toán và giảm mức sử dụng bộ nhớ. Tuy nhiên, một bản sao master của weights model được giữ ở FP32 để đảm bảo độ chính xác trong các bước cập nhật weights. Nhờ vậy, bạn có thể xử lý model lớn hơn hoặc batch size lớn hơn trong cùng giới hạn phần cứng.

Mixed precision FP16 training benefits

Để triển khai huấn luyện với độ chính xác hỗn hợp, bạn cần sửa đổi script huấn luyện và đảm bảo phần cứng (chẳng hạn GPU) hỗ trợ tính năng này. Nhiều framework deep learning hiện đại như PyTorch và TensorFlow có hỗ trợ sẵn độ chính xác hỗn hợp.

Huấn luyện với độ chính xác hỗn hợp rất đơn giản khi dùng YOLO26: AMP đã được bật theo mặc định (amp=True). Trên GPU CUDA, YOLO kiểm tra khả năng hỗ trợ một lần khi bắt đầu huấn luyện và chuyển về FP32 hoàn toàn nếu kiểm tra thất bại; trên CPU và Apple silicon, AMP được bỏ qua hoàn toàn. Đặt amp=False để buộc dùng FP32.

Weights pretrained#

Sử dụng weights pretrained là cách hiệu quả để tăng tốc quá trình huấn luyện model. Weights pretrained lấy từ các model đã được huấn luyện trên dataset lớn, tạo lợi thế ban đầu cho model của bạn. Transfer learning điều chỉnh model pretrained cho các tác vụ mới có liên quan. Fine-tune model pretrained nghĩa là bắt đầu từ các weights này rồi tiếp tục huấn luyện trên dataset cụ thể của bạn. Phương pháp này rút ngắn thời gian huấn luyện và thường mang lại hiệu năng tốt hơn vì model đã có nền tảng hiểu biết vững chắc về các đặc trưng cơ bản.

Weights pretrained được chỉ định bằng đối số model, vì vậy model=yolo26n.pt đã bắt đầu từ weights COCO. Tham số pretrained kiểm soát việc giữ nguyên các weights đó (True, mặc định), loại bỏ chúng (False) hay thay bằng checkpoint khác (pretrained=path/to/best.pt). Đặt pretrained=True trên model *.yaml không tự tải weights. Xem Cách fine-tune YOLO trên dataset tùy chỉnh để biết toàn bộ quy trình transfer learning.

Các kỹ thuật khác cần cân nhắc khi xử lý dataset lớn#

Có một vài kỹ thuật khác cần cân nhắc khi xử lý dataset lớn:

  • Bộ lập lịch learning rate: Triển khai bộ lập lịch learning rate để điều chỉnh learning rate linh hoạt trong quá trình huấn luyện. Learning rate được tinh chỉnh tốt có thể ngăn model vượt quá các điểm cực tiểu và cải thiện độ ổn định. Khi huấn luyện YOLO26, tham số lrf giúp quản lý lịch learning rate bằng cách đặt learning rate cuối cùng theo tỷ lệ của learning rate ban đầu. Với các hành vi không có đối số tương ứng, chẳng hạn learning rate theo từng layer hoặc gradient clipping, hãy tạo subclass của trainer.
  • Huấn luyện phân tán: Khi xử lý dataset lớn, huấn luyện phân tán có thể tạo ra khác biệt đáng kể. Bạn có thể rút ngắn thời gian huấn luyện bằng cách phân bổ khối lượng công việc trên nhiều GPU hoặc máy. Cách tiếp cận này đặc biệt hữu ích cho các dự án quy mô doanh nghiệp có tài nguyên tính toán đáng kể.
  • Định dạng bộ nhớ channels-last: Huấn luyện CUDA tự động dùng bố cục bộ nhớ NHWC nhanh hơn trên PyTorch 1.11 trở lên, ngoại trừ Windows, nơi bố cục này được đo là chậm hơn. Đặt channels_last=True để buộc dùng định dạng này hoặc channels_last=False để giữ NCHW; PyTorch 1.10 trở xuống, CPU và MPS mặc định vẫn dùng NCHW.

Số epoch cần huấn luyện#

Khi huấn luyện model, epoch là một lượt duyệt hoàn chỉnh qua toàn bộ dataset huấn luyện. Trong một epoch, model xử lý mỗi mẫu trong tập huấn luyện một lần và cập nhật tham số dựa trên thuật toán học. Thường cần nhiều epoch để model học và tinh chỉnh tham số theo thời gian.

Một câu hỏi thường gặp là nên huấn luyện model trong bao nhiêu epoch. Điểm khởi đầu hợp lý là 300 epoch. Nếu model overfit sớm, bạn có thể giảm số epoch. Nếu sau 300 epoch vẫn chưa xảy ra overfitting, bạn có thể kéo dài quá trình huấn luyện lên 600, 1200 hoặc nhiều epoch hơn.

Tuy nhiên, số epoch lý tưởng có thể thay đổi tùy theo kích thước dataset và mục tiêu dự án. Dataset lớn hơn có thể cần nhiều epoch hơn để model học hiệu quả, trong khi dataset nhỏ hơn có thể cần ít epoch hơn để tránh overfitting. Với YOLO26, bạn có thể đặt tham số epochs trong script huấn luyện.

Dừng sớm#

Dừng sớm là kỹ thuật hữu ích để tối ưu hóa quá trình huấn luyện model. Bằng cách theo dõi hiệu năng validation, bạn có thể dừng huấn luyện khi model không còn cải thiện. Cách này giúp tiết kiệm tài nguyên tính toán và ngăn overfitting.

Quy trình này sử dụng tham số patience để xác định số epoch cần chờ cải thiện metric validation trước khi dừng huấn luyện. Nếu hiệu năng model không cải thiện trong số epoch này, quá trình huấn luyện sẽ dừng để tránh lãng phí thời gian và tài nguyên.

Early stopping to prevent model overfitting

Với YOLO26, bạn có thể bật dừng sớm bằng cách đặt tham số patience trong cấu hình huấn luyện. Ví dụ, patience=5 nghĩa là quá trình huấn luyện sẽ dừng nếu metric validation không cải thiện trong 5 epoch liên tiếp. Phương pháp này giúp quy trình huấn luyện luôn hiệu quả và đạt hiệu năng tối ưu mà không cần tính toán quá mức.

Chọn huấn luyện trên cloud hay máy cục bộ#

Có hai lựa chọn để huấn luyện model: huấn luyện trên cloud và huấn luyện cục bộ.

Huấn luyện trên cloud cung cấp khả năng mở rộng và phần cứng mạnh mẽ, rất phù hợp để xử lý các tập dữ liệu lớn và model phức tạp. Các nền tảng như Google Cloud, AWS và Azure cung cấp quyền truy cập theo yêu cầu vào GPU và TPU hiệu năng cao, rút ngắn thời gian huấn luyện và cho phép thử nghiệm với các model lớn hơn. Tuy nhiên, huấn luyện trên cloud có thể tốn kém, đặc biệt khi sử dụng trong thời gian dài; việc truyền dữ liệu cũng làm tăng chi phí và độ trễ.

Huấn luyện cục bộ mang lại khả năng kiểm soát và tùy chỉnh cao hơn, cho phép bạn điều chỉnh môi trường theo nhu cầu cụ thể và tránh chi phí cloud định kỳ. Phương pháp này có thể tiết kiệm hơn đối với các dự án dài hạn; đồng thời, vì dữ liệu luôn nằm tại chỗ nên cũng an toàn hơn. Tuy nhiên, phần cứng cục bộ có thể bị giới hạn tài nguyên và cần bảo trì, dẫn đến thời gian huấn luyện lâu hơn với các model lớn.

Chọn optimizer#

Optimizer là một thuật toán điều chỉnh trọng số của neural network để giảm thiểu hàm loss, vốn đo lường mức độ hoạt động của model. Nói đơn giản, optimizer giúp model học bằng cách tinh chỉnh các tham số để giảm lỗi. Việc chọn optimizer phù hợp ảnh hưởng trực tiếp đến tốc độ và độ chính xác khi model học.

Bạn cũng có thể tinh chỉnh các tham số của optimizer để cải thiện hiệu năng model. Điều chỉnh learning rate sẽ xác định kích thước các bước khi cập nhật tham số. Để đảm bảo độ ổn định, bạn có thể bắt đầu với learning rate vừa phải rồi giảm dần theo thời gian nhằm cải thiện khả năng học lâu dài. Ngoài ra, thiết lập momentum sẽ xác định mức độ ảnh hưởng của các lần cập nhật trước đến lần cập nhật hiện tại. Giá trị momentum phổ biến là khoảng 0.9, thường mang lại sự cân bằng tốt.

Các optimizer phổ biến#

Các optimizer khác nhau có những ưu điểm và nhược điểm riêng. Hãy cùng điểm qua một số optimizer phổ biến.

  • SGD (Hạ gradient ngẫu nhiên):

    • Cập nhật các tham số của model bằng gradient của hàm loss theo các tham số đó.
    • Đơn giản và hiệu quả, nhưng có thể hội tụ chậm và mắc kẹt tại các cực tiểu cục bộ.
  • Adam (Ước lượng moment thích nghi):

    • Kết hợp ưu điểm của cả SGD có momentum và RMSProp.
    • Điều chỉnh learning rate cho từng tham số dựa trên ước lượng moment bậc nhất và bậc hai của gradient.
    • Phù hợp với dữ liệu nhiễu và gradient thưa.
    • Hiệu quả và thường cần ít tinh chỉnh hơn. Với các lần huấn luyện ngắn, optimizer=auto của YOLO26 chọn AdamW có liên quan chặt chẽ thay vì chính Adam.
  • RMSProp (Lan truyền căn trung bình bình phương):

    • Điều chỉnh learning rate cho từng tham số bằng cách chia gradient cho trung bình trượt độ lớn của các gradient gần đây.
    • Giúp xử lý vấn đề gradient biến mất và có hiệu quả với recurrent neural network.
  • MuSGD (Kết hợp Muon + SGD):

    • Kết hợp các bước cập nhật kiểu SGD với cơ chế lấy cảm hứng từ Muon để cải thiện độ ổn định khi huấn luyện quy mô lớn.
    • Là lựa chọn phù hợp khi bạn muốn khả năng tổng quát hóa như SGD nhưng cần hội tụ mượt hơn SGD thuần.
    • Đặc biệt phù hợp với các cấu hình huấn luyện YOLO26; nếu chưa chắc, hãy bắt đầu với optimizer=auto rồi so sánh với MuSGD trên tập dữ liệu của bạn.

Với YOLO26, tham số optimizer cho phép bạn chọn trong số nhiều optimizer, bao gồm SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam và RMSProp; bạn cũng có thể đặt tham số này thành auto để tự động chọn dựa trên số vòng lặp huấn luyện.

yolo train model=yolo26n.pt data=coco8.yaml optimizer=MuSGD

Kết nối với cộng đồng#

Tham gia cộng đồng những người đam mê computer vision có thể giúp bạn giải quyết vấn đề và học nhanh hơn. Sau đây là một số cách để kết nối, nhận trợ giúp và chia sẻ ý tưởng.

Tài nguyên cộng đồng#

  • GitHub Issues: Truy cập repository YOLO26 trên GitHub và dùng tab Issues để đặt câu hỏi, báo lỗi và đề xuất tính năng mới. Cộng đồng và đội ngũ duy trì dự án rất tích cực, luôn sẵn sàng trợ giúp.
  • Máy chủ Discord của Ultralytics: Tham gia máy chủ Discord của Ultralytics để trò chuyện với người dùng và developer khác, nhận hỗ trợ và chia sẻ trải nghiệm.

Tài liệu chính thức#

  • Tài liệu Ultralytics YOLO26: Xem tài liệu YOLO26 chính thức để tìm các hướng dẫn chi tiết và mẹo hữu ích cho nhiều dự án computer vision.

Sử dụng những tài nguyên này sẽ giúp bạn giải quyết thách thức và cập nhật các xu hướng, phương pháp mới nhất trong cộng đồng computer vision.

Điểm chính cần lưu ý#

Huấn luyện model computer vision đòi hỏi tuân thủ các phương pháp tốt, tối ưu chiến lược và giải quyết vấn đề khi phát sinh. Các kỹ thuật như điều chỉnh batch size, huấn luyện với độ chính xác hỗn hợp và bắt đầu bằng trọng số pretrained có thể giúp model hoạt động tốt hơn và huấn luyện nhanh hơn. Các phương pháp như huấn luyện trên tập con và dừng sớm giúp tiết kiệm thời gian và tài nguyên. Duy trì kết nối với cộng đồng và cập nhật xu hướng mới sẽ giúp bạn không ngừng nâng cao kỹ năng huấn luyện model.

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

  • Để cải thiện mức sử dụng GPU, hãy đặt tham số batch thành kích thước tối đa mà GPU hỗ trợ. Trên một accelerator đơn, batch=-1 phân tích model và nhắm đến mức sử dụng bộ nhớ khoảng 60%. Tham số này chuyển sang batch=16 trên CPU và Apple silicon; trong khi đó, các lần chạy nhiều GPU cần batch size toàn cục được chỉ định rõ và là bội số của số thiết bị. Để biết thêm thông tin, hãy tham khảo các đối số của chế độ Train.

  • Huấn luyện với độ chính xác hỗn hợp sử dụng cả kiểu dấu phẩy động 16-bit (FP16) và 32-bit (FP32) để cân bằng tốc độ tính toán với độ chính xác. Trong YOLO26, tính năng này được bật mặc định thông qua amp=True; đặt amp=False để buộc sử dụng FP32. AMP không được áp dụng trên CPU và Apple silicon. Để biết thêm chi tiết, hãy xem các đối số của chế độ Train.

  • Huấn luyện đa tỷ lệ cải thiện hiệu năng model bằng cách huấn luyện trên ảnh có nhiều kích thước khác nhau, giúp model tổng quát hóa tốt hơn với các tỷ lệ và khoảng cách khác nhau. YOLO26 cung cấp hai tham số riêng cho tính năng này. scale=0.5 lấy mẫu hệ số zoom trong khoảng 0.5 đến 1.5, sau đó đệm hoặc cắt ảnh về imgsz cố định; còn multi_scale=0.25 thay đổi chính imgsz theo từng batch, với bước bằng stride. Để xem các thiết lập và biết thêm chi tiết, hãy tham khảo tài liệu chế độ Train.

  • Sử dụng trọng số pretrained có thể tăng tốc đáng kể quá trình huấn luyện và cải thiện độ chính xác của model bằng cách tận dụng một model đã nhận diện được các đặc trưng hình ảnh nền tảng. Nạp trọng số qua đối số model, chẳng hạn như model=yolo26n.pt; sau đó, pretrained sẽ quyết định giữ lại các trọng số đó (True, mặc định), loại bỏ chúng (False) hay thay bằng checkpoint khác (pretrained=path/to/best.pt, cách chuyển trọng số sang bản dựng model=*.yaml). Tìm hiểu thêm trong tài liệu chế độ Train.

Bình luận