YOLOLYTIC – thư viện nhận diện vật thể YOLO dành cho .NET và .NET framwork

Trong lĩnh vực Thị giác máy tính (Computer Vision), phát hiện vật thể (Object Detection) là một trong những bài toán quan trọng, được ứng dụng trong giám sát an ninh, giao thông thông minh, tự động hóa công nghiệp, robot và nhiều hệ thống trí tuệ nhân tạo khác.

Bài viết này cung cấp thư viện và source code để người dùng tự tích hợp vào chương trình WinForm/WPF sử dụng .NET hoặc .NET framework.

Các bạn tìm hiểu thêm về YOLO tại bài: https://thigiacmaytinh.com/tong-quan-ve-yolo-cho-nguoi-moi-bat-dau/

Mục lục

  1. Giới thiệu
  2. Thông số kỹ thuật
  3. Hướng dẫn sử dụng
  4. Giao diện của YOLOLYTIC

Giới thiệu

Trong các phương pháp triển khai sử dụng thực tế thì cách dễ nhất là viết ứng dụng trên Windows dạng WinForm/WPF sử dụng .NET hoặc .NET framework.

Và YOLOLYTIC ra đời với mục đích tích hợp model YOLO vào WinForm: nhanh như C++ và dễ viết như C#. Hỗ trợ đầy đủ từ C#, VB.NET, Winform hay WPF đều được (thư viện viết bằng .NET thì không sử dụng được ở project .NET framework).

Ưu điểm của YOLOLYTIC

  1. YOLOLYTIC là ứng dụng viết cho Windows (.exe) để người dùng dễ dàng thao tác với button, textbox thay vì chạy Python hay Jupyter notebook.
  2. YOLOLYTIC hỗ trợ YOLO 8 tới YOLO 26
  3. Tích hợp được vào cả 2 loại project viết bằng .NET hoặc .NET framework
  4. Dễ dàng triển khai trên máy khách hàng, chỉ cần cài C++ 2022 x64 là xong. Còn nếu chạy CUDA thì cài CUDA & cuDNN tương ứng là được
  5. Có source code example cách sử dụng với 5 loại input: image, folder, webcam, video và camera IP
  6. Hỗ trợ đa luồng bằng cách tạo mảng engine, giúp xử lý nhiều ảnh cùng lúc (miễn là phần cứng cho phép)
  7. Có 2 phiên bản: CPU và CUDA. Nhu cầu nhẹ thì CPU, cần xử lý nhiều thì CUDA.

Vì sao nên sử dụng YOLOLYTIC

  1. Miễn phí
  2. Tốc độ nhanh, khai thác tối đa sức mạnh phần cứng
  3. Dễ sử dụng, chỉ cần reference, load model và gọi hàm là xong
  4. Các chức năng của YOLOLYTIC được viết theo nhu cầu sử dụng thực tế
STT Yêu cầu CPU CUDA
1 Bắt buộc có GPU NVIDIA hỗ trợ CUDA Không cần ✅
2 Phải cài đặt C++ và .NET framework ✅ ✅
3 Phải cài đặt CUDA và cuDNN Không cần ✅
4 Tốc độ Chậm Nhanh


Với việc tích hợp nhiều thư viện như TGMTplayer để phát hiện vật thể từ camera IP thì YOLOLYTIC rất phù hợp để áp dụng vào đời sống.

Thông số kỹ thuật

YOLOLYTIC được viết bằng C++ 2022 x64, sử dụng các thư viện sau:

  • Microsoft ONNX runtimes 1.26.0: implement thuật toán YOLO
  • FFMPEG: play video và camera IP (rstp)
  • AForge 2.2.5.0: play webcam
  • OpenCV 4.8.0: implement các function xử lý ảnh khác

Hướng dẫn sử dụng

Bước 1: cài đặt phần mềm cần thiết

  • Visual Studio 2022 trở lên
  • Python 3.10 x64 trở lên

Bước 2: cài đặt packages Python

