Here's the outline for the video: 0:00 - Introduction 0:24 - Understanding YOLO 08:25 - Architecture and Implementation 32:00 - Loss Function and Implementation 58:53 - Dataset and Implementation 1:17:50 - Training setup & evaluation 1:40:58 - Thoughts and ending
One of the greatest deep learning videos I have ever seen online. You are amazing Aladdin, please keep going with the same style. The connections you make between the theory and the implementation is beyond PhD level. Wish I can give you more than one like.
This series was super helpful, can you please continue this by making one for Yolo v3, v4, SSD, and RetinaNet? That will make this content more unique because none of the channels that explains all these architectures and your explanations are great!
The savior, Been looking at codes of other people for few days, Could not understand it better as those were codes only with no explanation what so ever. Thank you very much.
massively thank you for implementing this in pytorch and explain every bits in detail. it was really helpful for my university project. i have watched your tutorials at least 3 times. thank you!
Thanks a lot for you kindness to provide the yolov1 video. By the end of the video, you got mAP close to 1.0 with only 8 training images. I guess you used weights of a well trained model. With more than 10,000 images and more than 20 hours on Kaggle 's free GPU, my mAP was about 0.7, but my validation mAP was less than 0.2. Nobody mentioned the over fitting issue of yolo v1 model training.
By far, your series is one of the best content about computer vision on UA-cam. It's very helpful when people explain how things work under the hood, like the very well-known courses by Andrew Ng. If you make a paid course for this kind of content, I'll definitely buy it.
Only 3.5K subscribers ??? One of the most underrated channel in UA-cam Keep posting quality video like this bro , soon you will reach 100K+ subs , congrats in advance Thanks for the quality content :)
Thank you so much for this video, it's so helpful! Especially the concept in first 9 minutes. I read a lot of sources, but here it's the only place where it is clearly explauned. And more precisely the part where we are looking for a cell with midpoint of bounding box! Thank you so much for a great Explanation!
Great Video as usual . Looking forward to see RCNNs (mask , faster , fast , ..) from scratch from you !! Similar to Transformers you did, you can do one from scratch and other using the torchvision's implementation .Kudos !!
So glad I came across your channel (Props to Python Engineer). Very valuable content. Thanks for sharing and you have gained a new loyal subscriber/fan lol.
@27:05 why flatten again? Isn't it already flattened in the forward method of the class? Also, do we really need to flatten? @51:22 The MSELoss documentation says it sums over all dimensions by default. Also how did you work around that division by zero?@1:33:15
Hi Aladdin, thanks for the great tutorial. I got a question at 1:13:09, in the paper, authors say the width and height of each bounding box are relative to the whole image, while you say they are relative to the cell. Is that a mistake?
Is there a mistake in the network diagram in the paper? Surely the 64 7x7 filters in the first layer result in 64 channels, not 192? What am I missing? If it is a mistake (seems highly unlikely), then the question is if there are really 192 filters, or 64.
Thanks a ton Aladdin for making this video. I truly loved it. Also, Would like to see Retinanet implementation . It would be really fun to watch too. Kudos to you!!
How does the very first layer of the DarkNet with out_channels = 64 produce 192 feature maps? I understand that 3*64 = 192 but I don't really see how that applies. Similarly, the second step has a convlution of 3x3x192, but there are 256 feature maps afterwards.
Regarding the loss for the confidence (FOR OBJECT LOSS part in loss.py), the label Ci should be IoU? In the code, it is (torch.flatten(exists_box * target[..., 20:21]), but because exists_box is target[..., 20:21], it is just a square of target[..., 20:21]? The original v1 paper said "Formally we define confidence as Pr(Object) IOUtruth pred . If no object exists in that cell, the confidence scores should be zero. Otherwise we want the confidence score to equal the intersection over union (IOU) between the predicted box and the ground truth", which suggests the Ci_hat is to be calculated from IoU.
Hi, I really appreciate your work and patience to make this video, however I would like to ask the following: The loss function is created based on the original paper, but the loss for bounding box midpoint coordinates (x,y) are not included because we calculate just the sqrt of width, height of boxes. Am I right?
Okay, sorry for the silly question. I just noticed that we should not get the squared root of x,y so that's why we skip here: box_predictions[..., 2:4] = torch.sign(box_predictions[..., 2:4]) * torch.sqrt( torch.abs(box_predictions[..., 2:4] + 1e-6) ) box_targets[..., 2:4] = torch.sqrt(box_targets[..., 2:4])
Amazing!! Thank you very much for all these lessons! It would help me a lot if you could make videos implementing Kalman Filter and DeepSort from scratch, for object tracking
Thanks! I don't understand the code regarding the bounding boxes though... Could you do a deep dive into the bounding boxes calculations AND show how to test on a new image?
I have a question. At 39:41 you, from utils, import intersection_over_union. I thought that dataset.py, loss.py, ..., utils.py where empty python files. Why did you imported a function from utils.py if in the tutorial we dont code anything in this file? I've followed the tutorial and Im stucked at 59:50 bc my code cant import name "intersection_over_union" from "utils".
Nada, soy gilipollas. Me he copiado el archivo utils.py de lo que has subido a GitHub y ya va. It would be interesting to code that part (utils.py) too in the tutorial.
제가 이해하기로 target data 값은 7x7x25 의 shape을 갖어요. 25중 앞의 20은 각 01000.. 처럼 해당 class가 one hot encoded 된 값이고. 나머지 5는[ confidence score, x,y,height,width]인데, 왜 5*2가 아니라 5냐면 논문에서는 하나의 grid cell에는 하나의 true object( 정확히는 object를 감싸는 bounding box의 mid point)만 존재한다고 가정하고 있어요. 혹시 제가 틀렸다면 고쳐주세요
Hii @Aladdin Persson. Amazing video. I just have a doubt. While calculating iou for true_label and pred_labels, should we not add the width and height that we clipped when creating true_labels? That is, in case of the example you gave of [0.95, 0.55, 0.5, 1.5], shouldn't we convert 0.95 to 0.95(as the cell we chose is in 0th index along the width) and 0.55 to 1.55(as the cell we chose is in 1st index along the height). This is because we are doing geometric operations like converting x_centre and y_centre to xmin, ymin, xmax and ymax and on not doing the conversion I mentioned, instead of getting the xmin, ymin, xmax and ymax of the bounding box we get some other coordinates instead. Also could you please create the same using Tensorflow?
at 42:13 shouldn't that be [...,25:29] not [...,26:30] as the first iout_b1 covers 21,22,23,24 and the second should cover 25,26,27,28? or 25th is the confidence score and 26,27,28,29 are the second bounding boxes?
Yes you're correct, 25th is for the confidence score for the second bbox and 26:30 (remember it's non-including the 30th index) so I think what is shown is correct
Do you mind showing how to plot the images with their bounding boxes (and how that can be applied to testing on new data)? Also, do all images have a maximum of 2 objects to localize?
def test(S=7, B=2,C=20): model = Yolov1(in_channels=3,split_size=S,num_boxes = B,num_classes=C) x = torch.randn((2,3,448,448)) print(model(x).shape) this will throw help if got same error like me __init__() missing 1 required positional argument: 'kernel_size'
4:24, In paper the width and height are predicted relative to the whole image. they can not be larger than 1, but in your video, you said it can larger than 1. It seems not right
Very clear and helpful! Thanks for the videos. I've got one question, though, Can you please explain what is the label for the images with no objects? During the training should it be like [0, 0, 0, 0, 0] or smth?
One question that I have is, How can I get to know the coordinates of the grid cell of which the centers are a part of? Is it like (1,1) of the output prediction gives the prediction for grid cell having two endpoints as (0,0),(64,64) ? (448/7 = 64)
@@AladdinPersson Thanks Aladdin! This one should be a good reference: Hermans, Alexander, Lucas Beyer, and Bastian Leibe. "In defense of the triplet loss for person re-identification." arXiv preprint arXiv:1703.07737 (2017).
My understanding of this λ_noob-associated loss function is that it is used to penalize false negatives. This λ_noob-associated loss function includes all grid cells that do not contain any objects but have confidence scores larger than 0. Since there will be a lot of these false negatives, the author adds the coefficient λ_noob to lower their ratio in the overall loss function.
When I use the code, the detection accuracy of the training set is very good, but the detection accuracy of the test set is almost equal to 0, which is obviously overfitting. In fact, the original code is to train an overfitting model, but I have modified some of the code. Why is it still overfitting? I have made the following modifications: nn.Dropout(0) -> nn.Dropout(0.5) WEIGHT_DECAY = 0->WEIGHT_DECAY = 2e-4 This question has bothered me for a long time. I would appreciate it if you could answer it.
I think there's a mistake in how you rescale the width and height of the bounding box to be greater than 1 because in the paper it stated as follows: "We normalize the bounding box width and height by the image width and height so that they fall between 0 and 1. We parametrize the bounding box x and y coordinates to be offsets of a particular grid cell location so they are also bounded between 0 and 1". See that all the values for the box lie between 0 and 1, x and y relative to the cell, and w and h relative to the entire image size. If I'm wrong please correct me.
@@정현호-u9j I think in this video he does this because Yolo model make image to 7x7x30 . So does he have to do it so that the label fits the image size ?
Very informative video and I think I understood the algo but there is one doubt I have: the code you wrote would only work with this specific dataset? If I would want to use a different dataset, would I need to rewrite the bigger part of the code (i. e. the loss function, the training code)?
Can someone explain what the "conda activate dl" means in the terminal at 57:27? Is that a specific environment to download or is it something we create ourselves?
Hi. I’m unable to load the PascalVOC_YOLO dataset within a Colab notebook due to the dataset being private. Is there a way to use the dataset in a Colab notebook without downloading it on my laptop ?
@@AladdinPersson There is, but my internet connection is not the fastest while having a small data cap which is why I usually use !wget within colab itself. In this case, both the !wget command and Kaggle’s command failed within Colab for the Kaggle file after which I wrote the above comment. Later, I copied the code from the get_data file, pasted it onto a cell, added a few lines of code for creating 8examples.csv and 100examples.csv, and ran it for the code to work.
Hi, this is awesome and really helpful. I was going through the yolov1 paper and found that the height and the width are relative to the whole image and not to the cell. Is that correct?
Here's the outline for the video:
0:00 - Introduction
0:24 - Understanding YOLO
08:25 - Architecture and Implementation
32:00 - Loss Function and Implementation
58:53 - Dataset and Implementation
1:17:50 - Training setup & evaluation
1:40:58 - Thoughts and ending
Highly helpful and awesome
why didn't you explain the utils file?
Plz give this man a noble proze
*Nobel
A noble nobel prize*
One of the greatest deep learning videos I have ever seen online. You are amazing Aladdin, please keep going with the same style. The connections you make between the theory and the implementation is beyond PhD level. Wish I can give you more than one like.
I dont know how do I express my gratitude to you.Thanks a lot brother.
This channels going to blow up now. Great stuff!
🙏 🙏
This series was super helpful, can you please continue this by making one for Yolo v3, v4, SSD, and RetinaNet? That will make this content more unique because none of the channels that explains all these architectures and your explanations are great!
I'm confused on how i'm supposed to load the images up for training. Did you get that part?
@@jertdw3646on't know if you got it or not, actually there's a train.csv file.
Instead of 8examples.csv or 100examples.csv we can use that file.
GOD DAMN! I was searching for this for a really long time but you did it, bro. Fantastic.
Best Channel ever. Cleared all doubts about YOLO. I was able to implement this in tensorflow by following your guide with ease. Thanks a lot bro.
Awesome to hear it! Leave a link to Github and people could use that if they are also doing it for TF?:)
Link for the tensorflow repo would be appreciated Keshav
The savior, Been looking at codes of other people for few days, Could not understand it better as those were codes only with no explanation what so ever. Thank you very much.
Most underrated channel!!!
Let's look at it upside down then!
massively thank you for implementing this in pytorch and explain every bits in detail. it was really helpful for my university project. i have watched your tutorials at least 3 times. thank you!
PhDs are 100% learning how to code here :)
Best channel ever!! All because of you, I learned to implement everything from scatch!! Thank you very much
Thanks a lot for you kindness to provide the yolov1 video. By the end of the video, you got mAP close to 1.0 with only 8 training images. I guess you used weights of a well trained model. With more than 10,000 images and more than 20 hours on Kaggle 's free GPU, my mAP was about 0.7, but my validation mAP was less than 0.2. Nobody mentioned the over fitting issue of yolo v1 model training.
mine is coming 0.0 always
@@satvik4225 yeea why is that , did u got that fixed
By far, your series is one of the best content about computer vision on UA-cam. It's very helpful when people explain how things work under the hood, like the very well-known courses by Andrew Ng. If you make a paid course for this kind of content, I'll definitely buy it.
Thanks!
I was lost somewhere in the loss but still watch the whole thing. Great video. Thank you
I love the way he explained and always maimtain simplicity in explaining the code, thanks aladdin
Only 3.5K subscribers ??? One of the most underrated channel in UA-cam
Keep posting quality video like this bro , soon you will reach 100K+ subs , congrats in advance
Thanks for the quality content :)
Appreciate the kinds words 🙏 🙏
What an amount of work! I don't often see people in the internet that are so dedicated to deep learning!
The most clear explanation that I have ever found, thank you!!
I can imagine this video took a lot of time to prepare, the result is great and super helpful. Thank you very much. Respect!
This is the best deep learning coding video I have ever seen.
This is insanely valuable. Thank you very much, dude.
I want to thank so much! It is literally a live saver for me! Your channel is underrated!
Thank you so much for this video, it's so helpful! Especially the concept in first 9 minutes. I read a lot of sources, but here it's the only place where it is clearly explauned. And more precisely the part where we are looking for a cell with midpoint of bounding box! Thank you so much for a great Explanation!
Great Video as usual . Looking forward to see RCNNs (mask , faster , fast , ..) from scratch from you !! Similar to Transformers you did, you can do one from scratch and other using the torchvision's implementation .Kudos !!
So glad I came across your channel (Props to Python Engineer). Very valuable content. Thanks for sharing and you have gained a new loyal subscriber/fan lol.
Welcome 😁
I'm a beginner of object detection, You videos help me a lot. I really like your style of code.
@27:05 why flatten again? Isn't it already flattened in the forward method of the class?
Also, do we really need to flatten? @51:22 The MSELoss documentation says it sums over all dimensions by default. Also how did you work around that division by zero?@1:33:15
This video was so helpful. Thank you!
Dude, this is AMAZING !
Hi Aladdin, thanks for the great tutorial. I got a question at 1:13:09, in the paper, authors say the width and height of each bounding box are relative to the whole image, while you say they are relative to the cell. Is that a mistake?
Amazing video series, thanks! Extra kudos for the OS you're using 💜
Great Video!! never seen anyone implementing a complete YOLO algorithm from scratch.
...and I understand why :3
Is there a mistake in the network diagram in the paper? Surely the 64 7x7 filters in the first layer result in 64 channels, not 192? What am I missing? If it is a mistake (seems highly unlikely), then the question is if there are really 192 filters, or 64.
64 kernels and there are 3 channels, 192 resulting channels. lol kinda late.
@@chocorramo99 Linear algebra is timeless! Thanks :D
you are awesome bro, really nice job, best YOLOv1 video in existence, thanks a lot
Thanks a ton Aladdin for making this video. I truly loved it. Also, Would like to see Retinanet implementation . It would be really fun to watch too. Kudos to you!!
Thank you man!!!! Great video! Gave me a really good understanding on Yolo, will subscribe
Great work as always!
This video help me a lot to understand my confusion about yolo loss.
Could you do some video on Anchors and Focal loss?
I'll revisit object detection at some point and try to implement more state of the art architectures and will look into it :)
Absolutely wonderful, thank you very much for such a fantastic job !
Просто топчик! Огромное спасибо за столь подробное разъяснение ещё и с кодом.
Your videos are a great help to data science beginners. Keep up the good work 👍
At 03:42 the width and height of an object are relative to the image I think wrt YOLO 1.
How does the very first layer of the DarkNet with out_channels = 64 produce 192 feature maps? I understand that 3*64 = 192 but I don't really see how that applies.
Similarly, the second step has a convlution of 3x3x192, but there are 256 feature maps afterwards.
I am also confused about that part. In my understanding it should be 7x7x3 and then 192 total kernels, right?
Can someone explain the use of unsqeeze(3) at 43:55
FInally , Most waited video , Will have a look asap
Hi. I have question at 1:12:29. Why "x_cell, y_cell = self.S * x - j, self.S * y - i" minus j and i ? What does this mean?
at 50:27 if you not flatten box_predictions and box_target in MSEloss, it is the same result as flatten
35:35 explanation about square roots for w,h
Broooooo, thanks for this man.
Regarding the loss for the confidence (FOR OBJECT LOSS part in loss.py), the label Ci should be IoU? In the code, it is (torch.flatten(exists_box * target[..., 20:21]), but because exists_box is target[..., 20:21], it is just a square of target[..., 20:21]? The original v1 paper said "Formally
we define confidence as Pr(Object) IOUtruth
pred . If no
object exists in that cell, the confidence scores should be
zero. Otherwise we want the confidence score to equal the
intersection over union (IOU) between the predicted box
and the ground truth", which suggests the Ci_hat is to be calculated from IoU.
Hi, I really appreciate your work and patience to make this video, however I would like to ask the following: The loss function is created based on the original paper, but the loss for bounding box midpoint coordinates (x,y) are not included because we calculate just the sqrt of width, height of boxes. Am I right?
Okay, sorry for the silly question. I just noticed that we should not get the squared root of x,y so that's why we skip here:
box_predictions[..., 2:4] = torch.sign(box_predictions[..., 2:4]) * torch.sqrt(
torch.abs(box_predictions[..., 2:4] + 1e-6)
)
box_targets[..., 2:4] = torch.sqrt(box_targets[..., 2:4])
4:00 I think you are wrong. w,h is realative to the whole image. check paper Section 2.Unified Detection - 4th paragraph
Very nicely explained in detail.... Great work
Amazing!! Thank you very much for all these lessons! It would help me a lot if you could make videos implementing Kalman Filter and DeepSort from scratch, for object tracking
Awesome video. Pretty helpful! Thanks a lot.
Your name is Aladdin but you are a genie to us. Thanks for this video.
Thanks! I don't understand the code regarding the bounding boxes though... Could you do a deep dive into the bounding boxes calculations AND show how to test on a new image?
I have a question. At 39:41 you, from utils, import intersection_over_union. I thought that dataset.py, loss.py, ..., utils.py where empty python files. Why did you imported a function from utils.py if in the tutorial we dont code anything in this file?
I've followed the tutorial and Im stucked at 59:50 bc my code cant import name "intersection_over_union" from "utils".
Nada, soy gilipollas. Me he copiado el archivo utils.py de lo que has subido a GitHub y ya va.
It would be interesting to code that part (utils.py) too in the tutorial.
There's an error at 56:11, line 10 : it Should be target[..., 25:26] instead of target[..., 20:21] for the no-object-detected loss
I think target[...,20:21] is right. The target's index for last dimension ends at 24, I think
@@정현호-u9j 아하 그렇군요! 감사합니다ㅎㅎ
제가 이해하기로 target data 값은 7x7x25 의 shape을 갖어요. 25중 앞의 20은 각 01000.. 처럼 해당 class가 one hot encoded 된 값이고. 나머지 5는[ confidence score, x,y,height,width]인데, 왜 5*2가 아니라 5냐면 논문에서는 하나의 grid cell에는 하나의 true object( 정확히는 object를 감싸는 bounding box의 mid point)만 존재한다고 가정하고 있어요. 혹시 제가 틀렸다면 고쳐주세요
Thank you man, your video help me a lot
That’s totally awesome!
Hii @Aladdin Persson. Amazing video. I just have a doubt. While calculating iou for true_label and pred_labels, should we not add the width and height that we clipped when creating true_labels? That is, in case of the example you gave of [0.95, 0.55, 0.5, 1.5], shouldn't we convert 0.95 to 0.95(as the cell we chose is in 0th index along the width) and 0.55 to 1.55(as the cell we chose is in 1st index along the height). This is because we are doing geometric operations like converting x_centre and y_centre to xmin, ymin, xmax and ymax and on not doing the conversion I mentioned, instead of getting the xmin, ymin, xmax and ymax of the bounding box we get some other coordinates instead.
Also could you please create the same using Tensorflow?
Hello. Why the target and prediction are in different shapes?
at 42:13 shouldn't that be [...,25:29] not [...,26:30] as the first iout_b1 covers 21,22,23,24 and the second should cover 25,26,27,28? or 25th is the confidence score and 26,27,28,29 are the second bounding boxes?
Yes you're correct, 25th is for the confidence score for the second bbox and 26:30 (remember it's non-including the 30th index) so I think what is shown is correct
At 1:05:41 you mention your video of how to build a custom dataset. Please link it to the video to enhance your informative channel.
Will be back, just need a quick break 35:30
Downloading 59:42
Do you mind showing how to plot the images with their bounding boxes (and how that can be applied to testing on new data)? Also, do all images have a maximum of 2 objects to localize?
Hi, do you have any details on how you prepared the dataset?
def test(S=7, B=2,C=20):
model = Yolov1(in_channels=3,split_size=S,num_boxes = B,num_classes=C)
x = torch.randn((2,3,448,448))
print(model(x).shape)
this will throw help if got same error like me
__init__() missing 1 required positional argument: 'kernel_size'
Yeah i'm getting the same error.
Have you found any solution and reason ?
@@pranavkushare6788 if you still have not solved the problem, check your parameters in CNNBlock inside _create_conv_layers method.
Great job, very helpful for a new beginner.
Hi, can you do a similar one with Graph Convolutional Networks? Your videos are very usefull ❤️
4:24, In paper the width and height are predicted relative to the whole image. they can not be larger than 1, but in your video, you said it can larger than 1. It seems not right
Amazing effort!
Thank you:)
muito boa essa série de vídeos! Vc pode passar as referências q vc usa pra montar esses notes? Tenho dificuldade em encontrar materiais pra estudar
Amazing Work!!
Very clear and helpful! Thanks for the videos. I've got one question, though, Can you please explain what is the label for the images with no objects? During the training should it be like [0, 0, 0, 0, 0] or smth?
You are doing an amazing job. Thanks alot
One question that I have is, How can I get to know the coordinates of the grid cell of which the centers are a part of? Is it like (1,1) of the output prediction gives the prediction for grid cell having two endpoints as (0,0),(64,64) ? (448/7 = 64)
Great video! Will you make "from scratch" series video for Siamese network?
I'll look into it! Any specific paper?
@@AladdinPersson Thanks Aladdin! This one should be a good reference: Hermans, Alexander, Lucas Beyer, and Bastian Leibe. "In defense of the triplet loss for person re-identification." arXiv preprint arXiv:1703.07737 (2017).
Thank you , you really help me a lot!
Thank you very much!!!! Excellent video!!!! By the way, do you have any tutorials for oriented bounding box detection?
very helpful! thank you !
My understanding of this λ_noob-associated loss function is that it is used to penalize false negatives. This λ_noob-associated loss function includes all grid cells that do not contain any objects but have confidence scores larger than 0. Since there will be a lot of these false negatives, the author adds the coefficient λ_noob to lower their ratio in the overall loss function.
Appreciate your effort!!
When I use the code, the detection accuracy of the training set is very good, but the detection accuracy of the test set is almost equal to 0, which is obviously overfitting.
In fact, the original code is to train an overfitting model, but I have modified some of the code. Why is it still overfitting?
I have made the following modifications:
nn.Dropout(0) -> nn.Dropout(0.5)
WEIGHT_DECAY = 0->WEIGHT_DECAY = 2e-4
This question has bothered me for a long time. I would appreciate it if you could answer it.
How many images you trained with?
I got the same results, I too am trying to understand what is going on
Also I can overfit with a way smaller network
I think there's a mistake in how you rescale the width and height of the bounding box to be greater than 1 because in the paper it stated as follows:
"We normalize the bounding box
width and height by the image width and height so that they
fall between 0 and 1. We parametrize the bounding box x
and y coordinates to be offsets of a particular grid cell location so they are also bounded between 0 and 1".
See that all the values for the box lie between 0 and 1, x and y relative to the cell, and w and h relative to the entire image size.
If I'm wrong please correct me.
I agree with this dude
@@정현호-u9j I think in this video he does this because Yolo model make image to 7x7x30 . So does he have to do it so that the label fits the image size ?
thank you for your video!😘
Very informative video and I think I understood the algo but there is one doubt I have: the code you wrote would only work with this specific dataset? If I would want to use a different dataset, would I need to rewrite the bigger part of the code (i. e. the loss function, the training code)?
I am glad I found your channel
He is simply Great
Can someone explain what the "conda activate dl" means in the terminal at 57:27? Is that a specific environment to download or is it something we create ourselves?
yo im not able to understand the code ?? am i missing something please help
您好,貌似在数据集方面有一定问题,您直接使用resize方法可能会造成图像的失真,我认为在图像中添加灰条的方式更加合理一些
Hi.
I’m unable to load the PascalVOC_YOLO dataset within a Colab notebook due to the dataset being private. Is there a way to use the dataset in a Colab notebook without downloading it on my laptop ?
I'm not sure, I think you need to download it. Isn't there a way to upload the dataset to Colab so you can run it?
@@AladdinPersson There is, but my internet connection is not the fastest while having a small data cap which is why I usually use !wget within colab itself. In this case, both the !wget command and Kaggle’s command failed within Colab for the Kaggle file after which I wrote the above comment.
Later, I copied the code from the get_data file, pasted it onto a cell, added a few lines of code for creating 8examples.csv and 100examples.csv, and ran it for the code to work.
Why I did not come across your channel before!!. But anyways I am glad I found your channel. Thank you.
Hi, this is awesome and really helpful. I was going through the yolov1 paper and found that the height and the width are relative to the whole image and not to the cell. Is that correct?
Awesome as always!
Could you do some video on EfficientNets sometime, that would be great !
Really great tutorial, but why do we do flatten in forward pass of the Yolov1 and also nn.Flatten() in the _create_fcs? Isn't it redundant?
Why are we multiplying the width, height loss with sign of the gradient? I did not get it.
great job brother
you are really awesome
Fantastic Bro