Giải Thích Lý Thuyết Của YOLO V3 - Nghịch Code Cho Vui

Life

  • Home
  • Life
  • CTF
  • AI

tdh's blog

20200312

Giải thích lý thuyết của YOLO v3

01_YOLOv3-introduction.jpg Các định nghĩa cần biết : Residual Blocks: Skip connections: Upsampling: Bouding box regression: RoI - Region of Interest: Vùng quan tâm, vùng được lựa chọn để xử lý biến đổi. IoU - Intersection over Union: Phần giao của 2 box / Phần hợp của 2 box NMS - Non-maximum suppression: Batch nomarlize: FCN - Full convolutional: Leaky ReLU activation: Softmax: Trong bài hướng dẫn này tôi sẽ giới thiệu YOLO model là gì và cách nó hoạt động 1 cách chi tiết. Nội dung hướng dẫn:
  1. Yolo là gì
  2. Điều kiện tiên quyết
  3. Fully Convolutional Neural Network
  4. Diễn tả đầu ra
  5. Tạo Boxes và Dự đoán
  6. Kích thước của Bouding Box
  7. Điểm của đối tường và niềm tin của class
  8. Dự đoán kể cả các loại kích thước
  9. Xử lý đầu ra (Lọc bằng các giới hạn về điểm của class)
1. Yolo là gì ? YOLO - You Only Look One (Bạn chỉ nhìn 1 lần) là một thuật toán sử dụng CNN cho nhận dạng đối tượng. Bạn chỉ nhìn một lần hay YOLO là 1 trong những thuật toán nhận dạng đối tượng nhanh nhất hiện nay. Mặc dù nó không phải thuật toán chính xác nhất, tuy nhiên là một lựa chọn tốt cho chúng ta khi cần các loại nhận diện thời gian thực, với hàm mất mát không quá chính xác. Trong sự so sánh với các loại thuật toán nhận diện, một thuật toán nhận diện không chỉ dự đoán nhãn class mà còn nhận ra vị trí của đối tượng nữa. Vì vậy không chỉ là phân loại hình ảnh vào các category, mà còn đồng thời nhận diện nhiều đối tượng trong một ảnh. Thuật toán này áp dụng một NN đơn cho một ảnh đầy đủ. Nó có nghĩa là cái network này chia ảnh thành các khu vực và nhận diện bouding boxes và khả năng của từng vùng. Những bouding boxes này được làm trọng số bởi các dự đoán khả năng. Lần cuối khi tôi làm việc với nhận diện hình ảnh dùng cho CS:GO aim bot, nhưng nó khá chậm (~10FPS). Nên bây giờ là thời gian làm nó làm việc nhanh hơn. Một trong những điều mang đi lớn nhất từ kinh nghiệm này là nhận ra răng con đường tốt nhất để học nhận diện hình ảnh là implement thuật toán bằng chính bản thân mình từ đầu. Đây chính là những gì chúng tôi làm trong bài hướng dẫn này. Nhưng trước khi làm tay mình vấy bẩn bằng code, chúng ta phải hiểu YOLO làm việc như thế nào. 2. Điều kiện tiên quyết Để hoàn toàn hiểu bài hướng dẫn:
  • Bạn nên hiểu CNN làm việc ntn. Nó bao gồm hiểu biết về: Residual Blocks, skip connection và Upsampling.
  • Nhận diện hình ảnh là gì, hồi quy bouding box, IoU và non-maximum suppression
  • Bạn nên có khả năng để tạo ra NN đơn giản khi nhàn rỗi.
