• HOME
  • DỰ ÁN & MẠCH ĐIỆN
    • Lập trình
      • ARDUINO PROJECT
      • ESP8266 PROJECT
      • ESP32 PROJECT
      • RASPBERRY PI PROJECT
      • Vi điều khiển
    • Điện tử ứng dụng
      • Audio / Amplifiers
      • Nguồn điện
      • Pin sạc/Acquy và mạch sạc
      • Biến đổi AC và DC
      • Robotic
      • Cảm biến
      • LED
      • LCD
      • Động cơ bước
      • Mạch linh tinh
      • Test & Measurement
      • RF – FM
    • Nixie Clock
    • HOME AUTOMATION
    • Dân dụng
    • Công nghiệp
  • KIẾN THỨC CĂN BẢN
    • Điện tử cơ bản
    • Điện tử số
    • PCB
    • Nixie Tube
    • Raspberry Pi
    • Vi điều khiển
    • Arduino
    • IN 3D
  • DOWNLOAD
    • Phần mềm điện tử
    • Giáo trình
      • Giáo trình Điện – Điện tử
      • Giáo trình Tự Động Hóa
      • Giáo trình Viễn thông
    • Đề tài
      • Đề tài – Điện – Điện Tử
      • Đề tài – Tự Động Hóa
      • Đề tài – Viễn thông
    • Điện tử ứng dụng
    • Tài liệu nước ngoài
    • Hướng dẫn, sửa chữa
    • Sơ đồ, nguyên lý thiết bị
    • Tiêu chuẩn – Đo lường – Thử nghiệm
    • Datasheet
  • LIÊN HỆ
  • SẢN PHẨM

Mạch Điện Lý Thú

Sơ đồ nguyên lý, PCB, đồ án, tài liệu, DIY

Trang chủ » DỰ ÁN & MẠCH ĐIỆN » Lập trình » RASPBERRY PI PROJECT » Nhận dạng đối tượng trong ảnh bằng thư viện YOLO 3

Nhận dạng đối tượng trong ảnh bằng thư viện YOLO 3

27/04/2025 by admin 1 Bình luận

Đã được đăng vào 03/10/2019 @ 14:59

Nhận dạng đối tượng trong ảnh bằng thư viện YOLO 3 

Mục lục hiện
Nhận dạng đối tượng trong ảnh bằng thư viện YOLO 3
Cài đặt căn bản không sử dụng GPU và OpenCV
Biên dịch mã nguồn
Sử dụng model đã huấn luyện sẵn
Thử nhận dạng đối tượng trong ảnh
Chạy Yolo sử dụng Nvidia CUDA
Lỗi phát sinh khi biên dịch Yolo hỗ trợ CUDA
So sánh tốc độ dùng Nvidia CUDA và không dùng Nvidia CUDA

YOLO là một thư viện nhận dạng đối tượng trong ảnh hay video có tốc độ xử lý nhanh hơn rất nhiều thư viện hiện có, mức độ chính xác không phải tốt nhất nhưng ở mức tốt hợp lý trong trường hợp nhận dạng đối tượng trong video.

Bài viết này sẽ chưa đề cập đến YOLO hoạt động như thế nào, thuật toán ra làm sao mà chỉ ghi chép lại kinh nghiệm cài đặt YOLO trên Mac OSX, và nhận dạng ảnh.

YOLO có 3 phiên bản: 1, 2, 3. Ghi chú cải tiến tính năng qua các phiên bản ở đây nhé. Bài viết này sử dụng YOLO3.

Xem thêm:

  • YOLO bản fork ngon hơn bản chính chủ, hỗ trợ OpenCV 4.x
  • Cài đặt OpenCV nhanh nhất trên MacOSX để lập trình AI

Cài đặt căn bản không sử dụng GPU và OpenCV

Biên dịch mã nguồn

Đầu tiên là clone mã nguồn mới nhất về, không cần clone tất cả commit trước đó nên hãy thêm tham số –depth==1
Sau đó chuyển vào thư mục darknet và gõ lệnh make. Trình make dựa vào Makefile để biên dịch mã nguồn Yolo

git clone --depth=1 https://github.com/pjreddie/darknet
cd darknet
make

Để chạy được YOLO trên máy tính (Mac, Windows, Linux, RasberryPI, Jetson Nano), chúng ta đều phải tiến hành biên dịch thư viện. YOLO có mấy lựa chọn biên dịch được cấu hình trong Makefile:

