PyTorch Image Segmentation Tutorial with U-NET: everything from scratch baby

Sdílet
Vložit
  • čas přidán 13. 06. 2024
  • ❤️ Support the channel ❤️
    / @aladdinpersson
    Semantic segmentation with U-NET implementation from scratch.
    You'll learn about:
    ✔️How to implement U-Net
    ✔️Setting up training and everything else :)
    Original paper: arxiv.org/abs/1505.04597
    My paper review: • U-NET Paper Walkthrough
    ✅ Dataset used: www.kaggle.com/c/carvana-imag...
    Paid Courses I recommend for learning (affiliate links, no extra cost for you):
    ⭐ Machine Learning Specialization bit.ly/3hjTBBt
    ⭐ Deep Learning Specialization bit.ly/3YcUkoI
    📘 MLOps Specialization bit.ly/3wibaWy
    📘 GAN Specialization bit.ly/3FmnZDl
    📘 NLP Specialization bit.ly/3GXoQuP
    ✨ Free Resources that are great:
    NLP: web.stanford.edu/class/cs224n/
    CV: cs231n.stanford.edu/
    Deployment: fullstackdeeplearning.com/
    FastAI: www.fast.ai/
    💻 My Deep Learning Setup and Recording Setup:
    www.amazon.com/shop/aladdinpe...
    GitHub Repository:
    github.com/aladdinpersson/Mac...
    ✅ One-Time Donations:
    Paypal: bit.ly/3buoRYH
    ▶️ You Can Connect with me on:
    Twitter - / aladdinpersson
    LinkedIn - / aladdin-persson-a95384153
    Github - github.com/aladdinpersson
    ⌚️ Timestampo:
    0:00 - Introduction
    1:03 - Model from scratch
    22:20 - Dataset from scratch
    29:50 - Training from scratch
    39:48 - Utils (almost) from scratch
    50:10 - Evaluation and Ending

Komentáře • 282

  • @AladdinPersson
    @AladdinPersson  Před 3 lety +152

    These from scratch videos & paper implementations take a lot of time for me to do, if you want to see me make more of these types of videos: please crush that *like* button and *subscribe* and I'll do it :)
    Support the channel ❤️:
    czcams.com/channels/kzW5JSFwvKRjXABI-UTAkQ.htmljoin
    Original paper: arxiv.org/abs/1505.04597​
    Paper review: czcams.com/video/oLvmLJkmXuc/video.html
    ⌚️ Timestamps:
    0:00​ - Introduction
    1:03​ - Model from scratch
    22:20​ - Dataset from scratch
    29:50​ - Training from scratch
    39:48​ - Utils (almost) from scratch
    50:10​ - Evaluation and Ending

    • @abdshomad
      @abdshomad Před 3 lety

      Sure! I will click every like, subscribe and pinned comment thumbs up button! 👍

    • @mohammadasadpour9339
      @mohammadasadpour9339 Před rokem

      how we can download this dataset with low resolution as you use in video and learn and train your network

    • @rohitchan007
      @rohitchan007 Před rokem

      Please do more of these.

    • @nokunato
      @nokunato Před rokem

      Thanks for this Aladdin. I was able to train using my own data. Do you have an idea how I can deploy U-net model to my web app? Can't seem to find any resource on it. cheers

    • @anishkumariyer3613
      @anishkumariyer3613 Před rokem

      I am training on a satellite Image dataset, My dice score is 0.0 and the pred mask is empty, Am I doing something wrong here ?

  • @foobar1672
    @foobar1672 Před 3 lety +62

    I'm writing this comment, because I want more of these types of videos.

    • @Omsip123
      @Omsip123 Před 5 měsíci +3

      I reply to this comment for the same reason 😊

    • @kruvox2494
      @kruvox2494 Před 2 měsíci +3

      I reply for the same reason

  • @mathelecs3884
    @mathelecs3884 Před 2 lety +13

    You are the only one who does from scratch this good. Please keep up the good work man!

  • @mohamedshatarah7264
    @mohamedshatarah7264 Před 2 měsíci +2

    You are amazing! I have been struggling with this for 2 weeks and your video is so helpful. I can only imagine the amount of work you put into this. Thank you so much.

  • @ayushjangid5-yeariddmathem207

    Thanks a ton!!!!! Learnt a hell lot of new things from this video other than image segmentation.
    Your lectures are pure gem!!!!

  • @arunavamaulik19
    @arunavamaulik19 Před 3 lety +3

    Thank you for these detailed tutorials, they are very informative
    Keep them coming!

  • @stefanlazov8086
    @stefanlazov8086 Před 2 lety +1

    Thank you for the nice video! I think this will help a lot of people that are trying to learn how to develop models and also people like me that have experience but need to expand their knowledge in PyTorch.

  • @nikolayandcards
    @nikolayandcards Před 3 lety +5

    Great topic! Can't wait to watch it in my spare time.

  • @Terraz-ed
    @Terraz-ed Před 3 lety +1

    Thank You a million, I been waiting for this. Yaaay

  • @Annachrome
    @Annachrome Před 11 měsíci

    learnt soo much from this thank you! love the proper structure instead of line by line commands in colab or sth

  • @josephmargaryan
    @josephmargaryan Před měsícem +1

    Hey bro, I know this video is from a long time ago. But thank you for teaching me and, most importantly, being an inspiration. I have now learned how to do the dataset, training loop, and Unet model, all from scratch in my head, just like you. I have also written a thesis on the subject as part of my bachelor's project at my university. Again, thank you, and I hope to learn more from you in the future.

  • @23kl104
    @23kl104 Před 3 lety

    thanks for making this video. It really helped me get started with segmentation tasks

  • @thegt
    @thegt Před 11 měsíci +4

    Thanks! Great work. Useful practical information

  • @amnesie148
    @amnesie148 Před 3 lety

    Simple and clear expression, thank you so much Aladdin Persson

  • @aylinmousavian4191
    @aylinmousavian4191 Před rokem

    Many thanks of writing this specifically with PyTorch from scratch, I love your videos doing from scratch, you are awesome

    • @mohammadasadpour9339
      @mohammadasadpour9339 Před rokem

      سلام این دیتا ستی که استفاده کرده حجم و ابعاد تصویر تصویرش خیلی پایین تره لز دیتا ست اصلی. میدونین از کجا میشه دانلود کرد اینی که تو ویدیو استفاده کرده رو

    • @aylinmousavian4191
      @aylinmousavian4191 Před rokem

      @@mohammadasadpour9339 Man Nemidunam chera injuri mishe, chand bar inja baratun neveshtam o link gozashtam vali youtube paak mikone, jaryanesh chie!!!!!! So weird 😕

  • @user-kt8nc4xd1u
    @user-kt8nc4xd1u Před rokem

    Thanks for creating this education video. Every concept is very clearly explained.

  • @xphn1985
    @xphn1985 Před rokem

    Thank you so much for this informative and detailed tutorial.

  • @starlite5097
    @starlite5097 Před 2 lety

    Awesome video, stayed all day to make this work because I changed some stuff myself :D

  • @lujainsmadi5374
    @lujainsmadi5374 Před 3 lety

    I feel like I want to say I love you for this tutorial

  • @domingo6034
    @domingo6034 Před 2 lety +33

    Hi There, This content is gold. I am a huge supporter of writing things from scratch so many thanks for doing it. I do have one suggestion thou. Would you consider implementing also the loss function they used in the UNET paper?
    They are using cross-entropy modified with the weighted map so they force the network to segment very thin borders between cells. I think this would also be very useful.

    • @ibrexg
      @ibrexg Před 5 měsíci

      I think this is application-oriented, they use this trick to solve the touching border issue between the cells e.g. when two cells are overlapped.

  • @rus-fastnetph3428
    @rus-fastnetph3428 Před rokem

    Thank you so much my guy. I hope one day I can also do this with my own knowledge and understanding

  • @alanneumann9378
    @alanneumann9378 Před 3 lety

    Thank you for the video, great job!

  • @amineleking9898
    @amineleking9898 Před 2 lety

    Thank you so much man, keep up the good work

  • @JosephCatrambone
    @JosephCatrambone Před 2 lety

    I was listening and following along like a Bob Ross show. Admittedly, I've already implemented a UNet, but the implementation here was much cleaner and nicer. Thanks for making this.

    • @JosephCatrambone
      @JosephCatrambone Před 2 lety

      @2K19/EP/050 MANU GAUR
      To answer that it can help to explain _why_ we split into training, test, and validation sets.
      Think of taking a test in school. You have a workbook with a bunch of problems and a test coming up. Your workbook has the answers in the back. Making a validation set is like taking a bunch of the problems in your workbook and putting them aside for a practice exam. You study all the problems in the workbook except the ones in your practice exam. If you fail the practice exam, maybe you aren't learning the right things from the book. The test is, well, the test.
      In the case of this dataset, you could use the test as the validation. That would be fine. You won't know how well you did after all of your work, but if you intend to put it in production that's okay.
      In more ML terms: the validation set lets us know if we are overfitting or underfitting on our data before the final test run.

  • @bhabeshmali3640
    @bhabeshmali3640 Před 2 lety

    Goldy bro; Keep up the good works bro. A deep love from India

  • @thaimeuu
    @thaimeuu Před 23 dny

    not a single confusion in this video, thanks

  • @obiohagwu788
    @obiohagwu788 Před 2 lety

    Bro, this slaps fr. Thanks!

  • @Karthik-kt24
    @Karthik-kt24 Před rokem

    thanku so much the explanations made it very clear 🙌💯

  • @mathematicalninja2756
    @mathematicalninja2756 Před 3 lety +4

    I literally read UNIX from scratch and I was like oh boy who is this legend 🤣🤣

    • @AladdinPersson
      @AladdinPersson  Před 3 lety +6

      Thanks for the video idea, maybe next video 😉

  • @babybig1538
    @babybig1538 Před rokem

    Hi. Thank you for your video. It helped me a lot

  • @nyurieisbal1389
    @nyurieisbal1389 Před 3 lety

    please make more videos like this. thank you omg

  • @binghaolu1741
    @binghaolu1741 Před 2 lety

    Thank you very much for this video, it is very helpful.

  • @manishkumarmishra194
    @manishkumarmishra194 Před 2 lety

    Great work Aladdin,
    Thank you for these awesome tutorials
    will there be a video about Panoptic segmentation ?

  • @emreyildirim6629
    @emreyildirim6629 Před 2 lety +2

    this was awesome! I was looking to implement some of this for my work for some micrscopy images I have taken but I think I need to start a little simpler e.g. I am not familiar with some of the classes and their variables - any ideas where to start?

  • @decreer4567
    @decreer4567 Před rokem

    This is a very well done tutorial

  • @Jefferson-rl1yr
    @Jefferson-rl1yr Před 2 lety

    thank you so much,I learnt a lot from this vedio. You are awesome!!!

  • @MIbra96
    @MIbra96 Před 3 lety +1

    Thank you for the video man.
    Will you do something on U-Net++? Like just a paper walkthrough maybe. I'm trying to find out how many channels they used in their dense skip connection layers but I can't find more details on how exactly they structured them.

  • @nachiketkathoke8281
    @nachiketkathoke8281 Před rokem

    Great video, man!

  • @raise7935
    @raise7935 Před 3 lety

    Thanks. Nice and clean

  • @RossMelbourne2007
    @RossMelbourne2007 Před 4 měsíci +1

    Thank you for the in-depth explanation of how to implement UNET. I would love to see you update GitHub to save the model and a separate display.py showing how to load the model and display the image segmentation predictions.

  • @on2k23nm
    @on2k23nm Před 3 měsíci

    Hi Aladdin, I can't thank you enough for this video. It was a great learning experience. I would suggest to focus on Computer Vision and keep creating videos like this. I have completely coded the model from scratch with you and it was really enjoyable experience.
    Again, Thank you very much !

  • @tarunpreetkaur1115
    @tarunpreetkaur1115 Před 2 lety

    Just amazing!!

  • @MercUndGut
    @MercUndGut Před 3 lety

    Hey Aladdin! Thanks a ton for the video, it's very clear if you know the basics. However, I'd like to know how I would go and try to segment a new car image, one, which is outside of my dataset.

  • @mikaelniemi4891
    @mikaelniemi4891 Před 3 lety

    Awesome work man and your whole channel is solid! Could you add your Pytorch, CUDA and cudNN versions you are using :) I'm having difficulties with pytorch & CUDA compatibilites...

  • @azaleakamellia
    @azaleakamellia Před 3 lety +1

    I'm in love with this because, for some reason, although I am not adept yet with deep learning...it answers the crucial part of seeing the architecture being engineered. The only thing I can't get past is how do we create the training datasets? I'm interested in satellite image classification but do you have any idea how to create these training datasets? I've seen people suggesting LabelMe and all but since this is pixel-based classification, what's the anatomy of the input into U-Net?

  • @Aukan96
    @Aukan96 Před 3 lety +4

    Hi! great video, congratulations, I have an answer...
    when the U.Net needs do multi-class classification and change loss function from BCE With Logits to CrossEntropyLoss, Do I need change to SIgmoid the final conv of the model too?

  • @ur-techpartner_de
    @ur-techpartner_de Před 2 lety +2

    Very nice and compete tutorial on Unets. I have question, Can we, /or how we use the same code for multiclass segmentations. For example, if there are more than 1 masks in output images, rather than only , "Salt" and "Not Salt"

  • @nunorodrigues3195
    @nunorodrigues3195 Před 2 lety

    Fantastic contribution, I just have one question: Any reason why you didn't use pytorch's sliding_window_inference to evaluate validation data?

  • @prodbyryshy
    @prodbyryshy Před 5 měsíci

    Very nice video, trying to figure out how to change this for instance segmentation, there are many tutorials for tensorflow but not so many for pytorch

  • @adesiph.d.journal461
    @adesiph.d.journal461 Před 3 lety +1

    Yey! I am here first :) Excited to go through this

  • @ei8ki638
    @ei8ki638 Před 3 lety +1

    Fantastic video....Thanks

  • @javlontursunov6527
    @javlontursunov6527 Před 2 lety

    Thank you man !

  • @ChrisGardinerPhoto
    @ChrisGardinerPhoto Před 10 měsíci +1

    thank you for this video! after watching a handful of times, I've managed to get it predicting on my own custom dataset, thanks entirely to your instruction.
    curious though - any advice on where to start getting a successful model to make a prediction on a single image, and call it by a script?

  • @zakariasaid1587
    @zakariasaid1587 Před rokem

    thank you so much for this content

  • @syedsajid7823
    @syedsajid7823 Před 2 lety +1

    Thanks for this lovely video
    could you please make a video on 3D Unet for medical image(MRI) segmentation

  • @sakib.9419
    @sakib.9419 Před 3 lety

    Hey man, love your content, could you make a guide on balancing data in TensorFlow/Keras, similar to the one you did for PyTorch, thanks

  • @omarmohamedradwan8450
    @omarmohamedradwan8450 Před 3 lety

    Hello,
    Thanks for the video it was very helpful. I just have a quick question i'm using another dataset , i was wondering how to get a higher accuracy as currently i'm getting 70% ?

  • @linglongxu4196
    @linglongxu4196 Před 2 lety

    Frigging Awesome!!!

  • @jijie133
    @jijie133 Před 3 lety

    Great video!

  • @user-bs7iu6ko9n
    @user-bs7iu6ko9n Před 6 měsíci

    Very good video, good explanations

  • @caoviethainam9363
    @caoviethainam9363 Před 3 lety

    savior of the day

  • @vinayaka.b1494
    @vinayaka.b1494 Před rokem +1

    what a great tutorial

  • @mereljongmans4512
    @mereljongmans4512 Před 3 lety

    Hee, thanks for your video! Got one question: how can your use your trained model for single image segmentation?

  • @user-lr4pg6ub6n
    @user-lr4pg6ub6n Před 3 lety

    Thank you very much.

  • @AliceDavidEdu
    @AliceDavidEdu Před rokem

    Thanks for the video

  • @akshayv9449
    @akshayv9449 Před 3 lety +1

    Your videos are very helpful .Could u also implement deeplab v3 from scratch?

  • @stuartward1357
    @stuartward1357 Před 10 měsíci +2

    Carvana kaggle dataset does not seem to have val_images and val_mask

  • @kevinelezi7089
    @kevinelezi7089 Před měsícem

    48:00 man you killed it , wow

  • @sandramartin6479
    @sandramartin6479 Před 3 lety +4

    hello ! thank you for your video. Can you do a tutorial for multi class sementic segmentation if you have the time ?

  • @ankitabuntolia9572
    @ankitabuntolia9572 Před 2 lety +1

    Hi, what would be the check_accuracy function in utils if one wants to have more multiclass segmentation? Many thanks!

  • @ArpitAnand-yd7tr
    @ArpitAnand-yd7tr Před 4 měsíci

    I'm very thankful for the video and great implementation too but I wish you could go into details of why you do certain things and perhaps explain stuff a bit more.
    Would be super helpful !

  • @subhajyotidas1609
    @subhajyotidas1609 Před 3 lety

    Hey, nice tutorial, just wanted to ask what tool is best to do the masking of the data...
    I have tried few but they return just json file.

  • @orlyenriqueapoloapolo7002

    Great video man. You are working with RGB images (3 bands or channels). Do you think is possible use this architecture for images with more than 3 channels or bands. I'm thinking in hyperspectral cameras, for example.

  • @kwingwingchan7540
    @kwingwingchan7540 Před 2 lety +2

    I am new to machine learning, I would like to ask:
    1) How could I train the model with COCO format dataset
    2) How could I train the model with more than 1 label class
    3) How to apply the trained model

  • @mersthub_mentors
    @mersthub_mentors Před 2 lety +2

    Hi, I enjoyed your video, even though I already implemented UNet but your intuition is superb. I have one question about how to make inference after training dataset with UNet. I don't know what am doing wrong but when i make prediction, it show black image with little dots and i have tried to understand what am doing wrong but i have got no clue yet.

  • @user-ch1ck6ej4s
    @user-ch1ck6ej4s Před 10 měsíci

    Dear professor,
    I am very interested in your program, and I have two questions now,
    (1) How to use code to map between irregular images, complete training through the unet model, and then conduct testing?
    Is the mask used for preprocessing data? Is there any special software available for preprocessing?

  • @user-sd6gb6mm3x
    @user-sd6gb6mm3x Před 3 lety +2

    20:46 I don't understand why you choice resizing x instead of skip_connection which is more similar to the UNET structure it provide. Can you explain it? Thanks.

  • @aboudezoa
    @aboudezoa Před 3 lety

    Great video ,Can you do video about real-time detection with segmentation “ not mask Rcnn” ?

  • @adrianpaez4269
    @adrianpaez4269 Před 3 lety

    Nice video!!

  • @javlontursunov6527
    @javlontursunov6527 Před 2 lety

    Thank you bro so much!
    Can you please make anoter video on how to do semantic segmentation by training U-net model from scratch?

  • @fidanrle4251
    @fidanrle4251 Před rokem

    Thanks for the video. Why you used scaler for backward ? I did not totally understand that.

  • @amnesie148
    @amnesie148 Před 2 lety +11

    Bug report: Due to an update to pytorch, the latest version of pytorchversion removes support for variables other than PIL image types from the resize function. So you can use the resize function from torch nn.functional, line 62 could be x = torch.nn.functional.interpolate(x, size=skip_connection.shape[2:])

    • @amnesie148
      @amnesie148 Před 2 lety

      oh the latest version of pytorchversion do not change the resize function .It's my mistake, my version is the old one. But it is still an alternative solution XD

  • @Tjemmm97
    @Tjemmm97 Před rokem

    @AladdinPersson
    What kind of PyCharm theme do you use? Looks awesome!

  • @Warren_Elrod
    @Warren_Elrod Před 3 lety +1

    First off:
    Aladdin thank you so much for your contributions. I hope your channel continues to grow and grow. You deserve it!
    Lastly:
    Which version of pytorch are you using? When I run the test function with the randn tensor shape of 161, 161 it raises a TypeError saying the object has to be a PIL Image.
    This happens at lines 61,62. - if .shape != .shape: TF.resize()

    • @AladdinPersson
      @AladdinPersson  Před 3 lety

      I appreciate the kind words! I am using PyTorch nightly version (1.8.0.dev) in the video. Are you using 1.7 and it's not working? Have you tried the code on Github too?

  • @nokunato
    @nokunato Před rokem

    Thanks for this Aladdin. I was able to train using my own data. Do you have an idea how I can deploy U-net model to my web app? Can't seem to find any resource on it. cheers

  • @MadMonkeyMum
    @MadMonkeyMum Před 4 měsíci

    Thank you for video. Was wondering if anyone knows why I would be getting can’t find file errors ?

  • @thalianandya8746
    @thalianandya8746 Před 3 lety +1

    Hello, I am using your code to do the picture segmentation, I got dice score more than 1 (1.3) do you know what the issue could be? many thanks

  • @almag4810
    @almag4810 Před rokem +3

    i followed your tutorial step by step and used the same dataset and it did an amazing job. The first dataset (CARVANA) I used worked fine, but once I changed it, the results went downhill. I tried it on CASIAv2, but my dice score is always 0.0 and my predicted masks are just black... i don't know how to fix this, if anyone has any ideas, i beg you, do let me know!

  • @JZef
    @JZef Před 2 lety +1

    Hello! Great tutorial! Was just wondering, at 34:39 you make use of torch.cuda.amp.autocast(). Would this work if you are using CPU processing only, given that you're calling a cuda method or is there a CPU based alternative? I'm trying to experiment with this on my mac, i'm relative new to this and this is one of the steps I don't fully understand yet. Any help would be appreciated :)

    • @emanwaqar9347
      @emanwaqar9347 Před rokem

      Hi! did you figure out if this code would work with cpu?

  • @kylerothwell9387
    @kylerothwell9387 Před 2 lety

    how difficult would it be to consider masking the glass or window sections in these images?

  • @muhammadgalanggardamukti6484

    Hey do you know how to annotate the dataset for Unet? Are there any specific tools for it?

  • @elifdeniz462
    @elifdeniz462 Před 9 měsíci

    How did you do the masking in the dataset? How did you create the dataset, where can I learn the detailed explanation?

  • @kirashi5878
    @kirashi5878 Před 3 lety

    where I should make some ajustments in the codes to make the unet fitting my png imgs?

  • @leonardmensahboante4308

    Please can you make a video on how to use hooks to join a transfer learning architecture like RESNET with UNET for image
    segmentation? That's how to use the pre-train model as the encoder part of the UNET architecture.

  • @sunetrabanerjee3570
    @sunetrabanerjee3570 Před 3 lety

    Hi Aladdin,
    Thank you so much for your response in my previous comment.
    Currently, I updated pytorch and conda in my GPU laptop. But facing a problem while running the training code.
    I got this error message:
    from ._nnls import nnls
    ImportError: DLL load failed: The specified module could not be found.
    Here I want to mention that both my python and libraries are of 64 bit.

  • @sanabaid7054
    @sanabaid7054 Před 3 lety

    The mirroring part that you mentioned in the begining that we would have to do if we used valid convolution... I cant understand that. I saw the paper walkthrough video too still that part is very unclear. Could you please help with that?

  • @sujithkumar_ga
    @sujithkumar_ga Před rokem

    so, what changes do i need to make if I want to perform a multi class segmentation here can you help me?

  • @kotraner
    @kotraner Před 3 lety +1

    hello :) I just followed your code until making model.
    but got error saying
    TypeError: img should be PIL Image. Got on TF.resize.
    even, I copy your code on your git hub it cause same error, anyone know how to solve this?

  • @dimitheodoro
    @dimitheodoro Před 2 lety

    I have a problem . In the diagram of the UNET, it shows an Upsampling2D together with Conv2D but you create a ConvTranspose2d. Do I miss something??

  • @carrlianslao296
    @carrlianslao296 Před 2 lety

    you can make transposeconv to a modulelist