Suy luận phát hiện đối tượng theo thời gian thực bằng Python với Trí thông minh dữ liệu chuỗi khối YOLOv7 Plato. Tìm kiếm dọc. Ái.

Suy luận phát hiện đối tượng theo thời gian thực bằng Python với YOLOv7

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”.

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.

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 mẽ và đẹp mắt xung quanh YOLOv5 của họ, đã được các nhóm nghiên cứu và phát triển khác mở rộng thành các phiên bản mới hơn, chẳng hạn như YOLOv7.

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 YOLOv7 hiện đại.

YOLO Phong cảnh và YOLOv7

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ể.

YOLOv5 vẫn là dự án chủ yếu để xây dựng các mô hình Phát hiện Đối tượng và nhiều kho lưu trữ nhằm mục đích nâng cao phương pháp YOLO bắt đầu với YOLOv5 làm đường cơ sở và cung cấp một API tương tự (hoặc đơn giản là phân nhánh dự án và xây dựng trên nó). Đó là trường hợp của YOLOR (Bạn chỉ học một cách trình bày) và YOLOv7 được xây dựng dựa trên YOLOR (cùng tác giả). YOLOv7 là tiến bộ mới nhất trong phương pháp YOLO và đáng chú ý nhất, YOLOv7 cung cấp các đầu mô hình mới, có thể xuất ra các điểm chính (bộ xương) và thực hiện phân đoạn phiên bản bên cạnh chỉ hồi quy hộp giới hạn, điều này không chuẩn với các mô hình YOLO trước đó.

Điều này làm cho phân đoạn cá thể và phát hiện keypoint nhanh hơn bao giờ hết!

Ngoài ra, YOLOv7 hoạt động nhanh hơn và ở mức độ chính xác cao hơn so với các mô hình trước đó do giảm số lượng tham số và hiệu quả tính toán cao hơn:

Suy luận phát hiện đối tượng theo thời gian thực bằng Python với Trí thông minh dữ liệu chuỗi khối YOLOv7 Plato. Tìm kiếm dọc. Ái.

Bản thân mô hình đã được tạo ra thông qua những thay đổi về kiến ​​trúc, cũng như tối ưu hóa các khía cạnh của quá trình đào tạo, được gọi là “bag-of-freebies”, giúp tăng độ chính xác mà không làm tăng chi phí suy luận.

Cài đặt YOLOv7

Việc cài đặt và sử dụng YOLOv7 chỉ cần tải kho lưu trữ GitHub xuống máy cục bộ của bạn và chạy các tập lệnh đi kèm với nó.

Lưu ý: Thật không may, khi viết bài, YOLOv7 không cung cấp một API có lập trình rõ ràng như YOLOv5, thường được tải từ torch.hub(), chuyển kho lưu trữ GitHub vào. Đây có vẻ là một tính năng sẽ hoạt động nhưng hiện đang bị lỗi. Khi nó được khắc phục, tôi sẽ cập nhật hướng dẫn hoặc xuất bản một hướng dẫn mới trên API lập trình. Hiện tại - chúng ta sẽ tập trung vào các tập lệnh suy luận được cung cấp trong kho lưu trữ.

Mặc dù vậy, bạn có thể thực hiện phát hiện trong thời gian thực trên video, hình ảnh, v.v. và lưu kết quả một cách dễ dàng. Dự án tuân theo các quy ước tương tự như YOLOv5, có một tài liệu mở rộng, vì vậy bạn có thể tìm thấy câu trả lời cho nhiều câu hỏi thích hợp hơn trong kho lưu trữ YOLOv5 nếu bạn có một số.

Hãy tải xuống kho lưu trữ và thực hiện một số suy luận:

! git clone https://github.com/WongKinYiu/yolov7.git

Điều này tạo ra một yolov7 thư mục trong thư mục làm việc hiện tại của bạn, nơi chứa dự án. Hãy chuyển vào thư mục đó và xem các tệp:

%cd yolov7
!ls
/Users/macbookpro/jup/yolov7
LICENSE.md       detect.py        models           tools
README.md        export.py        paper            train.py
cfg              figure           requirements.txt train_aux.py
data             hubconf.py       scripts          utils
deploy           inference        test.py          runs

Lưu ý: Trên Google Colab Notebook, bạn sẽ phải chạy điều kỳ diệu %cd lệnh trong mỗi ô mà bạn muốn thay đổi thư mục của mình thành yolov7, trong khi ô tiếp theo đưa bạn trở lại thư mục làm việc ban đầu. Trên Local Jupyter Notebooks, thay đổi thư mục hàng loạt giữ cho bạn ở trong đó, vì vậy không cần phải phát hành lại lệnh nhiều lần.

Sản phẩm detect.py là các tập lệnh suy luận chạy các phát hiện và lưu các kết quả trong runs/detect/video_name, nơi bạn có thể chỉ định video_name trong khi gọi detect.py kịch bản. export.py xuất mô hình sang các định dạng khác nhau, chẳng hạn như ONNX, TFLite, v.v. train.py có thể được sử dụng để đào tạo một máy dò YOLOv7 tùy chỉnh (chủ đề của một hướng dẫn khác) và test.py có thể được sử dụng để kiểm tra một bộ dò (được tải từ tệp trọng số).

Một số thư mục bổ sung giữ các cấu hình (cfg), dữ liệu mẫu (inference), dữ liệu về xây dựng mô hình và cấu hình COCO (data), Vv

Kích thước YOLOv7

Các mô hình dựa trên YOLO có quy mô tốt và thường được xuất dưới dạng các mô hình nhỏ hơn, kém chính xác hơn và các mô hình lớn hơn, chính xác hơn. Sau đó, chúng sẽ được triển khai cho các thiết bị yếu hơn hoặc mạnh hơn tương ứng.

