+10

YOLO-NAS: Mô hình phát hiện đối tượng YOLO mới đánh bại YOLOv6 & YOLOv8

Giới thiệu về YOLO-NAS

Việc phát triển một kiến trúc mới dựa trên YOLO có thể xác định lại khả năng phát hiện đối tượng (SOTA) tiên tiến nhất bằng cách giải quyết các hạn chế hiện có và kết hợp các tiến bộ gần đây trong học sâu. Công ty Deci.ai gần đây đã ra mắt YOLO-NAS. Mô hình học sâu này mang lại khả năng phát hiện đối tượng thời gian thực vượt trội và hiệu suất cao sẵn sàng cho sản xuất. YOLO-NAS mới mang lại hiệu suất (SOTA) hiện đại với hiệu suất tốc độ và độ chính xác vô song, vượt trội so với các mẫu khác như YOLOv5, YOLOv6, YOLOv7 và YOLOv8. 🤗

"Imagine a new YOLO-based architecture that could enhance your ability to detect small objects, improve localization accuracy, and increase the performance-per-compute ratio, making the model more accessible for real-time edge-device applications…..And that’s precisely what we’ve done here at Deci." – Deci.ai YOLO-NAS team

image.png

Công nghệ Tìm kiếm Kiến trúc Thần kinh độc quyền của Deci, AutoNAC™ , đã tạo ra mô hình YOLO-NAS. Công cụ AutoNAC™ cho phép bạn nhập bất kỳ tác vụ nào, đặc điểm dữ liệu (không cần truy cập dữ liệu), môi trường suy luận và mục tiêu hiệu suất, sau đó hướng dẫn bạn tìm kiến trúc tối ưu mang lại sự cân bằng tốt nhất giữa độ chính xác và tốc độ suy luận cho ứng dụng cụ thể của bạn . Ngoài việc nhận biết dữ liệu và phần cứng, công cụ AutoNAC còn xem xét các thành phần khác trong ngăn suy luận, bao gồm trình biên dịch và lượng tử hóa.

Model mAP@val (0.5:0.95) Precision Latency (bs=1) ms Params (M)
YOLOv8-S 44.9 FP32 3.2 11.2
YOLOv6-S 45.0 FP32 2.9 18.5
YOLO-NAS S 47.5 FP16 3.21 19.0
YOLO-NAS S INT-8 47.03 INT8 2.36 19.0
YOLOv8-M 50.2 FP32 7.0 25.9
YOLOv6-M 50.0 FP32 5.7 34.9
YOLO-NAS M 51.55 FP16 5.85 51.1
YOLO-NAS M INT-8 51.0 INT8 3.78 51.1
YOLOv8-L 52.9 FP32 11.0 43.7
YOLOv6-L 52.8 FP32 10.3 59.6
YOLO-NAS L 52.22 FP16 7.87 66.9
YOLO-NAS L INT-8 52.1 INT8 4.78 66.9

Kiến trúc của YOLO-NAS sử dụng các khối nhận biết lượng tử hóa và lượng tử hóa có chọn lọc để tối ưu hóa hiệu suất. Khi được chuyển đổi sang phiên bản lượng tử hóa INT8, YOLO-NAS giảm độ chính xác nhỏ hơn (0,51, 0,65 và 0,45 điểm mAP đối với các biến thể S, M và L) so với các kiểu máy khác mất 1-2 điểm mAP trong quá trình lượng tử hóa. Những kỹ thuật này đạt đến đỉnh cao trong kiến trúc sáng tạo với khả năng phát hiện đối tượng ưu việt và hiệu suất hàng đầu.

YOLO-NAS có gì mới ?

Thông thường, kiến trúc Neural Network được thiết kế thủ công bởi các chuyên gia dựa trên kinh nghiệm và trực giác của họ. Tuy nhiên, quá trình này bao gồm việc nghiên cứu, khám phá các kiến trúc tốt & khả thi, luôn rất tốn thời gian và cồng kềnh. 😅

YOLO-NAS tự động thiết kế lại kiến trúc của mô hình để tăng hiệu suất của nó khi nói đến những thứ như tốc độ, mức sử dụng bộ nhớ và thông lượng. Nó thường liên quan đến một không gian tìm kiếm xác định tập hợp các lựa chọn kiến trúc có thể, chẳng hạn như số lớp, loại lớp, kích thước hạt nhân và kiểu kết nối. Sau đó, thuật toán tìm kiếm sẽ đánh giá các kiến trúc khác nhau bằng cách đào tạo và đánh giá chúng trên một tác vụ và tập dữ liệu nhất định. Dựa trên những đánh giá này, thuật toán khám phá lặp đi lặp lại và tinh chỉnh không gian kiến trúc, cuối cùng trả về không gian mang lại hiệu suất tốt nhất.

nas

