Series YOLO: #4 Tìm hiểu cấu trúc YOLOv1,v2,v3 và v4 – Phần 2

1. Giới thiệu về YOLOv3, YOLOv4.

Ở phần trước, chúng ta đã tìm hiểu kỹ về YOLOv1 và YOLOv2, đây cũng là nền tảng để có thể tìm hiểu các version sau. Cùng điểm qua các kiến thức trước khi đi chúng ta cùng bước vào tìm hiểu YOLOv3 nhé:

Bây giờ chúng ta cùng đi tìm hiểu tiếp thôi.

2.YOLOv3-  Better, not Faster, Stronger.

2.1. Cấu trúc.

Như chúng ta đã tìm hiểu, ở YOLOv1 thì sử dụng 24 lớp chập, sang YOLOv2 thì sử dụng backbone là darknet19 cộng với 11 lớp chập nữa để nhận dạng.

Vậy thì đối với YOLOv3 thì như thế nào?

  • YOLOv3 sử dụng darknet53 làm backbone( có 53 lớp chập).
Darknet53
Cấu trúc Darknet53.
  • Và bản thân YOLOv3 có thêm 53 lớp chập nữa.
  • Tổng cộng chúng ta có 106 lớp chập.
YOLOv3
Cấu trúc YOLOv3.
  • Đã đưa vào các lớp như : residual block, upsampling, skip connections.

2.2. Nhận dạng ở các tỉ lệ ảnh khác nhau.

Đối với YOLOv1, chúng ta đã biết thuật toán này chia bức ảnh thành các ô lưới với kích thước S x S với S =3,5 hoặc 7. Còn đối với YOLOv2 thì kích thước này là 13. Nhưng đối với các kích thước đó, vẫn chưa đủ để có thể tìm kiếm những đối tượng có kích thước nhỏ trong bức hình. Vậy nên YOLOv3 đã xử lý bằng cách là nhận dạng 3 lần trên một bức ảnh với kích thước khác nhau.

GIả sử ta có bức ảnh đầu vào có kích thước : 416×416:

  • Tại lớp chập thứ 82: Bức ảnh được chia thành các ô lưới với kích thước 13×13 ( bức ảnh đã được chia với 32). Tại đây, các ô lưới sẽ có trách nhiệm tìm các vật thể có kích thước lớn trong bức hình.
  • Tại lớp chập thứ 94: Bức ảnh được chia thành các ô lưới với kích thước 26 x26 ( bức ảnh được chia với 16). Và có trách nhiệm tìm các vật thể có kích thước trung bình.
  • Tương tự, tại lớp chập 106, bức ảnh được chia thành các ô lưới với kích thước 52×52(  ảnh được chia với 8) và có trách nhiệm tìm các vật thể có kích thước bé.
  • Bức ảnh sau khi được chia thành các ô lưới, thì được gọi là Downsample images( ảnh giảm mẫu)
detection
Quá trình tìm kiếm vật thể.

2.3 Tensor.

Ở YOLOv1 ta đã biết, kết quả cuối cùng của model là S xS các tensor( sau 24 lớp chập và các lớp khác, kết thúc là 2 lớp fully connected) , với mỗi tensor có kích thước 1x1x30, còn ở YOLOv2 thì là 13x13x125.

Sang tới YOLOv3 thì kết quả đầu ra lại được thay đổi thành SxSx255, trong đó:

  • S lần lượt được gán với các giá trị:13,26,52. Và
  • Giá trị 255 = B x (5+C) với B = 3 là số lượng bounding box, và C =80 là số lớp vật thể.
  • Mỗi bounding box chứa 5 giá trị bao gồm: x,y,w,h và p( xác suất ô lưới có chứa vật thể) như đã giải thích ở YOLOv1.
  • Để tính ra kết quả cuối cùng thì mỗi bounding box sẽ nhân giá trị P  lần lượt với P1,P2,…Pc ( là xác suất ô lưới  đó chứa các vật thể cụ thể) và lựa chọn ra kết quả cao nhất.
  • Với mỗi bức ảnh được nhận dạng, thì YOLOv3 sẽ sinh ra (13 x 13 + 26 x 26 + 52 x 52) x3 = 10,647 bounding box. Từ đó sẽ tính xác suất và xuất ra kết quả là những vật thể có xác suất cao nhất.
Tensor
Kích thước của tensor.