YOLOv7 cung cấp một số kích thước và so sánh chúng với MS COCO:

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ó!

Mô hình Kích thước thử nghiệm APthử nghiệm AP50test AP75test lô 1 khung hình / giây lô 32 thời gian trung bình
YOLOv7 640 51.4% 69.7% 55.9% 161 fps 2.8 ms
YOLOv7-X 640 53.1% 71.2% 57.8% 114 fps 4.3 ms
YOLOv7-W6 1280 54.9% 72.6% 60.1% 84 fps 7.6 ms
YOLOv7-E6 1280 56.0% 73.5% 61.2% 56 fps 12.3 ms
YOLOv7-D6 1280 56.6% 74.0% 61.8% 44 fps 15.0 ms
YOLOv7-E6E 1280 56.8% 74.4% 62.1% 36 fps 18.7 ms

Tùy thuộc vào phần cứng cơ bản mà bạn đang mong đợi mô hình chạy trên đó và độ chính xác cần thiết - bạn có thể chọn giữa chúng. Mô hình nhỏ nhất đạt hơn 160FPS trên hình ảnh có kích thước 640, trên V100! Bạn cũng có thể mong đợi hiệu suất thời gian thực đạt yêu cầu trên các GPU tiêu dùng phổ biến hơn.

Suy luận video với YOLOv7

tạo một inference-data thư mục để lưu trữ hình ảnh và / hoặc video mà bạn muốn phát hiện. Giả sử nó nằm trong cùng một thư mục, chúng tôi có thể chạy một tập lệnh phát hiện với:

! python3 detect.py --source inference-data/busy_street.mp4 --weights yolov7.pt --name video_1 --view-img

Điều này sẽ nhắc nhở một video dựa trên Qt trên máy tính để bàn của bạn, trong đó bạn có thể xem tiến trình và suy luận trực tiếp, từng khung hình, cũng như xuất trạng thái ra đường ống xuất tiêu chuẩn của chúng tôi:

Namespace(weights=['yolov7.pt'], source='inference-data/busy_street.mp4', img_size=640, conf_thres=0.25, iou_thres=0.45, device='', view_img=True, save_txt=False, save_conf=False, nosave=False, classes=None, agnostic_nms=False, augment=False, update=False, project='runs/detect', name='video_1', exist_ok=False, no_trace=False)
YOLOR 🚀 v0.1-112-g55b90e1 torch 1.12.1 CPU

Downloading https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt to yolov7.pt...
100%|██████████████████████████████████████| 72.1M/72.1M [00:18<00:00, 4.02MB/s]

Fusing layers... 
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
Model Summary: 306 layers, 36905341 parameters, 6652669 gradients
 Convert model to Traced-model... 
 traced_script_module saved! 
 model is traced! 
 
video 1/1 (1/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1071.6ms) Inference, (2.4ms) NMS
video 1/1 (2/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1070.8ms) Inference, (1.3ms) NMS

Lưu ý rằng dự án sẽ chạy chậm trên các máy dựa trên CPU (chẳng hạn như 1000ms mỗi bước suy luận trong kết quả đầu ra ở trên, chạy trên MacBook Pro 2017 dựa trên Intel) và nhanh hơn đáng kể trên các máy dựa trên GPU (gần ~ 5ms / khung hình trên V100). Ngay cả trên các hệ thống dựa trên CPU chẳng hạn như hệ thống này, yolov7-tiny.pt chạy ở 172ms/frame, mặc dù khác xa với thời gian thực, nhưng vẫn rất tốt để xử lý các hoạt động này trên CPU.

Sau khi chạy xong, bạn có thể tìm thấy video kết quả dưới runs/video_1 (tên chúng tôi đã cung cấp trong detect.py cuộc gọi), được lưu dưới dạng .mp4:

Suy luận phát hiện đối tượng theo thời gian thực bằng Python với Trí thông minh dữ liệu chuỗi khối YOLOv7 Plato. Tìm kiếm dọc. Ái.

Suy luận về hình ảnh

Suy luận về hình ảnh tóm tắt lại quy trình tương tự - cung cấp URL cho một hình ảnh trong hệ thống tệp và gọi detect.py:

! python3 detect.py --source inference-data/desk.jpg --weights yolov7.pt

Lưu ý: Khi viết, đầu ra không chia tỷ lệ nhãn thành kích thước hình ảnh, ngay cả khi bạn đặt --img SIZE. Điều này có nghĩa là các hình ảnh lớn sẽ có các đường hộp giới hạn thực sự mỏng và các nhãn nhỏ.

Suy luận phát hiện đối tượng theo thời gian thực bằng Python với Trí thông minh dữ liệu chuỗi khối YOLOv7 Plato. Tìm kiếm dọc. Ái.

Kết luận

Trong hướng dẫn ngắn này - chúng tôi đã giới thiệu sơ lược về YOLOv7, tiến bộ mới nhất trong gia đình YOLO, được xây dựng dựa trên YOLOR. Chúng tôi đã xem xét cách cài đặt kho lưu trữ trên máy cục bộ của bạn và chạy các tập lệnh suy luận phát hiện đối tượng với mạng được đào tạo trước về video và hình ảnh.

Trong các hướng dẫn tiếp theo, chúng tôi sẽ đề cập đến việc phát hiện keypoint và phân đoạn phiên bản.

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 theo thời gian thực bằng Python với Trí thông minh dữ liệu chuỗi khối YOLOv7 Plato. 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
  • Tối ưu hóa mô hình Deep Learning cho thị giác máy tính

Dấu thời gian:

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