Ultralytics YOLO27:

Các phương pháp hay nhất và mẹo về Machine Learning khi training model#

Giới thiệu#

Một trong những bước quan trọng nhất khi làm việc với một dự án computer vision là training model. Trước khi đến bước này, bạn cần xác định mục tiêuthu thập, chú thích 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ể chuyển sang training model.

Training model là quá trình teaching model nhận diện các pattern hình ảnh và đưa ra dự đoán từ dữ liệu của bạn, đồng thời trực tiếp định hình độ 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 training các model computer vision hiệu quả.



Watch: Model Training Tips | How to Handle Large Datasets | Batch Size, GPU Utilization and Mixed Precision

Cách training một model Machine Learning#

Một model computer vision được training 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 hợp lớn các ảnh đã gán nhãn. Model đưa ra dự đoán về nội dung của những ả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 toán lỗi. Những lỗi này cho biết dự đoán của model lệch khỏi giá trị thực bao xa.

Trong quá trình training, model lặp đi lặp lại việc đưa ra dự đoán, tính toán lỗi và cập nhật các tham số thông qua một 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à biases) để giảm lỗi. Bằng cách lặp lại chu kỳ này nhiều lần, model dần cải thiện độ chính xác. Theo thời gian, model học cách nhận diện các pattern phức tạp như hình dạng, màu sắc và texture.

What is Backpropagation?

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

Giờ chúng ta đã biết điều gì diễn ra phía sau khi training một model, hãy cùng xem xét những điểm cần lưu ý khi training model.

Training trên các dataset lớn#

Có một số khía cạnh cần cân nhắc khi bạn dự định sử dụng một dataset lớn để training 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 training đa tỉ lệ, v.v. Hãy cùng xem xét chi tiết từng tùy chọn.

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

Khi training model trên các 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. Đây là số lượng mẫu dữ liệu mà một model Machine Learning xử lý trong một iteration training duy nhất. Sử dụng batch size tối đa được GPU hỗ trợ giúp bạn tận dụng đầy đủ khả năng của GPU và giảm thời gian training model. Tuy nhiên, bạn cần tránh làm đầy bộ nhớ GPU. Nếu gặp lỗi bộ nhớ, hãy giảm dần batch size cho đến khi model training ổn định.



Watch: How to Use Batch Inference with Ultralytics YOLO26 | Speed Up Object Detection in Python 🎉

Đối với YOLO26, bạn có thể đặt tham số batch trong các đối số của chế độ Train để phù hợp với dung lượng GPU. Trên một accelerator đơn, batch=-1 profiling model và chọn batch size nhằm đạt mức sử dụng bộ nhớ khoảng 60%; một phần như batch=0.70 sẽ nhắm đến một tỷ lệ khác. Các lượt chạy Multi-GPU yêu cầu global batch size tường minh là bội số của số lượng device. Trên CPU và Apple silicon, AutoBatch sẽ cảnh báo và chuyển về batch=16.

Training trên tập con#

Training trên tập con là một chiến lược thông minh, trong đó bạn training model trên một tập dữ liệu nhỏ hơn nhưng đại diện cho dataset lớn hơn. Chiến lược 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 bạn sắp hết thời gian hoặc đang thử nghiệm các cấu hình model khác nhau, training trên tập con là một lựa chọn phù hợp.

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

Training đa tỉ lệ#

Training đa tỉ lệ là một kỹ thuật cải thiện khả năng khái quát hóa của model bằng cách training trên các ả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, đồng thời trở nên robust hơn.

Ví dụ, khi training YOLO26, bạn có thể bật scale augmentation bằng cách đặt tham số scale. Tham số này điều chỉnh kích thước ảnh training theo một hệ số được chỉ định, mô phỏng các đối tượng ở những khoảng cách khác nhau. Ví dụ, đặt scale=0.5 sẽ zoom ngẫu nhiên ảnh training theo hệ số từ 0.5 đến 1.5 trong quá trình training. Việc cấu hình tham số này cho phé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 trê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ợ training đa tỉ lệ theo kích thước ảnh thông qua tham số multi_scale. Khác với scale, vốn zoom ảnh rồi padding/crop trở lại imgsz, multi_scale thay đổi chính imgsz trong mỗi batch (làm tròn theo stride của model). Ví dụ, với imgsz=640multi_scale=0.25, kích thước training đượ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à một kỹ thuật quan trọng để cải thiện hiệu quả training model Machine Learning. Bằng cách lưu các ảnh đã tiền xử lý trong bộ nhớ, caching giảm thời gian GPU phải chờ tải dữ liệu từ disk. Model có thể liên tục nhận dữ liệu mà không bị trì hoãn bởi các thao tác disk I/O.

Có thể kiểm soát caching khi training YOLO26 bằng tham số cache:

  • cache=True: Lưu ảnh dataset trong RAM, mang lại 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 disk, chậm hơn RAM nhưng nhanh hơn việc tải dữ liệu mới mỗi lần.
  • cache=False: Tắt caching, hoàn toàn phụ thuộc vào disk I/O và là tùy chọn chậm nhất.

Training với độ chính xác hỗn hợp#

Training 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). Kỹ thuật này tận dụng ưu điểm của cả FP16 và FP32 bằng cách 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 các phép toán của mạng neural được thực hiện ở FP16 nhằm tận dụng tốc độ tính toán cao hơn và mức sử dụng bộ nhớ thấp hơn. Tuy nhiên, một bản sao chính của weights trong model được giữ ở FP32 để đảm bảo độ chính xác trong các bước cập nhật weights. Bạn có thể xử lý các 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 training với độ chính xác hỗn hợp, bạn cần sửa các script training 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ư PyTorchTensorFlow, tích hợp sẵn hỗ trợ cho độ chính xác hỗn hợp.

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

Pretrained weight#

Sử dụng pretrained weights là một cách thông minh để tăng tốc quá trình training model. Pretrained weights đến từ các model đã được training trên những dataset lớn, tạo lợi thế khởi đầu cho model của bạn. Transfer learning điều chỉnh các model pretrained cho những task mới có liên quan. Fine-tuning một model pretrained bao gồm việc bắt đầu với các weights này rồi tiếp tục training trên dataset cụ thể của bạn. Phương pháp này giúp rút ngắn thời gian training và thường mang lại hiệu năng tốt hơn vì model đã có hiểu biết nền tảng về các đặc trưng cơ bản.

Pretrained weights đến từ đối số model, vì vậy model=yolo26n.pt đã bắt đầu với weights COCO. Tham số pretrained kiểm soát việc giữ lại các weights đó (True, mặc định), loại bỏ (False) hoặc thay thế bằng checkpoint khác (pretrained=path/to/best.pt). Việc đặt pretrained=True trên một model *.yaml không tự tải weights. Xem Cách Fine-Tune YOLO trên Dataset Tùy chỉnh để biết đầy đủ 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: Việc triển khai bộ lập lịch learning rate sẽ tự động điều chỉnh learning rate trong quá trình training. Learning rate được tuning tốt có thể ngăn model vượt qua các điểm cực tiểu và cải thiện độ ổn định. Khi training YOLO26, tham số lrf giúp quản lý learning rate scheduling bằng cách đặt learning rate cuối bằng một phần của learning rate ban đầu. Với những hành vi không có đối số nào cung cấp, chẳng hạn learning rate theo từng layer hoặc gradient clipping, hãy subclass trainer.
  • Training phân tán: Khi xử lý dataset lớn, training phân tán có thể tạo ra khác biệt đáng kể. Bạn có thể giảm thời gian training bằng cách phân bổ workload training trên nhiều GPU hoặc máy. Cách tiếp cận này đặc biệt có giá trị đối với các dự án quy mô enterprise với tài nguyên tính toán đáng kể.
  • Định dạng bộ nhớ channels-last: Quá trình huấn luyện bằng CUDA tự động sử dụng bố cục bộ nhớ NHWC nhanh hơn trên PyTorch 1.11 trở lên, ngoại trừ trên Windows, nơi định dạng này cho tốc độ chậm hơn. Đặt channels_last=True để bắt buộc sử dụng định dạng này hoặc channels_last=False để giữ nguyên NCHW; PyTorch 1.10 trở xuống, CPU và MPS vẫn giữ mặc định là NCHW.

Số epoch cần training#

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

Một câu hỏi phổ biến là làm thế nào xác định số epoch cần training model. Điểm khởi đầu phù hợp là 300 epoch. Nếu model overfit sớm, bạn có thể giảm số epoch. Nếu overfitting không xảy ra sau 300 epoch, bạn có thể kéo dài training 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 training script.

Early stopping#

Early stopping là một kỹ thuật hữu ích để tối ưu hóa quá trình training model. Bằng cách theo dõi hiệu năng validation, bạn có thể dừng training khi model không còn cải thiện. Nhờ đó, bạn tiết kiệm tài nguyên tính toán và ngăn overfitting.

Quy trình này bao gồm việc đặt tham số patience, xác định số epoch cần chờ để các metric validation cải thiện trước khi dừng training. Nếu hiệu năng của model không cải thiện trong số epoch này, training 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 early stopping bằng cách đặt tham số patience trong cấu hình training. Ví dụ, patience=5 nghĩa là training sẽ dừng nếu các metric validation không cải thiện trong 5 epoch liên tiếp. Phương pháp này đảm bảo quy trình training vẫ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.

Lựa chọn giữa training trên cloud và local#

Có hai tùy chọn để training model: training trên cloud và training local.

Training trên cloud cung cấp khả năng mở rộng và phần cứng mạnh mẽ, lý tưởng để xử lý dataset lớn và các model phức tạp. Các nền tảng như Google Cloud, AWSAzure cung cấp quyền truy cập theo nhu cầu vào GPU và TPU hiệu năng cao, rút ngắn thời gian training và cho phép thử nghiệm với các model lớn hơn. Tuy nhiên, training trên cloud có thể tốn kém, đặc biệt trong thời gian dài, đồng thời việc truyền dữ liệu có thể làm tăng chi phí và latency.

Training local 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 liên tục. Đây có thể là lựa chọn kinh tế hơn cho các dự án dài hạn, và vì dữ liệu được giữ on-premises nên an toàn hơn. Tuy nhiên, phần cứng local có thể bị giới hạn tài nguyên và cần bảo trì, dẫn đến thời gian training lâu hơn đối với các model lớn.

Lựa chọn optimizer#

Optimizer là một algorithm điều chỉnh weights của mạng neural để 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 hơ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 học của model.

Bạn cũng có thể fine-tune các tham số 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ố. Để tăng độ ổ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 quá trình học dài hạn. Ngoài ra, việc đặt momentum 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. Một 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 (Gradient Descent ngẫu nhiên):

    • Cập nhật các tham số 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à bị 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 các ưu điểm của SGD với momentum và RMSProp.
    • Điều chỉnh learning rate cho từng tham số dựa trên các ướ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 tuning hơn. Với các lượt training 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 bậc hai trung bình):

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

    • Kết hợp các cập nhật theo phong cách SGD với hành vi lấy cảm hứng từ Muon để cải thiện độ ổn định trong training quy mô lớn.
    • Là lựa chọn phù hợp khi bạn muốn khả năng khái quát hóa giống SGD nhưng cần hội tụ mượt hơn SGD nguyên bản.
    • Đặc biệt phù hợp với các công thức training YOLO26; nếu không chắc chắn, hãy bắt đầu với optimizer=auto và so sánh với MuSGD trên dataset của bạn.

Với YOLO26, tham số optimizer cho phép bạn chọn nhiều optimizer, bao gồm SGD, MuSGD, Adam, Adamax, AdamW, NAdam, RAdam và RMSProp, hoặc đặt thành auto để tự động chọn dựa trên số iteration training.

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 yêu thích computer vision có thể giúp bạn giải quyết vấn đề và học hỏi nhanh hơn. Dưới đây là một số cách để kết nối, nhận hỗ trợ và chia sẻ ý tưởng.

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

  • GitHub Issues: Truy cập repository GitHub của YOLO26 và sử dụng tab Issues để đặt câu hỏi, báo lỗi và đề xuất feature mới. Cộng đồng và các maintainer hoạt động rất tích cực, luôn sẵn sàng hỗ trợ.
  • Ultralytics Discord Server: Tham gia server Discord của Ultralytics để trò chuyện với những 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 để đọc các hướng dẫn chi tiết và mẹo hữu ích về nhiều dự án computer vision.

Sử dụng các 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 cũng như phương pháp mới nhất trong cộng đồng computer vision.

Các điểm chính#

Training model computer vision đòi hỏi tuân thủ các phương pháp tốt, tối ưu hóa 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, training với độ chính xác hỗn hợp và bắt đầu với pretrained weights có thể giúp model hoạt động tốt hơn và training nhanh hơn. Những phương pháp như training trên tập con và early stopping 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 các xu hướng mới sẽ giúp bạn liên tục cải thiện kỹ năng training model.

FAQ#

  • Để cải thiện mức sử dụng GPU, hãy đặt tham số batch ở kích thước tối đa được GPU hỗ trợ. Trên một accelerator đơn, batch=-1 profiling model và nhắm đến mức sử dụng bộ nhớ khoảng 60%. Tùy chọn này chuyển về batch=16 trên CPU và Apple silicon, trong khi các lượt chạy Multi-GPU yêu cầu global batch size tường minh là bội số của số lượng device. Để biết thêm thông tin, hãy tham khảo các đối số của chế độ Train.

  • Training 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) để cân bằng tốc độ tính toán và độ 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 bị bỏ qua trên CPU và Apple silicon. Để biết thêm chi tiết, hãy xem tài liệu chế độ Train.

  • Training đa tỉ lệ cải thiện hiệu năng model bằng cách training trên các ảnh có kích thước khác nhau, giúp model khái quát hóa tốt hơn ở các tỉ lệ và khoảng cách khác nhau. YOLO26 cung cấp hai tham số riêng cho mục đích này. scale=0.5 lấy mẫu hệ số zoom từ 0.5 đến 1.5 rồi padding hoặc crop trở lại imgsz cố định, trong khi multi_scale=0.25 thay đổi chính imgsz trong mỗi batch theo các bước stride. Để xem cài đặt và biết thêm chi tiết, hãy tham khảo tài liệu chế độ Train.

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

  • Số epoch là số lượt hoàn chỉnh đi qua dataset training trong quá trình training model. Điểm khởi đầu phổ biến là 300 epoch. Nếu model overfit sớm, bạn có thể giảm số epoch. Ngược lại, nếu không quan sát thấy overfitting, bạn có thể kéo dài training lên 600, 1200 hoặc nhiều epoch hơn. Để đặt giá trị này trong YOLO26, hãy sử dụng tham số epochs trong training script. Để biết thêm lời khuyên về cách xác định số epoch lý tưởng, hãy tham khảo phần này về số epoch.

Bình luận