3. Fully CNN YOLO chỉ sử dụng các convolutional layers(lớp tích chập), khiến nó trở thành một fully convolutional network (FCN). Trong bài báo YOLO v3, tác giả trình bày một thứ mới, và sâu hơn về kiến trúc của feature extractor (tích xuất tính nawng) gọi là Darknet-53. Giống như cái tên được nói đến, nó bao gồm 53 convolutional layer, mỗi lớp sẽ bao gồm batch normalization layer và hàm kích hoạt Leaky ReLU. Không sử dụng pooling, và một lớp tích chập với stride 2 được sử dụng để downsample cái feature maps. Điều này giúp tránh khỏi mất mất của low-level features thường bị ảnh hưởng bởi pooling. Darknet-53.png YOLO là bất biến đối với kích thước của hình ảnh đầu vào. Tuy nhiên, trong thực tế chúng ta luôn muốn kết hợp các đầu vào hằng số cho nhiều vấn đề chỉ hiển thị phần đầu của chúng khi chúng ta thực hiện các thuật toán (???). Một vấn đề lớn kéo theo những vấn đề này là nếu chúng ta muốn xử lý những hình ảnh trong batch (hình ảnh trong các batch sẽ được xử lý đồng thời bởi GPU, tăng tốc tính toán), chúng ta cần tất cả các ảnh đã fix cứng chiều cao và chiều rộng. Điều này cần ghép nhiều hình ảnh vào 1 batch lớn hơn. Mạng network downsamples hình ảnh bằng yếu tố gọi là stride. Ví dụ: nếu stride của mạng là 32, thì hình ảnh đầu vào 416x416 sẽ đưa ra output là 13x13. Thông thường, stride bất cứ lớp nào trong mạng sẽ cân bằng với yếu tố bởi đầu ra của lớp sẽ nhỏ hơn đầu vào hình ảnh trong mạng. 4. Interpreting the output - Diễn tả đầu ra Điều đầu tiên cần biết:
  • Đầu vào một lô (batch) hình ảnh sẽ có hình dạng (m,416,416,3)
  • Đầu ra là 1 danh sách các bounding boxes kéo theo nhận diện classes. Mỗi bouding box được đại diện bởi 6 con số (pc, bx, by, bh, bw, c). Nếu chúng ta mở rộng c thành một vector 80-chiều, mỗi bouding box là đại diện bởi 85 con số.
Cùng cách đó với tất cả các đổi tượng nhận dạng đặc trưng học được bằng convolutional layer sẽ được đưa vào classifier/regressor, cái mà sẽ làm nên dự đoán nhận dạng (kết hợp bouding boxes, class label, vvv) Trong YOLO, dự đoán là cong bằng cách sử dụng một convolutional layer mà sử dụng 1x1 convolutions. Vì vậy điều đầy tiên cần chú ý là cái đầu ra feature map (mạng đặc truwng). Khi mà chúng ta sử dụng 1x1 convolutions, kích thước của mạng dự đoán chính xác là kích cỡ của mạng đặc trưng trước nó. Trong YOLO v3, cái cách mà bạn diễn tả đầu ra của mạng dự đoán là mỗi cell có thể dự đoán một số fixed của bouding boxes. Ví dụ nếu chúng ta có (B x (5+C)) đầu vào trong mạng đặc trưng. B đại diện cho số lượng bouding boxes mỗi cell có thể dự đoán. Theo bài báo, mỗi cái trong B bouding boxes có 5 + C giá trị, diễn tả tọa độ ở giữa, số chiều , điểm đổi tượng và C class confidences của mỗi bouding box. YOLO v3 dự đoán 3 bouding boxes cho mỗi cell. Chúng tối dự đoán mỗi cell của mạng đặc tưng một đối tượng qua việc một trong những bouding boxes nếu trung tâm của đối tượng rơi vào trường tiếp nhận của cell đó. Điều này chính là cách YOLO được train như thế nào, nơi nào chỉ một bouding box chịu trách nhiệm cho nhận diện bất kì vật thể nào. Đầu tiền, chúng ta phải xác minh cái cell nào mà bouding box thuộc về. Để làm điều đó , chúng ta chia ảnh đầu vào thành các ô kích thước bằng với kích thước của bản đồ đặc trưng cuối cùng. Nhìn vào ví dụ dưới đây, ảnh đầu vào là 416x416 và stride của mạng là 32. Như đã chỉ ra trươc đây, chiều của bản đồ đặc trưng sẽ là 13x13. Và chúng ta chia ảnh đầu vào thành 13x13 cells. yolov3-dog.png Sau đó, cell (trong ảnh đầu vào) chứa trung tâm của box chịu trách nhiệm cho dự đoán đối tượng. Trong hình ảnh, cell được đánh dấu đỏ là trung tâm của hộp vật thể thực sự (màu vàng). Bây giờ, ô màu đỏ sẽ được gọi là ô thứ 7 trên hàng ngang của lưới hình ảnh. Bây giờ chúng ta giao ô thứ 7 ở hàng ngnag của bản đồ đặc trưng (ô tương ứng trên bản đồ đặc trưng) là một trong những ô được dùng để nhận diện đó là con chó. Bây giờ, cái ô này có thể dự đoán 3 bouding boxes. cái nào được đánh dấu nhãn của con chó? Để có thể hiểu được điều đó, chúng ta phải biết ý tưởng của anchors. (Lưu ý rằng cell mà chúng ta nói đến ở đây là một ô trong dự đoán bản đồ đặc trưng). Chúng ta chia hình ảnh đầu vào thành một lưới ô để quyết định cái cell nào trong bản đồ dự đoán đặc trưng sẽ dùng để dự đoán. Để cho dễ hiểu hơn chúng ta phân tích một ví dụ khác với nhiều ảnh : Bây giờ chúng ta sử dụng 5 anchor boxes. Vì vậy chúng ta có nghĩ về cấu trúc YOLO như sau: IMAGE(m,608,608,3) => DEEP CNN => ENCODING (m, 19, 19, 5, 85). Có ai đó sẽ hỏi rằng 19 ở đâu ra ? câu trả lời: giống như 608/32 = 19 Hãy nhìn chi tiết tốt hơn ở việc encoding: car_example_1.png Nếu điểm giữa của đối tượng rơi vào một ô lưới, thì cái ô đó sẽ có trách nhiệm cho việc nhận diện đối tượng. Vì chúng ta đang sử dụng 5 anchor boxes, mỗi ô trong 19x19 ô lưới sẽ mã hóa thông tin khoảng 5 boxes. Anchor boxes được định nghĩa chỉ bởi độ rộng và chiều cao của nó. CHo đơn giản, chúng ta làm phẳng 2 chiều của của mã hóa shape (19, 19, 5, 85). Vì vậy đầu ra của Deep CNN là (19, 19, 425): car_example_2.png Bây giờ, với mỗi box (của mỗi cell) sẽ tính toán theo element-wise product và rút ra kết luận mà hộp có chưa class nào. car_example_3.png Đây là một cách để hình dung YOLO dự đoán trên một hình anhr:
  • Với mỗi 19x19 lưới ô, tìm vị trí có điểm khả năng cao nhất (lấy tối đa trên cả 5 anchor boxes và trên các lớp khác nhau)
  • Tô màu ô lưới theo đối tượng mà ô lưới xem xét có khả năng nhất.