GPU=0 # Có dùng Nvidia GPU? Có là nhanh đáng kể đó
CUDNN=0 # Có tích hợp Cuda NeuralNetwork không
OPENCV=0 # Có tích hợp OpenCV không? có là thêm nhiều trò hay lắm
OPENMP=0 # Có tích hợp thư viện OpenMP của C++
DEBUG=0

Để đơn giản hãy tắt hết các lựa chọn này. Quá trình biên dịch có thể xuất hiện một số lỗi, hướng dẫn xử lý lỗi tôi nói ở sau.

Giả sử lệnh make thành công, bạn sẽ biên dịch thư viện YoLo ra file binary có tên là darknet.

Sử dụng model đã huấn luyện sẵn

Yolo chỉ là framework, để nhận dạng đối tượng chúng ta cần thêm model đã được huấn luyện.

Lựa chọn đơn giản nhất là dùng lại model đã được huấn luyện sẵn, chỉ cần tải trên mạng về.

Lựa chọn hai, nếu ta phải tập trung nhận dạng một tập vật thể rất đặc thù ví dụ logo của các hãng, tên riêng các loại hoa thì sẽ phải tạo model riêng để tối ưu tốc độ nhận dạng và độ chính xác.

Hãy bắt đầu bằng dùng lại model được huấn luyện sẵn, file yolov3.weights có dung lượng khoảng 248Mb.

wget https://pjreddie.com/media/files/yolov3.weights

Thử nhận dạng đối tượng trong ảnh

File ảnh đầu vào là data/dog.jpg

./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights data/dog.jpg

Kết quả đầu ra chó và xe đạp được nhận dạng.

Yolo nhận dạng khá chính xác những đối tượng phổ biến, được chụp ảnh chứ không phải tranh vẽ

Cũng là ảnh 2 người ôm chó – mèo, nhưng ảnh dưới là ảnh vẽ, YoLo không nhận ra được!

Chạy Yolo sử dụng Nvidia CUDA

Ở phần trên tôi dùng CPU để nhận dạng đối tượng, tốc độ rất chậm, khoảng 7 giây mới xong.

Có nghĩa để nhận dạng một phút video có 60 giây x 24 khung hình sẽ cần khoảng 60 * 24 * 7 / (60 * 60) = 2.8 tiếng !

  1. Hãy sửa Makefile ngay dòng đầu tiên bật GPU = 1 lên.
  2. Vào link này https://developer.nvidia.com/cuda-downloads để tải về CUDA tool kit, sau đó cài đặt
  3. Sau đó tiến hành biên dịch lại Yolo bằng lệnh make

Lỗi phát sinh khi biên dịch Yolo hỗ trợ CUDA

1- nvcc is not found. Lỗi này xuất hiện khi trình make không tìm thấy file chạy nvcc ở trong thư viện cuda mới cài ở thư mục /usr/local/cuda.

Xử lý: bổ xung đường dẫn /usr/local/cuda/bin vào biến môi trường $PATH

export PATH=/usr/local/cuda/bin:$PATH

2- Lỗi biên dịch directory not found for option ‘-L/usr/local/cuda/lib64’

Nguyên nhân thư mục /usr/local/cuda/lib64 đã đổi thành /usr/local/cuda/lib

Vào Makefile sửa LDFLAGS+= -L/usr/local/cuda/lib64 -lcuda -lcudart -lcublas -lcurand

Thành LDFLAGS+= -L/usr/local/cuda/lib -lcuda -lcudart -lcublas -lcurand

3- Lỗi khi khởi động darknet “libxxx.dylib is not found”

Nguyên nhân thiếu đường dẫn hoặc biến môi trường LD_LIBRARY_PATH

Do tôi cài zsh shell cùng OhMyZSH nên tôi sửa ~/.zshrc thêm dòng này

export LD_LIBRARY_PATH=/usr/local/cuda/lib

4- Sau khi darknet đã khởi động và bắt đầu nhận dạng thì phát sinh lỗi CUDA Error: out of memory

Assertion failed: (0), function check_error, file ./src/cuda.c, line 36.
[1]    1243 abort      ./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights

Lỗi này được đề cập ở đây https://github.com/pjreddie/darknet/issues/791

Cách xử lý là chỉnh file cfg/yolov3.cfg

batch=1
subdivisions=1
width=416
height=416

So sánh tốc độ dùng Nvidia CUDA và không dùng Nvidia CUDA

data/dog.jpg: Predicted in 0.434673 seconds. Với tốc độ xử lý ảnh đơn như thế này khi xử lý video tốc độ nhận dạng frame per second (fps) sẽ chỉ tầm 1 đến 2 fps
truck: 92%
bicycle: 99%
dog: 99%

Không sử dụng CUDA, tốc độ chậm hơn 17 lần
data/dog.jpg: Predicted in 7.696516 seconds.
truck: 92%
bicycle: 99%
dog: 99%

Cấu hình máy tính của tôi: Dell M6800, RAM 16B, GPU: Nvidia K3100 4GRAM đời 2014. Nhìn chung là rất lạc hậu để train model phức tạp.

Nguồn: techmaster.vn

  • Share on Facebook
  • Tweet on Twitter

Thuộc chủ đề:Raspberry Pi, RASPBERRY PI PROJECT Tag với:CUDA, nhận dạng, Nvidia, xử lý ảnh, YOLO

Bài viết trước « Các phương pháp đo mức nước, dầu, chất lỏng…
Bài viết sau Retropie – Biến Raspberry Pi thành máy chơi điện tử »

Reader Interactions

Sidebar chính

Zalo hỏi đáp 24/7

Theo dõi qua mạng xã hội

  • Facebook

Bạn đang tìm gì?

Bài viết mới nhất

Hướng dẫn tạo thư viện Altium

14/05/2025

Đồng hồ dùng bóng đèn điện tử – Nixie clock

14/05/2025

Căn chỉnh tốc độ rút nhựa trong in 3D – Retraction Calibration

14/05/2025

Cài đặt Octoprint lên Raspbian

13/05/2025

P2 - Smart Home - Ổ điện thông minh

P2 – Smart Home – Ổ điện thông minh

13/05/2025

Danh mục

  • DỰ ÁN & MẠCH ĐIỆN (241)
    • Công nghiệp (16)
    • Dân dụng (29)
    • Điện tử ứng dụng (178)
      • Audio / Amplifiers (34)
      • Biến đổi AC và DC (24)
      • Cảm biến (40)
      • Động cơ bước (5)
      • Kiểm thử và đo đạc (23)
      • LCD (15)
      • LED (20)
      • Mạch linh tinh (27)
      • Nguồn điện (42)
      • Pin sạc/Acquy và mạch sạc (24)
      • RF – FM (5)
      • Robotic (2)
    • HOME AUTOMATION (23)
    • Lập trình (82)
      • ARDUINO PROJECT (39)
      • ESP32 PROJECT (6)
      • ESP8266 PROJECT (17)
      • RASPBERRY PI PROJECT (9)
      • Vi điều khiển (24)
    • Nixie Clock (3)
  • Kiến thức căn bản (170)
    • Arduino (36)
    • Điện tử cơ bản (77)
    • Điện tử số (9)
    • IN 3D (9)
    • Nixie Tube (13)
    • PCB (18)
    • Raspberry Pi (10)
    • Vi điều khiển (16)

Footer

Bài viết mới nhất

  • Hướng dẫn tạo thư viện Altium
  • Đồng hồ dùng bóng đèn điện tử – Nixie clock
  • Căn chỉnh tốc độ rút nhựa trong in 3D – Retraction Calibration
  • Cài đặt Octoprint lên Raspbian
  • P2 – Smart Home – Ổ điện thông minh
  • Thiết kế mạch in trên Altium cho người mới

Bình luận mới nhất

  • Tên gì kệ tui trong Mạch Ampli 19W dùng IC LA4440
  • admin trong Đồng hồ số hiển thị trên LED 7 đoạn dùng 89S52 và DS1307
  • Thành trong Đồng hồ số hiển thị trên LED 7 đoạn dùng 89S52 và DS1307
  • admin trong Đồng hồ sử dụng LCD máy Homephone – Gphone Clock

Tìm kiếm

Tất cả nội dung trên website chỉ dùng để tham khảo. Chúng tôi không chịu trách nhiệm về thông tin thành viên đăng tải lên website và xóa bài viết khi có vi phạm bản quyền tác giả.