Bạn cần phải cài đặt Pytorch
pip install torch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 --index-url https://download.pytorch.org/whl/cu121

Và cài các packages sau:
ultralytics==8.4.183
onnxslim==0.1.98

Bước 3: cài đặt CUDA và cuDNN (nếu bạn chọn bản CUDA)

Hiện tại, YOLOLYTIC đang sử dụng CUDA 12.8 và cuDNN 9.8. Sau khi cài đặt xong các bạn nhớ restart PC.

Bước 4: clone source code và build

Clone source code ở link cuối bài và build bằng Visual Studio.

  • Chỉ có 1 platform duy nhất là x64
  • Tất cả file output đều nằm trong folder bin
  • FormMain chứa tab controls, mỗi tab sẽ chứa 1 form
  • Các form con đều là singleton

Lưu ý: đối với bản CUDA cần phải copy thủ công file packages\Microsoft.ML.OnnxRuntime.Gpu.Windows.1.26.0\runtimes\win-x64\native\onnxruntime_providers_cuda.dll vào folder bin vì file quá nặng (285MB)

Bước 5: convert file weight .pt sang .onnx

Chương trình chỉ hỗ trợ format *.onnx, không đọc được trực tiếp định dạng *.pt, vì vậy bạn cần phải convert pt => onnx trước khi sử dụng.

Sau khi cài xong dùng câu lệnh bên dưới để convert file *.pt sang *.onnx.
yolo export model='./yolo26x-seg.pt' format=onnx nms=True dynamic=True

Giải thích tham số:

  • yolo export: gọi chức năng export model của Ultralytics.
  • model=’./yolo26x-seg.pt’: Đường dẫn đến model nguồn. Đây là model YOLO26x dùng cho bài toán instance segmentation.
  • format=onnx Xuất model sang định dạng ONNX để có thể sử dụng với ONNX Runtime
  • nms=True Tích hợp bước Non-Maximum Suppression (NMS) vào graph ONNX nếu được hỗ trợ cho model và phiên bản Ultralytics đang dùng.
  • dynamic=True Cho phép một số chiều đầu vào hoặc đầu ra của model có kích thước động thay vì cố định khi export. Có nghĩa là các bạn có thể training bằng size 640×640 và load model với size 1024×1024

Giao diện của YOLOLYTIC

Ở header, các bạn có thể chọn model weight (*.onnx) và class (*.names), bạn có thể tạo số lượng engine từ 1-10, muốn nhiều hơn thì sửa code.

YOLOLYTIC chia ra thành 5 tab cho 5 chức năng chính như sau:

  1. Image: phát hiện object từ ảnh, kết quả hiển thị được trên Listview
  2. Folder: phát hiện object trong folder chứa ảnh. 3 loại ảnh detect được là jpg, png và bmp
  3. Webcam: phát hiện object realtime từ webcam
  4. Video/camera: có thể detect từ file video hoặc camera IP. Để play được camera IP các bạn làm theo bài Danh sách stream link các camera IP phổ biến để tìm stream
  5. Extract frame: dùng để extract frame và annotation (*.txt) detect được, dùng để retrain nếu detect thiếu hoặc sai

⬇ Download

Chương trình Yololytic.exe nằm trong folder bin.

Folder pretrain có commit sẵn file onnx để các bạn sử dụng.

7 thoughts on “YOLOLYTIC – thư viện nhận diện vật thể YOLO dành cho .NET và .NET framwork”

    1. .NET framework 4.8.1 chỉ ảnh hưởng đến giao diện thôi, mà 4.8.1 mới hơn phiên bản 4.7.2 nên vẫn OK. Còn core viết bằng C++ nên bạn check lại xem có cài đúng C++ 2022 x64 không nhé

  1. nó không báo lỗi những nó không detect được ạ , em làm ở máy này thì được còn cop sang máy khác thì lại không được( máy này thì e đã cài C++ 2022 rồi a )

Leave a Reply