Làm kết quả theo hình ảnh dưới : car_example_4.png Hình dung ở hình trên không phải phần core của thuật toán YOLO mà bản thân nó dùng cho dự đoán, đó chỉ là một cách tốt để hình dung một kết quả trung gian của thuật toán. Một cách khác để hình dung đầu ra của YOLO là xuất các bouding boxes ra ngoài. Làm như thế ta có kết quả dưới đây : car_example_5.png Trong hình trên, chúng ta đưa những hộp mà mô hình đã có khả năng cao là vật thể, tuy nhiên vẫn có quá nhiều boxes. Chúng ta muốn lọc đầu ra của thuật toán và nhận diện càng nhỏ số lượng đối tượng nhận diện. Để làm điều đó, chúng ta sẽ sử dụng non-max suppresion, sẽ được nói đến ở mục 9. 5. Anchor Boxes và Dự đoán Nó có thể có nghĩa để dự đoán chiều rộng và chiều cao của một bouding box, nhưng trong thực tế, điều đó dẫn đến đạo hàm không ổn định trong quá trình training. thay vào đó, hầu hết các mô hình nhận dạng đối tượng hiện đại dự đoán biến đổi log-space, hoặc đơn giản bù cho định nghĩa trước mặc định bouding boxes gọi là anchors. sau đó, những biến đổi sẽ được dùng cho anchor boxes để bắt buộc cho dự đoán. YOLO v3 có 3 anchors, cái kết quả trong dự đoán 3 bouding boxes mỗi ô. Anchors là sự sắp xếp độ ưu tiên bouding box, mà chúng ta tính toán trên dữ liệu COCO sử dụng k-mean. Chúng ta sẽ dự đoán độ rộng và chiều cao của hộp từ cụm trung tâm. tọa độ điểm trung tâm của hộp liên quan tới vị trí của phần lọc đã được dự đoán sử dụng hàm sigmoid. Theo công thức mô tả cách đầu ra network được biến đổ để bắt buộc dự đoán bouding box: bx=σ(tx)+cx by=σ(ty)+cy bw=pwetw bh=pheth Ở đây bx, by, bw, by là tọa độ trung tâm x,y , chiều rộng và chiều cao của dự đoán. tx, ty, tw, th là đầu ra network. cx và cy là tọa độ top-left của lưới ô. pw và ph là chiều của hộp. Tọa độ trung tâm Chúng ta dự đoán tọa độ trung tâm thông qua hàm sigmoid. Điều này bắt buộc giá trị của đầu ra phải nằm giữa [0,1]. Bình thường YOLO sẽ không dự đoán tọa độ chính xác của trung tâm bouding box. Nó sẽ dự đoán phần dư cái mà :
  • Liên quan tới góc top-left của lưới ô cái mà đang dự đoàn đối tượng
  • Normalised bằng các chiều của ô từ bản đồ đặc trưng , cái là 1.
Ví dụ, xem xét trường hợp hình ảnh con chó ở trên. Nếu tọa độ dự đoán cho trung tâm là (0.4, 0.7), thì có nghĩa là trung tâm nằm tại (6.4, 6.7) trên lưới ô 13x13 bản đồ đặc trưng. (khi mà tọa độ top-left của ô đỏ là (6,6)). Nhưng chờ đã, điều gì xảy ra nếu dự đoán tọa độ x và y tốt hơn, ví dụ như (1.2, 0.7). Điều này có nghĩa là trung trâm nằm ở (7.2, 6.7). Trung tâm bây giờ nằm trong ô nằm bên cạnh ô đỏ, hoặc ô thứ 8 hàng 7. Điều này phá vỡ lý thuyết của YOLO bởi vì neus chúng ta bổ nhiệm cái hộp đỏ có trách nhiệm nhận dạng con chó, thì trung tâm của con chó phải nằm ở ô đỏ, và không nằm ở cái bên cạnh. Vì vậy để giải quyết vấn đề và để đầu ra được đi qua hàm sigmoid, đầu ra nằm trong khoảng [0, 1] , một cách hiệu quả là giữ cái trung tâm của ô lưới mà đang dự đoán. 6. Chiều của Bouding box Chiều của bouding box được dự đoán bằng cách áp dụng biến đổi log-space cho đầu ra rồi nhân với một anchor. bounding-box.png Đây là dự đoán, bw và bh được chuẩn hoá bằng chiều cao và chiều rộng của ảnh. (nhãn huấn luyện cũng được chọn theo cách này). Vì vậy nếu dự đoán bx và by cho hộp chứa con chó là (0.3, 0.8), sau đó chiều rộng và chiều cao chính xác trên 13x13 là (13x0.3, 13x0.8). 7. Objectness Score và Class confidences Đầu tiên của các object score đại diện cho khả năng mà đối tượng được bao bên trong bouding box. Nó nên gần 1 cho họp đỏ và gần như là ô lưới, bất cứ cái nào gần 0, ô lưới gần góc. Objectness score đồng thời qua hàm sigmoid, nó được hiểu là một xác suât. Nói về class confifences, chúng đại diện cho khả năng nhận diện đối tượng theo class cụ thể (Dog, cat, person, ...). Trong trường hợp của phiên bản YOLO, nó sử dụng softmax để tính điểm class. Trong YOLO, tác giả quyết định dùng sigmoid. Nguyên nhân là softmaxing điểm các clacs giả thiết rằng các class là loại trừ lẫn nhau. Đơn giản là, nếu một đối tượng thuộc 1 class, thì nó sẽ không thuộc về class khác. Nó là đúng với dữ liệu COCO, cái mà chúng ta implement trước. 8. Prediction across different scales YOLO v3 dự đoán thông qua 3 thang đo khác nhau. Lớp nhận diện được sử dụng nhận dạng tại bản đồ đặc trưng của 3 kích cỡ khác nhau, có stride 32, 16, 8 . Điều này có nghĩa là, với đầu vào 416x416, chúng ta dự đoán ở 13x13, 26x26 và 52x52. Khi mà giảm độ lớn của hình ảnh đầu vào đến lớp nhận diện đầu tiên, cái mà được dữ dụng cho bản độ đặc trưng với stride 32. Xa hơn, layers được tăng lên bởi factor 2 và nối với bản độ đặc trưng của layer trước có định dạng kích thước bản đồ đặc trưng. Một nhận diện khác là sử dụng layer với stride 16. upsampling tương tự sẽ được sử dụng lại, và kết quả nhận diện cuối cùng, được tạo với layer với stride 8. Tại mỗi thang đo, mỗi ô dự doán 3 bouding boxes dùng 3 anchors, tổng số 9 anchors được sử dụng. (anchors là khác nhau với mỗi thang đo). yolo-scales.png Tác giả của YOLO báo cáo rằng điều này giúp cho việc nhận diện các đối tượng nhỏ tốt hơn, một điều thường bị phàn nàn ở các phiên bản trước của YOLO. Upsampling có thể giúp mạng network học làm mịn đặc trưng là phương tiện nhận diện những vật thể nhỏ. 9. Output Processing (Filtering with a threshold on class scores) Cho hình ảnh có cỡ 416x416, YOLO dự đoán ((52x52) + (26x26) + (13x13)) x 3 = 10647 bouding boxes. Tuy nhiên, trong trường hợp ảnh của chúng ta, chỉ có 1 đối tượng, 1 con chó. Vì vậy, bạn có thể hỏi làm sao chúng ta có thể giảm số lượng dự đoán từ 10647 xuống còn 1? Đầu tiên, chúng ta lọc các box dựa trên điểm objectness score. Nói chung là, boxes có điểm dưới threshold (ví dụ dưới 0.5) sẽ bị loại. TIếp theo, Non-maximum Supperssion (NMS) có xu hướng chữa vấn đề có nhiều dự đoán cùng 1 ảnh. Ví dụ, tất cả 3 bouding boxes của ô màu đỏ có dể nhậ diện một box hoặc ô liền kề có thể nhận diện cùng 1 đối tượng, vì vậy NMS được dùng để xóa nhiều nhận diện trùng nhau. Đặc biệt, chúng ta sẽ làm theo những bước sau đây :
  • Loại bỏ các hộp các điểm thấp ( có nghĩa là hộp khong tự tin lắm về việc phát hiện một class mới)
  • Lựa chọn chỉ 1 box khi nhiều hộp chồng lên với mỗi cái khác và nhận diện cùng 1 vật thể (Non-max suppression)
Dễ hiểu hơn tôi sẽ dùng cùng ví dụ với hình ô tô đã được nhắc đến ở trên. Đầu tiên chúng ta sẽ dùng lớp lọc đầu tiên bằng giới hạn threshold. Chúng ta muốn loại bỏ bất cứ box nào có class score nhỏ hơn threshold đã chọn. Mô hình cho chúng ta tổng cộng 19x19x5x85 số, với mỗi box được diễn tả bởi 85 số. Nó sẽ thuận tiện nếu sắp xếp lại (19, 19 ,5 ,85) (hoặc (19, 19, 425)) chiều tensor theo giải thích sau:
  • box_confidence: tensor của (19x19, 5,1) bao gồm pc (confidence probality của một số đối tượng ) của mỗi trong 5 boxes dự đoán trong mỗi ô 19x19.
  • boxes: tensor của (19x19, 5, 4) bao gồm (bx, by, bh, bw) cho mỗi 5 boxes mỗi ô
  • box_class_probs: tensor của (19x19,5,80) bao gồm khả năng nhận diện (c1, c2, ... c80) cho mỗi 80 classes cho mỗi 5 boxes mỗi ô
Mặc dù sau khi lọc bằng thresholing qua điểm classes, chúng ta vẫn kết thúc với nhiều hộp chồng lên nhau. Một bộ lọc thứ 2 dành cho lựa chọn hộp đúng được gọi là NMS. NMS sử dụng rất hàm quan trọng gọi là "Intersection over Union", gọi là IoU car_example_6.png Implementing IoU:
  • Chúng ta định nghĩa một box sử dụng 2 góc (góc trên trái và góc dưới phair): (x1, y1,x2, y2) hơn là sử dụng điểm giữa và chiều dài/chiều cao
  • để tính toàn khu vục của ô vuông chúng ta cần nhân (y2-y1) x (x2-x1)
  • CHúng ta cũng cần tìm tòa độ (xi1, yi1, xi2, yi2) của phần giao của 2 hopoj:
    • xi1 = tọa độ x1 lớn nhất của 2 hộp
    • yi1 = tọa độ y1 lớn nhất của 2 hộp
    • xi2 = tọa độ x2 nhỏ nhất của 2 hộp
    • yi2 = tọa độ y2 nhỏ nhất của 2 hộp
Arguments: box1 - hộp đầu tiên, danh sách đối tượng với tọa độ (x1,y1,x2,y2) box2 - hộp thứ 2, danh sách đối tượng với tọa độ (x1,y1,x2,y2) xi1 = max(box1[0], box2[0]) yi1 = max(box1[1], box2[1]) xi2 = min(box1[2], box2[2]) yi2 = min(box1[3], box2[3]) inter_area =(xi2 - xi1)*(yi2 - yi1)# Formula: Union(A,B) = A + B - Inter(A,B) box1_area =(box1[3]- box1[1])*(box1[2]- box1[0]) box2_area =(box2[3]- box2[1])*(box2[2]- box2[0]) union_area =(box1_area + box2_area)- inter_area # compute the IoUIoU= inter_area / union_area Bây giờ, để cài đặt non-max suppression, bước key tiếp theo là :
  • lựa chọn box có điểm cao nhất
  • tính toàn sự chồng lặp của nó với tất cả hộp khác, và xóa hộp bị chồng chặp có iou_threshold cao hơn
  • trở lịa bước 1 và liệt kê đến khi không còn boxes với điểm thấp hơn hộp đang được chọn
Những bước này sẽ xóa hết tất cả các box có chồng lặp lớn với box đang được chọn. Chỉ còn lại boxes tốt nhất : car_example_7.png 10. Implementation YOLO chỉ có thể nhận diện đối tượng dựa theo các classes trong dataset sử dụng cho train network. Tôi sẽ sử dụng các file trọng số chính thức cho hệ thống nhận diện của chúng ta. Những bộ trọng số này có thể bắt buộc trainning trên COCO dataset, và do đó chúng ta có thể nhận diện được 80 đối tượng nhóm. Một lần nữa tôi sẽ trể lại với ví dụ về ô tô, để tổng hợp mô hình của chúng ta :
  • Ảnh đầu vào (608, 608,3)
  • Đầu vào qua CNN, kết quả số chiều đầu ra (19,19,5,85)
  • Sau khi làm phẳng 2 chiều cuối, đầu ra (19,19,425)
    • Mỗi ô trong 19x19 của đầu vào ảnh cho 425 con số
    • 425 = 5x85 bởi vì mỗi ô bao gồm dự đoán 5 boxes, và tương ứng có 5 anchor boxes
    • 85 = 5 + 80 trong đó 5 là (pc, bx, by, bh, bw) có 5 số, và 80 là số class mà chúng ta muốn nhận diện
  • CHúng ta lựa chọn một số boxes dựa treen:
    • Điểm giới hạn : vứt các boxes có điểm nhận diện của class nhỏ hơn threshold
    • Non-max suppresion: Tính toán IoU (giao/ hợp của 2 hộp ) và từ chối lựa chọn các hộp chồng lên nhau
  • Cho ra đầu ra YOLO
Kết luận : Đây là phần lý thuyết. Tôi đã giải thích đủ về thuật toán YOLO để cho mọi người hiểu cách nó hoạt động. Trong phần sau, Tôi sẽ cài đặt một số layers yêu cầu để chạy YOLO v3 trên tensorflow. Source: https://pylessons.com/YOLOv3-introduction/ (draft_3-12-2020) bh Google Account Video Purchases Manila, Metro Manila, Philippines

Không có nhận xét nào:

Đăng nhận xét

Trang chủ Đăng ký: Đăng Nhận xét (Atom)

Giải thích lý thuyết của YOLO v3

Các định nghĩa cần biết : Residual Blocks: Skip connections: Upsampling: Bouding box regression: RoI - Region of Interest: Vùng quan...

  • Giải thích lý thuyết của YOLO v3 Các định nghĩa cần biết : Residual Blocks: Skip connections: Upsampling: Bouding box regression: RoI - Region of Interest: Vùng quan...

Nhãn

  • AI
  • DL
  • ML
  • YOLO

Hi dud3

tdh Xem hồ sơ hoàn chỉnh của tôi

Từ khóa » Darknet Yolo Là Gì