2.4. Anchor box.

Anchor box thực ra là các bounding box nhưng được tạo sẵn ( chứ không phải kết quả của quá trình nhận dạng – prediction).

Với mỗi ô lưới sẽ 9 anchor box khác nhau với kích thước:

  • Ô lưới 13×13: (116×90),(156×198),(373×326).
  • Ô lưới 26×26: (30×61), (62×45), (59×119).
  • Ô lưới 52×52: (10×13, (16×30), (33 x23).

Trong quá trình đào tạo sẽ kết hợp với thuật toán Kmean cluster( thuật toán phân cụm). Cùng với ground truth để tính ra sai sót giữa ground truth và anchor box bằng cách điều chỉnh các giá trị x,y,w,h, từ đó học được các đặc điểm của vật thể.

Anchor box
Quá trình đào tạo để tinh chỉnh kích thước của anchor box sao cho giống với vật thể nhất.

3. YOLOv4- Optimal Speed and Accuracy of Object Detection​.

YOLOv4 có nhiều sự cải tiến đặc biệt giúp tăng độ chính xác và tốc độ hơn đối với người anh em YOLOv3 trên cùng tập dataset COCO và trên GPU V100.

chart
So sánh YOLOv4 và YOLOv3.

Cấu trúc của v4 được tác giả chia làm bốn phần:

  • Backbone( xương sống).
  • Neck (cổ).
  • Dense prediction( dự đoán dày đặc)- sử dụng các one-stage-detection như YOLO hoặc SSD.
  • Sparse Prediction (dự đoán thưa thớt) – sử dụng các two-stage-detection như RCNN.
architecture
Cấu trúc YOLOv4.

3.1 Backbone( Xương sống) – Trích xuất đặc trưng.

3.1.1. Lựa chọn Backbone.

Mạng xương sống cho nhận dạng vật thể  thường được đào tạo trước ( pre-train)thông qua bài toán phân loại ImageNet. Pre-train có nghĩa là trọng số của mạng đã được điều chỉnh để xác định các đặc điểm liên quan trong một hình ảnh, mặc dù chúng sẽ được tinh chỉnh trong nhiệm vụ mới là phát hiện đối tượng. Tác giả xem xét sử dụng các xương sống:

  • CSPResNext50
  • CSPDarknet53
  • EfficientNet-B3
backbone
Các backbone được sử dụng trong YOLOv4.

DenseNet được thiết kế để kết nối các lớp trong mạng nơ-ron phức tạp nhằm mục đích: để giảm bớt vấn đề gradient biến mất (khó có thể sao chép tín hiệu đã bị thất thoát trong một mạng rất sâu), để tăng cường lan truyền tính năng, khuyến khích mạng sử dụng lại các tính năng và giảm số lượng thông số mạng.

 

EfficientNet được thiết kế bởi Google Brain để chủ yếu nghiên cứu vấn đề mở rộng quy mô của mạng nơ-ron tích chập. Có rất nhiều quyết định mà bạn có thể đưa ra khi mở rộng ConvNet của mình bao gồm kích thước đầu vào, tỷ lệ chiều rộng, tỷ lệ chiều sâu và mở rộng tất cả những điều trên. EfficientNet cho rằng có một điểm hoàn hảo, có thể tối ưu cho tất cả các thông số đó và thông qua tìm kiếm, họ đã tìm thấy điểm đó.

EfficientNet
EfficientNet.

EfficientNet vượt trội hơn các mạng khác có cùng kích thước về phân loại hình ảnh. Tuy nhiên, tác giả của YOLOv4 cho rằng các mạng khác có khả năng hoạt động tốt hơn trong cài đặt để phát hiện đối tượng nên quyết định thử nghiệm với tất cả 3 mạng CNN ở trên. Và cuối cùng thì tác giả chọn mạng CSPDarknet53 là backbone cho model. 😀 

3.1.2. Cấu trúc của CPSDarknet53.

CSPDarknet53 được cấu tạo từ CSP, Darknet53.

CSPCross-Stage-Partial connections) có nguồn gốc từ kiến trúc DenseNet sử dụng đầu vào trước đó và nối nó với đầu vào hiện tại trước khi chuyển vào Dense layer. Nó có nhiệm vụ chia đầu vào của khối thành 2 phần, một phần sẽ qua các khối chập, và phần còn lại thì không( đi thẳng tới cuối khối). sau đó hai phần sẽ được cộng lại và đưa vào khối tiếp theo. Ý tưởng ở đây là loại bỏ các nút thắt tính toán trong DenseNet và cải thiện việc học bằng cách chuyển phiên bản chưa chỉnh sửa của feature maps ( bản đồ đặc điểm )