Có gì mới trong kiến trúc YOLO-NAS

  • Việc sử dụng các khối QSP và QCI kết hợp các lợi thế về tham số hóa lại và lượng tử hóa 8 bit. Các khối này dựa trên cách tiếp cận được đề xuất bởi Chu et al. Các khối cho phép mất độ chính xác tối thiểu trong quá trình lượng tử hóa sau đào tạo.
  • AutoNAC được sử dụng để xác định kích thước và cấu trúc tối ưu của các giai đoạn, bao gồm loại khối, số lượng khối và số lượng kênh trong mỗi giai đoạn.
  • Một phương pháp lượng tử hóa kết hợp lượng tử hóa có chọn lọc một số phần nhất định của mô hình, giảm mất thông tin và cân bằng độ trễ và độ chính xác. Lượng tử hóa tiêu chuẩn ảnh hưởng đến tất cả các lớp mô hình, thường dẫn đến mất độ chính xác đáng kể. Phương pháp kết hợp của họ tối ưu hóa lượng tử hóa để duy trì độ chính xác bằng cách chỉ lượng tử hóa một số lớp nhất định trong khi không ảnh hưởng đến các lớp khác. Thuật toán chọn lớp của họ xem xét tác động của từng lớp đối với độ chính xác và độ trễ, cũng như tác động của việc chuyển đổi giữa lượng tử hóa 8 bit và 16 bit đối với độ trễ tổng thể.
  • Chế độ đào tạo trước bao gồm dữ liệu được dán nhãn tự động, tự chắt lọc và bộ dữ liệu lớn.
  • Kiến trúc YOLO-NAS có sẵn theo giấy phép nguồn mở. Các trọng số được đào tạo trước của nó có sẵn để sử dụng nghiên cứu (phi thương mại) trên SuperGradients, thư viện đào tạo thị giác máy tính, mã nguồn mở, dựa trên PyTorch của Deci.

Kiến trúc YOLO-NAS mới đặt ra giới hạn mới cho các tác vụ phát hiện đối tượng, mang lại hiệu suất đánh đổi độ trễ và độ chính xác tốt nhất.

"Designed specifically for production use, YOLO-NAS is fully compatible with high-performance inference engines like NVIDIA® TensorRT™ and supports INT8 quantization for unprecedented runtime performance." – Deci.ai team

Nghịch Thử với YOLO-NAS

Quick start

Việc sử dụng YOLO-NAS khá đơn giản, Chúng ta chỉ cần cài thư viện super_gradients và trải nghiệm thôi 😄

!pip install super_gradients
from super_gradients.training import models
from super_gradients.common.object_names import Models
net = models.get(Models.YOLO_NAS_L, pretrained_weights="coco")
prediction = net.predict("https://vtv1.mediacdn.vn/thumb_w/650/2021/9/21/vnapotalgiaothonghanoidongductrongngaydauhetthoithoigiangiancachxahoitheochithi165677843-16321890520351645599985.jpeg")
prediction.show()

image.png

Train custom dataset

Sử dụng bộ dữ liệu hituav-a-highaltitude-infrared-thermal-dataset để huấn luyện YOLO-NAS

# Visualize a few training images.
plot(
    image_path=os.path.join(ROOT_DIR, train_imgs_dir), 
    label_path=os.path.join(ROOT_DIR, train_labels_dir),
    num_samples=2,
)

image.png

Setup đường dẫn dữ liệu, các tham số train, val, thư mục lưu checkpoint và các mô hình YOLO-NAS

train_data = coco_detection_yolo_format_train(
    dataset_params={
        'data_dir': dataset_params['data_dir'],
        'images_dir': dataset_params['train_images_dir'],
        'labels_dir': dataset_params['train_labels_dir'],
        'classes': dataset_params['classes']
    },
    dataloader_params={
        'batch_size':BATCH_SIZE,
        "shuffle": True
    }
)

val_data = coco_detection_yolo_format_val(
    dataset_params={
        'data_dir': dataset_params['data_dir'],
        'images_dir': dataset_params['val_images_dir'],
        'labels_dir': dataset_params['val_labels_dir'],
        'classes': dataset_params['classes']
    },
    dataloader_params={
        'batch_size':BATCH_SIZE,
        "shuffle": True
    }
)

CHECKPOINT_DIR = 'checkpoints'
models_to_train = [
    'yolo_nas_s',
    'yolo_nas_m',
    'yolo_nas_l'
]

Cấu hình huấn luyện mô hình YOLO-NAS (S, M, L).

for model_to_train in models_to_train:
    trainer = Trainer(
        experiment_name=model_to_train, 
        ckpt_root_dir=CHECKPOINT_DIR
    )

    model = models.get(
        model_to_train, 
        num_classes=len(dataset_params['classes']), 
        pretrained_weights="coco"
    )

    trainer.train(
        model=model, 
        training_params=train_params, 
        train_loader=train_data, 
        valid_loader=val_data
    )

Kết quả suy luận

Sau khi huấn luyện xong thì Mình cho model predict trên tập dữ test.

for image in tqdm(all_images, total=len(all_images)):
    image_path = os.path.join(ROOT_TEST, image)
    out = model.predict(image_path)
    out.save('inference_results/images')
    os.rename(
        'inference_results/images/pred_0.jpg', 
        os.path.join('inference_results/images/', image)
    )
# display test inference result images
import glob
from IPython.display import Image, display

i = 0
limit = 1 # max images to print
for imageName in glob.glob('inference_results/images/*.jpg'): #assuming JPG
    if i < limit:
        print(imageName)
        display(Image(filename=imageName))
        print("\n\n")
    i = i + 1

image.png

Các bạn xem hướng dẫn chi tiết tại kênh youtube @meoluoiai nhé ♥️

Cám ơn các bạn đã đọc hết bài post này. Hi vọng bài post có thể giúp ích được gì đó cho các bạn trong quá trình học tập và làm việc ♥️

Tài liệu tham khảo

  1. https://deci.ai/blog/yolo-nas-object-detection-foundation-model/
  2. https://github.com/Deci-AI/super-gradients/blob/master/YOLONAS.md
  3. https://github.com/Deci-AI/super-gradients/blob/master/documentation/source/model_zoo.md
  4. https://towardsdatascience.com/yolo-nas-how-to-achieve-the-best-performance-on-object-detection-tasks-6b95347908d4
  5. https://learnopencv.com/yolo-nas/

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí