Suy luận phát hiện đối tượng bằng Python với YOLOv5 và PyTorch PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Suy luận phát hiện đối tượng bằng Python với YOLOv5 và PyTorch

Giới thiệu

Phát hiện đối tượng là một lĩnh vực rộng lớn trong thị giác máy tính và là một trong những ứng dụng quan trọng hơn của thị giác máy tính “trong tự nhiên”. Về một mặt, nó có thể được sử dụng để xây dựng các hệ thống tự động điều hướng các tác nhân thông qua các môi trường - có thể là robot thực hiện nhiệm vụ hoặc ô tô tự lái, nhưng điều này đòi hỏi sự giao thoa với các lĩnh vực khác. Tuy nhiên, phát hiện bất thường (chẳng hạn như sản phẩm bị lỗi trên một đường thẳng), định vị đối tượng trong ảnh, phát hiện khuôn mặt và nhiều ứng dụng khác của phát hiện đối tượng có thể được thực hiện mà không giao nhau giữa các trường khác.

Phát hiện đối tượng không được tiêu chuẩn hóa như phân loại hình ảnh, chủ yếu là vì hầu hết các phát triển mới thường được thực hiện bởi các nhà nghiên cứu, người bảo trì và nhà phát triển riêng lẻ, thay vì các thư viện và khuôn khổ lớn. Thật khó để đóng gói các tập lệnh tiện ích cần thiết trong một khuôn khổ như TensorFlow hoặc PyTorch và duy trì các nguyên tắc API đã hướng dẫn sự phát triển cho đến nay.

Điều này làm cho việc phát hiện đối tượng hơi phức tạp hơn, thường dài dòng hơn (nhưng không phải lúc nào cũng vậy) và ít dễ tiếp cận hơn so với phân loại hình ảnh. Một trong những lợi ích chính của việc ở trong hệ sinh thái là nó cung cấp cho bạn một cách để không tìm kiếm thông tin hữu ích về các phương pháp, công cụ và phương pháp tiếp cận tốt để sử dụng. Với tính năng phát hiện đối tượng - hầu hết mọi người phải nghiên cứu nhiều hơn về cảnh quan của hiện trường để nắm bắt tốt.

May mắn thay cho đại chúng - Ultralytics đã phát triển một API phát hiện đối tượng đơn giản, rất mạnh và đẹp xung quanh việc triển khai YOLOv5 của họ.

Trong hướng dẫn ngắn này, chúng tôi sẽ thực hiện Phát hiện đối tượng bằng Python, với YOLOv5 được xây dựng bởi Ultralytics trong PyTorch, sử dụng một bộ trọng số được đào tạo trước được đào tạo trên MS COCO.

YOLOv5

YOLO (Bạn Chỉ Nhìn Một lần) là một phương pháp luận, cũng như họ các mô hình được xây dựng để phát hiện đối tượng. Kể từ khi thành lập vào năm 2015, YOLOv1, YOLOv2 (YOLO9000) và YOLOv3 đã được đề xuất bởi (các) tác giả - và cộng đồng học sâu tiếp tục với những tiến bộ nguồn mở trong những năm tiếp tục.

Ultralytics 'YOLOv5 là lần triển khai quy mô lớn đầu tiên của YOLO trong PyTorch, giúp nó dễ tiếp cận hơn bao giờ hết, nhưng lý do chính khiến YOLOv5 có được chỗ đứng như vậy cũng là do API mạnh mẽ và đơn giản tuyệt đẹp được xây dựng xung quanh nó. Dự án loại bỏ các chi tiết không cần thiết, đồng thời cho phép khả năng tùy chỉnh, thực tế là tất cả các định dạng xuất có thể sử dụng và áp dụng các phương pháp tuyệt vời giúp toàn bộ dự án vừa hiệu quả vừa tối ưu nhất có thể. Thực sự, đó là một ví dụ về vẻ đẹp của việc triển khai phần mềm nguồn mở và cách nó cung cấp năng lượng cho thế giới chúng ta đang sống.

Dự án cung cấp các trọng số được đào tạo trước trên MS COCO, một tập dữ liệu chủ yếu về các đối tượng trong ngữ cảnh, có thể được sử dụng để chuẩn và xây dựng các hệ thống phát hiện đối tượng chung - nhưng quan trọng nhất, có thể được sử dụng để chuyển kiến ​​thức chung về các đối tượng trong ngữ cảnh sang tùy chỉnh bộ dữ liệu.

Phát hiện đối tượng với YOLOv5

Trước khi tiếp tục, hãy đảm bảo rằng bạn có torchtorchvision Cài đặt:

! python -m pip install torch torchvision

YOLOv5 có tài liệu chi tiết, không vô nghĩa và một API đơn giản đẹp mắt, như được hiển thị trên chính repo và trong ví dụ sau:

import torch

model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
img = 'https://i.ytimg.com/vi/q71MCWAEfL8/maxresdefault.jpg'  
results = model(img)
fig, ax = plt.subplots(figsize=(16, 12))
ax.imshow(results.render()[0])
plt.show()

Đối số thứ hai của hub.load() phương thức xác định trọng số mà chúng tôi muốn sử dụng. Bằng cách chọn bất kỳ nơi nào giữa yolov5n đến yolov5l6 - chúng tôi đang tập tạ MS COCO đã được đào tạo trước. Đối với các mô hình tùy chỉnh:

model = torch.hub.load('ultralytics/yolov5', 'custom', path='path_to_weights.pt')

Trong mọi trường hợp - khi bạn chuyển đầu vào thông qua mô hình, đối tượng trả về sẽ bao gồm các phương pháp hữu ích để diễn giải kết quả và chúng tôi đã chọn render() chúng, trả về một mảng NumPy mà chúng ta có thể ghép vào một imshow() cuộc gọi. Điều này dẫn đến một định dạng độc đáo:

Lưu kết quả dưới dạng tệp

Bạn có thể lưu kết quả của phép suy luận dưới dạng tệp, bằng cách sử dụng results.save() phương pháp:

results.save(save_dir='results')

Thao tác này sẽ tạo một thư mục mới nếu nó chưa có và lưu cùng một hình ảnh mà chúng ta vừa vẽ dưới dạng tệp.

Cắt bỏ các đối tượng

Bạn cũng có thể quyết định cắt các đối tượng được phát hiện dưới dạng các tệp riêng lẻ. Trong trường hợp của chúng tôi, đối với mỗi nhãn được phát hiện, một số hình ảnh có thể được trích xuất. Điều này có thể dễ dàng đạt được thông qua results.crop() phương pháp, mà phá hủy một runs/detect/ thư mục, với expN/crops (trong đó N tăng cho mỗi lần chạy), trong đó một thư mục có hình ảnh đã cắt được tạo cho mỗi nhãn:

results.crop()
Saved 1 image to runs/detect/exp2
Saved results to runs/detect/exp2

[{'box': [tensor(295.09409),
   tensor(277.03699),
   tensor(514.16113),
   tensor(494.83691)],
  'conf': tensor(0.25112),
  'cls': tensor(0.),
  'label': 'person 0.25',
  'im': array([[[167, 186, 165],
          [174, 184, 167],
          [173, 184, 164],

Bạn cũng có thể xác minh cấu trúc tệp đầu ra bằng:

Xem hướng dẫn thực hành, thực tế của chúng tôi để học Git, với các phương pháp hay nhất, các tiêu chuẩn được ngành công nghiệp chấp nhận và bảng lừa đảo đi kèm. Dừng lệnh Googling Git và thực sự học nó!

! ls runs/detect/exp2/crops


! ls runs/detect/exp2/crops

Đếm đối tượng

Theo mặc định, khi bạn thực hiện phát hiện hoặc in results đối tượng - bạn sẽ nhận được số lượng hình ảnh mà suy luận đã được thực hiện cho điều đó results đối tượng (YOLOv5 cũng hoạt động với hàng loạt hình ảnh), độ phân giải của nó và số lượng mỗi nhãn được phát hiện:

print(results)

Kết quả này trong:

image 1/1: 720x1280 14 persons, 1 car, 3 buss, 6 traffic lights, 1 backpack, 1 umbrella, 1 handbag
Speed: 35.0ms pre-process, 256.2ms inference, 0.7ms NMS per image at shape (1, 3, 384, 640)

Suy luận với Scripts

Ngoài ra, bạn có thể chạy tập lệnh phát hiện, detect.py, bằng cách sao chép kho lưu trữ YOLOv5:

$ git clone https://github.com/ultralytics/yolov5 
$ cd yolov5
$ pip install -r requirements.txt

Và sau đó chạy:

$ python detect.py --source img.jpg

Ngoài ra, bạn có thể cung cấp URL, tệp video, đường dẫn đến một thư mục có nhiều tệp, một đường dẫn toàn cầu để chỉ khớp với một số tệp nhất định, liên kết YouTube hoặc bất kỳ luồng HTTP nào khác. Kết quả được lưu vào runs/detect thư mục.

Tiến xa hơn - Học sâu thực tế cho thị giác máy tính

Bản tính ham học hỏi của bạn khiến bạn muốn tiến xa hơn? Chúng tôi khuyên bạn nên kiểm tra Khóa học: “Học sâu thực tế cho thị giác máy tính với Python”.

Suy luận phát hiện đối tượng bằng Python với YOLOv5 và PyTorch PlatoBlockchain Data Intelligence. Tìm kiếm dọc. Ái.

Một khóa học thị giác máy tính khác?

Chúng tôi sẽ không phân loại các chữ số MNIST hoặc thời trang MNIST. Họ đã phục vụ phần của họ từ lâu lắm rồi. Quá nhiều tài nguyên học tập đang tập trung vào bộ dữ liệu cơ bản và kiến ​​trúc cơ bản trước khi để các kiến ​​trúc hộp đen nâng cao gánh vác gánh nặng về hiệu suất.

Chúng tôi muốn tập trung vào sự làm sáng tỏ, tính thực tiễn, sự hiểu biết, trực giácdự án thực tế. Muốn học làm thế nào Bạn có thể làm nên điều khác biệt? Chúng tôi sẽ đưa bạn đi từ cách bộ não của chúng ta xử lý hình ảnh để viết một bộ phân loại học sâu cấp độ nghiên cứu cho bệnh ung thư vú đến mạng lưới học tập sâu "ảo giác", dạy cho bạn các nguyên tắc và lý thuyết thông qua công việc thực tế, trang bị cho bạn bí quyết và công cụ để trở thành chuyên gia ứng dụng học sâu để giải quyết vấn đề thị giác máy tính.

Có gì bên trong?

  • Các nguyên tắc đầu tiên của tầm nhìn và cách máy tính có thể được dạy để "nhìn"
  • Các tác vụ và ứng dụng khác nhau của thị giác máy tính
  • Các công cụ giao dịch sẽ giúp công việc của bạn dễ dàng hơn
  • Tìm kiếm, tạo và sử dụng bộ dữ liệu cho thị giác máy tính
  • Lý thuyết và ứng dụng của Mạng nơ ron chuyển đổi
  • Xử lý sự thay đổi tên miền, đồng xuất hiện và các sai lệch khác trong tập dữ liệu
  • Chuyển giao Học tập và tận dụng thời gian đào tạo cũng như các tài nguyên tính toán của người khác vì lợi ích của bạn
  • Xây dựng và đào tạo một máy phân loại ung thư vú tiên tiến nhất
  • Cách áp dụng liều lượng hoài nghi lành mạnh vào các ý tưởng chủ đạo và hiểu được hàm ý của các kỹ thuật được áp dụng rộng rãi
  • Hình dung “không gian khái niệm” của ConvNet bằng t-SNE và PCA
  • Các nghiên cứu điển hình về cách các công ty sử dụng kỹ thuật thị giác máy tính để đạt được kết quả tốt hơn
  • Đánh giá mô hình thích hợp, hình dung không gian tiềm ẩn và xác định sự chú ý của mô hình
  • Thực hiện nghiên cứu miền, xử lý tập dữ liệu của riêng bạn và thiết lập các thử nghiệm mô hình
  • Các kiến ​​trúc tiên tiến, sự phát triển của các ý tưởng, điều gì làm cho chúng trở nên độc đáo và cách thực hiện chúng
  • KerasCV - một thư viện WIP để tạo các mô hình và đường ống hiện đại
  • Cách phân tích cú pháp và đọc các bài báo và tự thực hiện chúng
  • Lựa chọn mô hình tùy thuộc vào ứng dụng của bạn
  • Tạo một đường dẫn học máy từ đầu đến cuối
  • Phong cảnh và trực giác khi phát hiện đối tượng với R-CNN, RetinaNets, SSD và YOLO nhanh hơn
  • Phân đoạn phiên bản và ngữ nghĩa
  • Nhận dạng đối tượng trong thời gian thực với YOLOv5
  • Đào tạo máy dò đối tượng YOLOv5
  • Làm việc với Máy biến áp bằng KerasNLP (thư viện WIP dành cho ngành công nghiệp)
  • Tích hợp Transformers với ConvNets để tạo phụ đề cho hình ảnh
  • Ngủ sâu

Kết luận

Trong hướng dẫn ngắn này, chúng tôi đã xem xét cách bạn có thể thực hiện phát hiện đối tượng với YOLOv5 được xây dựng bằng PyTorch.

Dấu thời gian:

Thêm từ xếp chồng lên nhau