CSP
Mô tả cấu trúc CSP.
.

DenseNet (Dense connected convolutional network) là một trong những netwok mới nhất cho visual object recognition. Nó cũng gần giống Resnet nhưng có một vài điểm khác biệt. Densenet có cấu trúc gồm các dense block và các transition layers. Được stack dense block- transition layers-dense block- transition layers như hình vẽ. Với CNN truyền thống nếu chúng ta có L layer thì sẽ có L connection, còn trong densenet sẽ có L(L+1)/2 connection.( tức là các lớp phía trước sẽ được liên kết với tất cả các lớp phía sau nó).

DenseNet
Cấu trúc DenseNet.

Darknet53: Yolov4 sử dụng CSPDarknet53 để làm backbone vì theo tác giả, CSPDarknet53 có độ chính xác trong task object detection cao hơn so với ResNet; và mặc dù ResNet có độ chính xác trong task classification cao hơn, hạn chế này có thể được cải thiện nhờ hàm activation Mish và một vài kỹ thuật sẽ được đề cập phía dưới.

3.2.Neck ( phần cổ) – Tổng hợp đặc trưng.

Neck có nhiệm vụ trộn và kết hợp các bản đồ đặc trưng(features map) đã học được thông qua quá trình trích xuất đặc trưng( backbone) và quá trình nhận dạng( YOLOv4 gọi là Dense prediction).

Với mỗi lần thực hiện detect với các kích thước ảnh rescale khác nhau tác giả đã thêm các luồng đi từ dưới lên và các luồng đi từ trên xuống vào cùng nhau theo từng hoặc được nối với nhau trước khi đưa vào head( phần đầu), từ đó lớp nhận dạng sẽ chứa thông tin phong phú hơn. 

Tác giả của YOLOv4 đã cho phép tùy biến sử dụng các cấu trúc cho phần Neck như là :

  • FPN
  • PAN
  • NAS-FPN
  • BiFPN
  • ASFF
  • SFAM
  • SSP

Một số cấu trúc điển hình:

Một số cấu trúc sử dụng cho phần cổ( Neck).
.

Feature Pyramid Networks (FPN)

SPP (spatial pyramid pooling layer)

3.2.1. YOLO with SPP.

  • Từ Yolov3, các tác giả đã giới thiệu một cách thức áp dụng SPP (Yolov3-spp). Mạng SPP này được thay đổi, không còn là chia các feature map thành các bins rồi ghép các bins này với nhau để được một vector có dimension cố định nữa. Yolo-SPP áp dụng một maximum pool với các kernel kích thước khác nhau. Kích thước của input feature map được giữ nguyên, các feature map thu được từ việc áp dụng max pool (với kernel size khác nhau) sẽ được concatinate. Yolov4 cũng áp dụng lại kỹ thuật này.

yolov4_spp

  • Biểu đồ dưới đây mô tả việc áp dụng Yolo-SPP (bỏ qua phần DC Block)

 

yolov4_spp_2

3.2.2. Path Aggregation Network (PAN) – ref

  • Mạng DeepLearning càng sâu thì càng làm mất mát thông tin, do đó, để detect được các đối tượng có kích thước nhỏ, researchers đã đề xuất ra nhiều phương pháp như DenseBlock, FPN. PAN là một cải tiến của FPN nhằm cải thiện localized information trên các top layers.

yolov4_pan

  • PAN thêm 1 bottom-up pathway (b), trong đó, mỗi layer lấy input là feature maps của stage trước đó, đi qua một conv 3×3. Output được add với feature map của top-down pathway với stage tương ứng. Thiết kế của Neck có thể được mô tả như hình dưới:

yolov4_pan_2

  • Trong Yolov4, các tác giả chỉnh sửa hàm add thành hàm concat.

 

yolov4_pan_3

  •  Tại các các stage của augmented bottom-up pathway, object được detect một cách độc lập với các kích thước khác nhau. Điều này có thể dẫn tới sự dư thừa về dữ liệu hoặc tại mỗi stage sẽ không sử dụng thông tin từ các stage khác. Do đó, tại mỗi stage, các feature maps sẽ được đẩy qua một mạng SPP (=ROIAlign), rồi sau đó đưa qua lớp fully connected layer, kết quả thu được sau các lớp fully connected layer này sẽ được element-wise max operation để thu được prediction.

yolov4_pan

3.2.3. Spatial Attention Module (SAM).

  • Áp dụng Attention vào model DL để xác định các thành phần/weights quan trọng.
  • Trong SAM, max pool & avg pool được thực hiện riêng biệt trên input feature maps để tạo thành hai tập feature maps. Hai tập này được đẩy vào conv layer, theo sau bởi một hàm sigmoid. Hàm sigmoid có vai trò đánh trọng số các weights của feature maps để tạo thành spatial attention layer.

yolo_sam

  • Sau đó, lớp Spatial Attention layer này lại được apply vào input feature maps để thu được refined feature layer (tức các feature maps đã được đánh trọng số).

 

yolov4_sam_2

  • Trong Yolov4, SAM được điều chỉnh không có hai lớp max pool, avg pool.

yolov4_sam_3

3.3. Head ( phần đầu) – Bước nhận dạng.

YOLOv4 sử dụng phần head giống như YOLOv3 với các hộp neo (anchor box) và nhận dạng với ảnh có kích thước khác nhau.

Anchor box
Quá trình đào tạo để tinh chỉnh kích thước của anchor box sao cho giống với vật thể nhất.

3.4. YOLOv4 – Bag of Freebies.

Bag of Freebies: Những phương pháp giúp cải thiện kết quả inference mà không làm ảnh hưởng tới tốc độ inference. Những phương pháp này thường là data augmentation, class imbalance, cost function, soft labeling, …

3.4.1. Tăng sinh dữ liệu bằng cách: cắt và trộn- CutMix data augmentation.

  • Dựa trên ý tưởng của CutOut: loại bỏ một vùng trên mỗi ảnh để model không thể overfit một feature đặc biệt nào đó trên tập training.
  • Tuy nhiên, vùng ảnh bị loại bỏ được điền vào các giá trị 0 –> vô dụng.
  • CutMix thay vùng ảnh bị loại bỏ bằng một phần ảnh của ảnh khác trong dataset.

yolov4_cutmix

  • Vùng bị thay thế này sẽ bắt buộc bộ object detector học với nhiều loại đặc điểm (features) hơn.

3.4.2. Tăng sinh dữ liệu bằng cách "khảm"- Mosaic data augmentation.

  • Thay vì mỗi ảnh đầu vào là sự kết hợp của 2 ảnh thì Mosaic sử dụng kết hợp 4 ảnh. Việc này giúp cho bối cảnh của ảnh phong phú hơn.

yolov4_mosaic

3.4.3. DropBlock regularization.

  • Trong Dropout, giả thiết là các điểm gần nhau thường có đặc điểm giống nhau, do đó ta có thể loại bỏ các điểm này bằng cách set weight=0 tại một số vị trí trên feature map.
  • Trong DropBlock, các vị trí được chọn không phân bố ngẫu nhiên nữa mà tập trung thành các block.

yolov4_dropblock

yolov4_dropblock_2

3.4.4. Class label smoothing.

Thay giá trị 1.0 –> 0.9 trong one-hot coding. Điều này giúp ta ngay cả khi đoán đúng class của một bức ảnh thì vẫn có loss. Do đó model sẽ phải điều chỉnh trọng số, giúp tránh việc overconfident vào kết quả dự đoán của mình –> tránh bị overfitting.

yolov4_label_smoothing

Tác giả đã có nghiên cứu về việc ứng dụng từng gói riêng biệt và kết hợp và đưa ra sự ảnh hưởng của nó đối với kết quả của mô hình:

Bag of Freebies
Bag of Freebies.

3.5.Bag of Specials (BoS).

3.5.1. BoS for backbone.

Yolov4 sử dụng các phương pháp BoS sau cho backbone:

  • Mish activation,
  • Cross-stage partial connections (CSP) ( đã nói ở trên)
  • Multi-input weighted residual connections (MiWRC)

3.5.1.1.  Mish activation.

Theo tác giả, sử dụng Mish thu được kết quả tốt hơn so với ReLu, SoftPlus, Swish cũng như một số activation function khác (Adam, Ranger, RangerLars, Novograd, …)

 

mish_2

mish_1
ref: https://github.com/digantamisra98/Mish
  • Value range: -0.31 –> inf
  • Một số thuộc tính quan trọng của Mish:

     

    • Không có cận trên
    • Có cận dưới
    • Không đơn điệu, giữ lại một phần nhỏ negative gradient cho phép model học tốt hơn (vd: ReLu không cho phép gradient âm).
    • Liên tục: Mish có đạo hàm bậc 1 tại mọi điểm thuộc miền giá trị (so sánh với ReLu không có đạo hàm tạo x=0)

mish_2

  • So sánh Mish với Swish là ReLu

mish_3

  • (Tại sao Mish tốt hơn các activation khác?)

     

    • Allow small negative gradient
    • Mish smooth hơn các activation khác –> giúp truyền tải thông tin xuống các lớp sâu hơn trong neural network dễ dàng hơn –> tăng accuracy, generalization.

mish_7

From the paper- a comparison of the output landscape from ReLU, Swish and Mish. The smooth gradients from Mish is a likely driver of it’s outperformance.

mish_4

  • Tính smooth của Mish được thể hiện bằng cách tăng số lượng hidden layer của network, đo độ chính xác của mô hình khi sử dụng ReLu/Swish/Mish. Ta có thể thấy performance của Mish không bị giảm quá nhiều khi tăng số lượng layer như đối với ReLu và Swish.
  • More infomations: linkpaperlink

3.5.1.2.  Multi-input weighted residual connections (MiWRC)

  • Invert Residual Block:

yolov4_invert_residual_1

    • Được sử dụng đầu tiên trong MobleNetv2
    • Trong khi số lượng channel trong Residual block là wide->narrow->wide thì số lượng channel trong Invert Residual Block là narrow->wide->narrow. Ý tưởng ở đây là 1) khi áp dụng khối conv 1×1 nên sử dụng linear activation ;  2) nên tạo skip-connection giữa các lớp low-dimentional feature maps (narrow) –>  deepwise conv .

yolov4_invert_residual

    • Linear activation giúp tránh mất mát dữ liệu khi đi qua khối 1×1 conv.
    • Deepwise Conv giúp giảm khối lượng tính toán cần thực hiện.

yolov4_deepwise_conv

yolov4_invert_residual_2

    • Ngoài ra, Invert Residual Block còn sử dụng ReLu6. ReLu6 giới hạn phần nguyên của số float thuộc [0, 6] giúp ta có thể biểu diễn phần số phẩy động tốt hơn trong khi sử dụng ít bits hơn để biểu diễn weights trong mạng (ví dụ sử dụng float8).

 

yolov4_relu6

  • Multi-input weighted residual connections

yolov4_multi_input_weight_residual_connection

  • Trong đó, wᵢ sẽ được train như các trainable parameter khác.

 

3.6. Bag of Freebies

3.6.1. (BoF) for detector.

  • Yolov4 sử dụng các BoF sau cho detector:

    1. CIoU-loss.
    2. CmBN.
    3. DropBlock regularization( đã giải thích ở mục 3.4.3).
    4. Mosaic data augmentation( đã giải thích ở mục 3.4.2).
    5. Self-Adversarial Trainin.,
    6. Eliminate grid sensitivity.
    7. Using multiple anchors for a single ground truth.
    8. Cosine annealing scheduler.
    9. Optimal hyperparameters.
    10. Random training shapes.

3.6.1.1. CIoU-loss.

  • Để cập nhật trọng số cho mô hình, các phương pháp object detection thường dùng hàm loss là IoU

yolov4_IoU

  • Tuy nhiên, khi ta sử dụng IoU, xét 2 trường hợp prediction bounding box và groundtruth bounding box không overlapping, ta không thể nói trường hợp nào tốt hơn trường hợp nào, do đó gây khó khăn cho việc cập nhật trọng số theo hướng khiến prediction bbox tiến gần tới groundtruth bbox.
  • GIoU giải quyết điều này bằng cách thêm vào IoU một thành phần C: bbox nhỏ nhất mà chứa cả prediction bbox và groundtruth bbox (xem như khoảng cách giữa 2 bbox này).

 

yolov4_GIoU

  • Tuy nhiên, khi sử dụng GIoU lại có một vấn đề là mô hình có khuynh hướng mở rộng prediction bbox trước cho tới khi nó overlapping với groundtruth, sau đó mới co lại để giảm IoU.
  • DIoU giải quyết được vấn đề này bằng cách không chỉ đưa bbox vào ràng buộc mà còn đưa khoảng cách giữa tâm của prediction bbox và tâm của groundtruth bbox. Bây giờ, thành phần ở mẫu chỉ đóng vai trò chuẩn hóa khoảng cách giữa 2 tâm của prediction bbox và groundtruth bbox (???).

yolov4_DIoU

  • Cuối cùng, CIoU đưa thêm vào tham số giúp duy trì tỷ lệ của các bbox.

yolov4_CIoU

3.6.1.2. CmBN.

  • Batch Normalization collects mean and variance of the sample within mini-batch to normalize the input. However, if mini-batch is small, then these estimation will be noisy. One solution is to estimate them among many mini-batches.
  • Batch Normalization tính toán mean và variance của các mẫu trong một mini-batch để chuẩn hóa đầu vào. Tuy nhiên, nếu mini-batch nhỏ, các ước lượng này sẽ bị nhiễu. Một giải pháp là ước lượng mean và variance dựa trên nhiều mini-batch. Tuy nhiên, do weights thay đổi mỗi iteration, việc tính trung bình một cách đơn thuần sẽ dẫn tới kết quả sai.
  • Cross-Iteration Batch Normalization (CBN) ra đời để giải quyết vấn đề trên. Trong đó, mean, variance tại iteration hiện tại sẽ được tính dựa trên iteration gần nhất.

yolov4_CBN

  • CmBN thay đổi một chút so với CBN: tính các tham số trên dựa trên các mini-batch trong cùng một batch.

3.6.1.3. Self-Adversarial Training.

  • Là một phương pháp data augmentation
  • Đầu tiên, model thực hiện forward propagation như bình thường. Sau đó, thay vì điều chỉnh weights của model, ta thay đổi input images để làm cho model có kết quả tồi đi. Sau đó, model hiện tại sẽ được train với input images mới với groundtruth bbox và class label như ban đầu.

3.6.1.4. Eliminate grid sensitivity.

  • Do sử dụng hàm sigmoid nên để b(x) = c(x) hoặc b(x) = c(x) + 1 thì giá trị tuyệt đối của t(x) phải rất lớn. Để giải quyết vấn đề này, các tác giả cho thêm một hệ số scaling (>1.0):

yolov4_bbox_coor

3.6.1.5. Sử dụng nhiều Anchors box cho một Ground truth.

  • Use multiple anchors for a single ground truth if IoU(ground truth, anchor) > IoU threshold. (Note, not enough information for me in determining its role in YOLOv4 yet.)

3.6.1.6. Cosine annealing scheduler.

  • Giảm learning rate theo hàm cosine. Bắt đầu giảm chậm, sau đó giảm nhanh, sau lại giảm chậm, …

yolov4_cosine_annealing

  • Tác dụng của phương pháp này so với learning rate decay không rõ ràng lắm.

yolov4_cosine_annealing_1

3.6.1.7. Optimal hyperparameters.

  • Sử dụng giải thuật di truyền (GA) để tìm optimal hyperparameters

3.6.1.8. Random training shapes.

  • Training model với kích thước input image khác nhau.

3.6.2. Bag of Specials (BoS) for detector.

  • The BoS features for YOLOv4 detector include:

    1. Mish activation (đã giải thích ở mục 3.5.1.1).
    2. modified SPP-block (đã giải thích ở mục 3.2.1).
    3. modified SAM-block (đã giải thích ở mục 3.2.2).
    4. modified PAN path-aggregation block (đã giải thích ở mục 3.2.3).
    5. DIoU-NMS

3.6.2.1. DIoU-NMS.

  • NMS lọc ra các prediction bounding box cho cùng một object và chỉ lấy bbox có confident cao nhất. Confident ở đây được đo bằng IoU.

NMS

  • DIoU-NMS có thay đổi một chút là confident được đo bằng DIoU.

Bài viết tham khảo:

YOLOv4 Paper 2004.10934.pdf (arxiv.org)

YOLOv3 Paper 1804.02767.pdf (arxiv.org)

Introduction into YOLO v3 – YouTube

Yolov4 – Hamhochoi (wordpress.com)

Breaking Down YOLOv4 (roboflow.com)

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *