{
  "source_file": "0930",
  "source_platform": "Medium",
  "author": "Sascha Kirch",
  "title_listed": "Depth Anything - A Foundation Model for Monocular Depth Estimation",
  "keywords": "",
  "domain": "图像处理",
  "content_type": "深度技术解析",
  "is_paid_flag": "否",
  "url": "https://towardsdatascience.com/depth-anything-a-foundation-model-for-monocular-depth-estimation-8a7920b5c9cc/",
  "publish_date": "2024-03-20",
  "corpus_stage": "",
  "notes": "",
  "id": "568078ea72ab",
  "collected_at": "2026-10-02T00:48:09",
  "title": "Depth Anything -A Foundation Model for Monocular Depth Estimation | Towards Data Science",
  "body_markdown": "![Revisit consent button](../images/body-df29beacd7496220cc94.svg)\nWe value your privacy\nWe use cookies to enhance your browsing experience, serve personalised ads or content, and analyse our traffic. By clicking \"Accept All\", you consent to our use of cookies.\nCustomise Reject All Accept All\nCustomise Consent Preferences ![](../images/body-2159bb67f3de8ad870eb.svg)\nWe use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.\nThe cookies that are categorised as \"Necessary\" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... Show more\nNecessaryAlways Active\nNecessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.\n  * Cookie\nBCTempID\n  * Duration\n10 minutes\n  * Description\nNo description available.\n\n\n  * Cookie\n__cf_bm\n  * Duration\n1 hour\n  * Description\nThis cookie, set by Cloudflare, is used to support Cloudflare Bot Management. \n\n\n  * Cookie\nAWSALBCORS\n  * Duration\n7 days\n  * Description\nAmazon Web Services set this cookie for load balancing.\n\n\n  * Cookie\n_cfuvid\n  * Duration\nsession\n  * Description\nCloudflare sets this cookie to track users across sessions to optimize user experience by maintaining session consistency and providing personalized services\n\n\n  * Cookie\nli_gc\n  * Duration\n6 months\n  * Description\nLinkedin set this cookie for storing visitor's consent regarding using cookies for non-essential purposes.\n\n\n  * Cookie\n__hssrc\n  * Duration\nsession\n  * Description\nThis cookie is set by Hubspot whenever it changes the session cookie. The __hssrc cookie set to 1 indicates that the user has restarted the browser, and if the cookie does not exist, it is assumed to be a new session.\n\n\n  * Cookie\n__hssc\n  * Duration\n1 hour\n  * Description\nHubSpot sets this cookie to keep track of sessions and to determine if HubSpot should increment the session number and timestamps in the __hstc cookie.\n\n\n  * Cookie\nwpEmojiSettingsSupports\n  * Duration\nsession\n  * Description\nWordPress sets this cookie when a user interacts with emojis on a WordPress site. It helps determine if the user's browser can display emojis properly.\n\n\n  * Cookie\nBCSessionID\n  * Duration\n1 year 1 month 4 days\n  * Description\nBlueconic sets this cookie as a unique identifier for the BlueConic profile.\n\n\n  * Cookie\n_octo\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\nlogged_in\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\n__Secure-YEC\n  * Duration\npast\n  * Description\nYouTube sets this cookie to stores the user's video player preferences using embedded YouTube video\n\n\n  * Cookie\n__eoi\n  * Duration\n6 months\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nAWSALBTGCORS\n  * Duration\n7 days\n  * Description\nNo description available.\n\n\n  * Cookie\nlogin-status-p\n  * Duration\npast\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nAWSALBTG\n  * Duration\n7 days\n  * Description\nNo description available.\n\n\n  * Cookie\ncsrf_token\n  * Duration\nsession\n  * Description\nNo description available.\n\n\n  * Cookie\ntoken_v2\n  * Duration\n1 day\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nD\n  * Duration\n1 year\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nPHPSESSID\n  * Duration\nsession\n  * Description\nThis cookie is native to PHP applications. The cookie stores and identifies a user's unique session ID to manage user sessions on the website. The cookie is a session cookie and will be deleted when all the browser windows are closed.\n\n\n  * Cookie\nVISITOR_PRIVACY_METADATA\n  * Duration\n6 months\n  * Description\nYouTube sets this cookie to store the user's cookie consent state for the current domain. \n\n\n  * Cookie\ncookietest\n  * Duration\nsession\n  * Description\nThe cookietest cookie is typically used to determine whether the user's browser accepts cookies, essential for website functionality and user experience.\n\n\n  * Cookie\n__Host-airtable-session\n  * Duration\n1 year\n  * Description\nThis cookie is used to enable us to integrate the services of Airtable.\n\n\n  * Cookie\n__Host-airtable-session.sig\n  * Duration\n1 year\n  * Description\nThis cookie is used to enable us to integrate the services of Airtable.\n\n\n  * Cookie\nm\n  * Duration\n1 year 1 month 4 days\n  * Description\nStripe sets this cookie for fraud prevention purposes. It identifies the device used to access the website, allowing the website to be formatted accordingly.\n\n\n  * Cookie\nBIGipServer*\n  * Duration\nsession\n  * Description\nMarketo sets this cookie to collect information about the user's online activity and build a profile about their interests to provide advertisements relevant to the user. \n\n\n  * Cookie\n__cfruid\n  * Duration\nsession\n  * Description\nCloudflare sets this cookie to identify trusted web traffic.\n\n\n  * Cookie\n_GRECAPTCHA\n  * Duration\n6 months\n  * Description\nGoogle Recaptcha service sets this cookie to identify bots to protect the website against malicious spam attacks.\n\n\n  * Cookie\n__Secure-YNID\n  * Duration\n6 months\n  * Description\nGoogle cookie used to protect user security and prevent fraud, especially during the login process.\n\n\n  * Cookie\ncookieyes-consent\n  * Duration\n1 year\n  * Description\nCookieYes sets this cookie to remember users' consent preferences so that their preferences are respected on subsequent visits to this site. It does not collect or store any personal information about the site visitors.\n\n\nFunctional\nFunctional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.\n  * Cookie\nlidc\n  * Duration\n1 day\n  * Description\nLinkedIn sets the lidc cookie to facilitate data center selection.\n\n\n  * Cookie\nbrw\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\nbrwConsent\n  * Duration\n5 minutes\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nWMF-Uniq\n  * Duration\n1 year\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nloom_anon_comment\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\nloom_referral_video\n  * Duration\nsession\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nVISITOR_INFO1_LIVE\n  * Duration\n6 months\n  * Description\nA cookie set by YouTube to measure bandwidth that determines whether the user gets the new or old player interface.\n\n\n  * Cookie\nyt-remote-connected-devices\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to store the user's video preferences using embedded YouTube videos.\n\n\n  * Cookie\nytidb::LAST_RESULT_ENTRY_KEY\n  * Duration\nNever Expires\n  * Description\nThe cookie ytidb::LAST_RESULT_ENTRY_KEY is used by YouTube to store the last search result entry that was clicked by the user. This information is used to improve the user experience by providing more relevant search results in the future.\n\n\n  * Cookie\nyt-remote-device-id\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to store the user's video preferences using embedded YouTube videos.\n\n\n  * Cookie\nyt-remote-session-name\n  * Duration\nsession\n  * Description\nThe yt-remote-session-name cookie is used by YouTube to store the user's video player preferences using embedded YouTube video.\n\n\n  * Cookie\nyt-remote-fast-check-period\n  * Duration\nsession\n  * Description\nThe yt-remote-fast-check-period cookie is used by YouTube to store the user's video player preferences for embedded YouTube videos.\n\n\n  * Cookie\nyt-remote-session-app\n  * Duration\nsession\n  * Description\nThe yt-remote-session-app cookie is used by YouTube to store user preferences and information about the interface of the embedded YouTube video player.\n\n\n  * Cookie\nyt-remote-cast-available\n  * Duration\nsession\n  * Description\nThe yt-remote-cast-available cookie is used to store the user's preferences regarding whether casting is available on their YouTube video player.\n\n\n  * Cookie\nyt-remote-cast-installed\n  * Duration\nsession\n  * Description\nThe yt-remote-cast-installed cookie is used to store the user's video player preferences using embedded YouTube video.\n\n\n  * Cookie\ncp_session\n  * Duration\n3 months\n  * Description\nCodepen sets this cookie for Help systems found in the website.\n\n\n  * Cookie\nloid\n  * Duration\n1 year 1 month 4 days\n  * Description\nThis cookie is set by the Reddit. The cookie enables the sharing of content from the website onto the social media platform.\n\n\nAnalytics\nAnalytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.\n  * Cookie\n__hstc\n  * Duration\n6 months\n  * Description\nHubspot set this main cookie for tracking visitors. It contains the domain, initial timestamp (first visit), last timestamp (last visit), current timestamp (this visit), and session number (increments for each subsequent session).\n\n\n  * Cookie\nhubspotutk\n  * Duration\n6 months\n  * Description\nHubSpot sets this cookie to keep track of the visitors to the website. This cookie is passed to HubSpot on form submission and used when deduplicating contacts.\n\n\n  * Cookie\n_ga\n  * Duration\n1 year 1 month 4 days\n  * Description\nGoogle Analytics sets this cookie to calculate visitor, session and campaign data and track site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognise unique visitors.\n\n\n  * Cookie\n_ga_*\n  * Duration\n1 year 1 month 4 days\n  * Description\nGoogle Analytics sets this cookie to store and count page views.\n\n\n  * Cookie\n__Host-psifi.analyticsTrace\n  * Duration\n6 hours\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\n__Host-psifi.analyticsTraceV2\n  * Duration\n6 hours\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\n_gh_sess\n  * Duration\nsession\n  * Description\nGitHub sets this cookie for temporary application and framework state between pages like what step the user is on in a multiple step form.\n\n\n  * Cookie\nYSC\n  * Duration\nsession\n  * Description\nYSC cookie is set by Youtube and is used to track the views of embedded videos on Youtube pages.\n\n\n  * Cookie\najs_anonymous_id\n  * Duration\n1 year\n  * Description\nThis cookie is set by Segment to count the number of people who visit a certain site by tracking if they have visited before.\n\n\n  * Cookie\nvuid\n  * Duration\n1 year 1 month 4 days\n  * Description\nVimeo installs this cookie to collect tracking information by setting a unique ID to embed videos on the website. \n\n\nPerformance\nPerformance cookies are used to understand and analyse the key performance indexes of the website which helps in delivering a better user experience for the visitors.\n  * Cookie\nAWSALB\n  * Duration\n7 days\n  * Description\nAWSALB is an application load balancer cookie set by Amazon Web Services to map the session to the target.\n\n\n  * Cookie\nacq\n  * Duration\npast\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nacq.sig\n  * Duration\npast\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nptc\n  * Duration\n2 years\n  * Description\nNo description available.\n\n\nAdvertisement\nAdvertisement cookies are used to provide visitors with customised advertisements based on the pages you visited previously and to analyse the effectiveness of the ad campaigns.\n  * Cookie\nmuc_ads\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to collect user behaviour and interaction data to optimize the website.\n\n\n  * Cookie\nguest_id_marketing\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to identify and track the website visitor.\n\n\n  * Cookie\nguest_id_ads\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to identify and track the website visitor.\n\n\n  * Cookie\npersonalization_id\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to integrate and share features for social media and also store information about how the user uses the website, for tracking and targeting.\n\n\n  * Cookie\nguest_id\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to identify and track the website visitor. It registers if a user is signed in to the Twitter platform and collects information about ad preferences.\n\n\n  * Cookie\nbcookie\n  * Duration\n1 year\n  * Description\nLinkedIn sets this cookie from LinkedIn share buttons and ad tags to recognize browser IDs.\n\n\n  * Cookie\n__Secure-ROLLOUT_TOKEN\n  * Duration\n6 months\n  * Description\nYouTube sets this cookie to manage feature rollout and experimentation. It helps Google control which new features or interface changes are shown to users as part of testing and staged rollouts, ensuring consistent experience for a given user during an experiment.\n\n\n  * Cookie\nyt.innertube::nextId\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen.\n\n\n  * Cookie\nyt.innertube::requests\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen.\n\n\n  * Cookie\nsession_tracker\n  * Duration\nsession\n  * Description\nThis cookie is set by the Reddit. This cookie is used to identify trusted web traffic. It also helps in adverstising on the website.\n\n\n  * Cookie\nedgebucket\n  * Duration\nsession\n  * Description\nReddit sets this cookie to save the information about a log-on Reddit user, for the purpose of advertisement recommendations and updating the content.\n\n\n  * Cookie\ndid\n  * Duration\n1 year\n  * Description\nArbor sets this cookie to show targeted ads to site visitors.This cookie expires after 2 months or 1 year.\n\n\nUncategorised\nOther uncategorised cookies are those that are being analysed and have not been classified into a category as yet.\nNo cookies to display.\nReject All Save My Preferences Accept All\nToggle Search[](https://towardsdatascience.com/)Toggle Mobile Navigation\n[](https://towardsdatascience.com/)\nPublish AI, ML & data-science insights to a global community of data professionals.\nSign in[Submit an Article](https://write.insightmediagroup.io)\n[Latest](https://towardsdatascience.com/latest/)[Editor's Picks](https://towardsdatascience.com/tag/editors-pick/)[Newsletter](https://towardsdatascience.com/tag/the-variable/)[ShipAI](https://towardsdatascience.com/shipai/)\n* * *\n[Write For TDS](https://towardsdatascience.com/submissions/)\n[LinkedIn](https://www.linkedin.com/company/towards-data-science/)[X](https://x.com/TDataScience)Toggle Search\n[Deep Learning](https://towardsdatascience.com/category/artificial-intelligence/deep-learning/)\n# Depth Anything -A Foundation Model for Monocular Depth Estimation\nDepth Anything: Unleashing the Power of Large-Scale Unlabeled Data by L. Yang et. al.\n[Sascha Kirch](https://towardsdatascience.com/author/saschakirch/)\nMarch 20, 202411 min read\n### [🚀 Sascha's Paper Club](https://towardsdatascience.com/tagged/saschas-paper-club)\n![Image created from publication by Sascha Kirch](../images/000.png)\nImage created from [publication](https://arxiv.org/abs/2401.10891) by [Sascha Kirch](https://medium.com/@SaschaKirch)\nMonocular depth estimation, the prediction of distance in 3D space from a 2D image. The \"ill posed and inherently ambiguous problem\", as stated in literally every paper on depth estimation, is a fundamental problem in computer vision and robotics. At the same time foundation models dominate the scene in deep learning based NLP and computer vision. Wouldn't it be awesome if we could leverage their success for depth estimation too?\nIn today's paper walkthrough we'll dive into Depth Anything, a foundation model for monocular depth estimation. We will discover its architecture, the tricks used to train it and how it is used for metric depth estimation.\n* * *\n> **Paper:** [Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data](https://arxiv.org/abs/2401.10891), Lihe Yang et.al., 19 Jan. 2024\n> **Resources:** [GitHub](https://github.com/LiheYoung/Depth-Anything) - [Project Page](https://depth-anything.github.io/) - [Demo](https://huggingface.co/spaces/LiheYoung/Depth-Anything) - [Checkpoints](https://huggingface.co/spaces/LiheYoung/Depth-Anything/tree/main)\n> **Conference:** CVPR2024\n> **Category:** foundation models, monocular depth estimation\n> [**Other Walkthroughs**](https://medium.com/@SaschaKirch/list/paper-walkthroughs-by-sascha-kirch-89c7847da8e2)**:** [[BYOL](https://towardsdatascience.com/byol-the-alternative-to-contrastive-self-supervised-learning-5d0a26983d7c?sk=fc5a3b3a556088181d8726226862252c)] - [[CLIP](https://towardsdatascience.com/the-clip-foundation-model-7770858b487d?sk=a7b10ba1d0c3a20ecd4adb8200a48500)] - [[GLIP](https://towardsdatascience.com/glip-introducing-language-image-pre-training-to-object-detection-5ddb601873aa?sk=4f0acb404a38d342b7669f861c013a05)] - [[Segment Anything](https://towardsdatascience.com/segment-anything-promptable-segmentation-of-arbitrary-objects-f28958c5612d?sk=bd1311a6d8b1e0e6d3369d536dba0700)] - [[DINO](https://towardsdatascience.com/segment-anything-promptable-segmentation-of-arbitrary-objects-f28958c5612d?source=friends_link&sk=bd1311a6d8b1e0e6d3369d536dba0700)] - [[DDPM](https://towardsdatascience.com/the-rise-of-diffusion-models-a-new-era-of-generative-deep-learning-3ef4779f6e1b?sk=8c178422a977c6f49ec24b13502be4fd)]\n* * *\nLearn this step by step with the interactive [Machine Learning](https://roadmap.sh/machine-learning) roadmap.\n## Outline\n  1. Context & Background\n  2. Method\n  3. Qualitative Results\n  4. Experiments & Ablations\n  5. Further Readings & Resources\n\n\n* * *\n## Context & Background\n_**Why is depth such an important modality and why using deep learning for it?**_\n![Fig.1: Image and corresponding depth map. Image by Sascha Kirch and Depth Map created with Depth Anything Hugging Face Demo.](../images/001.png)\nFig.1: Image and corresponding depth map. Image by [Sascha Kirch](https://medium.com/@SaschaKirch) and Depth Map created with [Depth Anything Hugging Face Demo](https://huggingface.co/spaces/LiheYoung/Depth-Anything).\nPut simply: to navigate through 3D space, one must need to know where all the stuff is and at which distance. Classical applications include collision avoidance, drivable space detection, placing objects into a virtual or augmented reality, creating 3D objects, navigating a robot to grab an object and many more.\nDepth can be captured with a variety of sensors featuring different measurement modalities, using active or passive measurement principals and different number of sensors. The problem is that every sensor has its pros and cons but to sum it up: capturing accurate depth is expensive!\nSo, wouldn't it be nice to use a sensor that is relatively cheap, does not need a complex setup, does not need a lot of space, is light in weight and is already available in many systems? That sensor is a camera. Using a single camera solves many issues but faces us with new ones: Predicting 3D information from 2D images is ill posed, meaning we have not enough information to unambiguously predict the depth: is the object small or simply far away? Is a surface concave or convex? Sounds like a job for deep learning, our general function approximator!\n_**How has this problem been approached previously?**_\nOver the years many deep learning approaches have been investigated to perform depth estimation from single images. Some tried regression-based approaches to directly predict a depth value, others discretized the depth and performed a classification to predict in which depth-bin a pixel should be.\nWith the rise of generative deep learning many researchers also used GANs, VAEs or even diffusion-based models, including myself 🤓\n> [**RGB-D-Fusion: Image Conditioned Depth Diffusion of Humanoid Subjects by Sascha Kirch et.al., 2023**](https://arxiv.org/abs/2307.15988)\nWhile many models showed promising performance, their usage has often been very application specific: e.g. indoor vs. outdoor scenes, predicting relative depth vs. metric depth, sparse vs. dense depth.\nPretrained foundation models have been shown great 0-shot performance and can be fine-tuned with relatively few data samples to new applications. Since they are quite data-hungry, foundation models are usually only available for modalities that are available on the internet: images and text, but not for depth data... Until now!\n* * *\n## Method\nHaving talked about why depth is important and that having a Foundation Model for depth data would be desirable, let's dive into how the authors of Depth Anything managed to achieve this.\n### Depth Anything in a Nutshell\nDepth Anything is an auto-encoder model that inputs an image and predicts a depth map. It is trained on a combination of labeled and unlabeled images.\nUp to 3 stages are involved in the training process:\n  1. Train a teacher model on labeled images.\n  2. Pretrain a student model (Depth Anything model) using the teacher to create pseudo labels for unlabeled data.\n  3. (Optionally) Fine-tune the model to a specific task or dataset.\n\n\n![Fig.2: Depth Anything pipeline. Source + annotations by Sascha Kirch](../images/002.gif)\nFig.2: Depth Anything pipeline. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n _**Digging a bit deeper**_\nCollecting large amount of data with labels is expensive and time consuming. On the other hand, unlabeled images are available in a vast amount and are easy to collect. So naturally we'd like to utilize this data for training deep learning models. Some previous work had the same idea and used unlabeled data in combination with classical computer vision algorithms like stereo calibration or structure from motion to obtain depth labels, but this is quite time consuming.\nThe authors of Depth Anything trained a strong teacher model using the labeled dataset of 1.5M samples with a strong pre-trained DINOv2 encoder (a foundation model known for its semantically rich representations) and use it to generate pseudo labels for the 62M unlabeled samples that are used to train the student.\nIn that way the student can be trained using supervised techniques and they were able to obtain dense depth maps quickly and easily. Note that the pseudo labels are not perfect though and further tricks are required to train the student. The student has the same architecture as the teacher but is not using the teacher's weights. Its encoder is also initialized with DINOv2 but its decoder is initialized randomly.\n> [**Get an email whenever Sascha Kirch publishes 🚀**](https://medium.com/@SaschaKirch/subscribe)[ _Get an email whenever Sascha Kirch publishes 🚀 Looking to learn more about deep learning or simply stay up to dat_e...medium.com](https://medium.com/@SaschaKirch/subscribe)\n_**Some Words on the Feature Alignment**_\nPrevious work has shown that depth estimation can be improved when training your model with an additional semantic segmentation task. The intuition behind it is, if you have a better understanding of the world (more meaningful feature embeddings) can also better resolve ambiguities in the depth estimation task.\nIn a failed attempt, the authors of Depth Anything tried to train a shared encoder with individual decoders for the depth estimation task and the semantic segmentation task on the unlabeled data. The unlabeled images have been labeled with a combination of Foundation models.\nEventually they implemented the feature alignment constraint. During the training of the student model, the encoder of the student is constrained to have similar features as the frozen DINOv2 encoder (a foundation model known for its semantically rich representations). Their similarity, as we will see later, is enforced by a cosine similarity.\nHowever, since DINOv2 has very similar features for subparts of an object (e.g front and rear of a car) and in depth estimation sub-parts can have very different depth values, they also introduce a margin to enforce the similarity too strongly, but still benefit from it.\n_**And What about those Perturbations?**_\nSo, only adding unlabeled data to the training pipeline is not sufficient to further improve the performance upon the labeled data only baseline.\nWhat the authors did is to add strong perturbations to the unlabeled data that are consumed by the student. Note that these are added only to the student input and not to the teacher and not to the [DINO](https://towardsdatascience.com/segment-anything-promptable-segmentation-of-arbitrary-objects-f28958c5612d?source=friends_link&sk=bd1311a6d8b1e0e6d3369d536dba0700)v2 encoder. Similar approaches have been used already in other self-supervised frameworks like in DINO and [BYOL](https://towardsdatascience.com/byol-the-alternative-to-contrastive-self-supervised-learning-5d0a26983d7c?sk=fc5a3b3a556088181d8726226862252c).\nThese perturbations include augmentation techniques like color jittering, noising the image and spatial distortions.\nThe intuition behind those is always similar: make the models to learn similar features for the same things regardless of their appearance in the image. A car is a car regardless of the image being blurred or horizontally mirrored.\n### The Data used to train the Model\nThe authors compose a dataset consisting of 1.5 million labeled images and 62 million unlabeled images of a variety of indoor and outdoor scenes.\nThe labels are dense depth maps meaning, each pixel will have a depth associated with it (might need interpolation if the map is smaller as the image).\n![Table 1: Dataset composition. Source + annotations by Sascha Kirch](../images/003.gif)\nTable 1: Dataset composition. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\nAs mentioned earlier, the labeled data is used to train a teacher model and the student model. The unlabeled data is used to train the student model only.\n### The Loss Function to Train the Model\nThe student model's loss function is an average of 3 loss terms:\n  1. Loss for labeled images between student predictions and ground truth.\n  2. Loss for feature alignment between student encoder and DINOv2.\n  3. Loss for unlabeled images between student prediction and pseudo label generated by the teacher from the unlabeled data.\n\n\n_**Let's start with the labeled images:**_ It is a simple mean absolute error aka. MAE, between predictions of the student on images and their corresponding labels of the labeled dataset.\n![Equation 1: Loss term for labeled images. Source + annotations by Sascha Kirch](../images/004.gif)\nEquation 1: Loss term for labeled images. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n _**The feature alignment loss**_ is calculated by the average cosine similarity between the encoder output of the student model and the DINOv2 encoder output. Since we want to have the loss to penalizes dissimilarities, we subtract the cosine similarity from 1. Note that the cosine similarity measures the angle between 2 vectors, not their distance.\n![Equation 2: Loss term for the feature alignment. Source + annotations by Sascha Kirch](../images/005.gif)\nEquation 2: Loss term for the feature alignment. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n> Note: The paper mentions a margin 𝛼 to not contrain the similarity too strongly, as described earlier. The paper is not really clear about that but I guess they ignore losses that are <𝛼, and they use 𝛼=0.15 according their ablation studies.\n_**Finally let's have a look on the unlabeled data.**_ Despite the strong perturbations applied to single images, the authors also implement a CutMix augmentation for 50% of the samples. It basically combines 2 images using a mask.\n![Equation 3: CutMix image construction. Source + annotations by Sascha Kirch](../images/006.gif)\nEquation 3: CutMix image construction. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\nThe combined image is then fed into the student model and the individual image is fed into the teacher model to obtain the pseudo label. Then a mean absolute error is calculated. Note that the loss is calculated twice, one time for each contributing image determined by the mask M.\n![Equation 4: Individual loss terms for the loss term used for unlabeled images. Source + annotations by Sascha Kirch](../images/007.gif)\nEquation 4: Individual loss terms for the loss term used for unlabeled images. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\nFinally, the individual terms are added and the average over all pixels is taken. I guess there is no need to multiply again by the mask since it has been done in the equation above already.\n![Equation 5: Loss term for unlabeled images. Source + annotations by Sascha Kirch](../images/008.gif)\nEquation 5: Loss term for unlabeled images. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n* * *\n## Qualitative Results\nBefore diving into the experiments and ablations, let's change the order of the paper and first inspect some qualitative results.\nIn a first test, the model was inferred with unseen images from different domains including indoor and outdoor scenes with different lighting conditions.\n![Fig. 3: Qualitative results on six unseen datasets. Source + annotations by Sascha Kirch](../images/009.png)\nFig. 3: Qualitative results on six unseen datasets. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\nFurther, the compare their performance against MiDaS v3.1, showing that the Depth Anything model in general is able to capture more details and has a better general understanding of the scene allowing to resolve ambiguities much better.\n![Fig. 4: Qualitative comparison between Depth Anything and MiDaS v3.1. Source + annotations by Sascha Kirch](../images/010.png)\nFig. 4: Qualitative comparison between Depth Anything and MiDaS v3.1. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\nIn a final qualitative test, they took a ControlNet, a diffusion-based generative model to generate new images conditioned on the predicted depth map and an input prompt.\n![Fig. 5: Using predicted depth for depth+text condition ControlNet for image generation. Source + annotations by Sascha Kirch](../images/011.gif)\nFig. 5: Using predicted depth for depth+text condition ControlNet for image generation. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n* * *\n## Experiments and Ablations\nLet's now take a closer look onto the experiments and ablations that have been performed to evaluate the effectiveness of their method.\n### Experiments\nIn Summary, the authors show in their experiments that:\n  1. the Depth Anything encoder outperforms previous SOTA on 0-shot relative depth estimation and fine-tuned metric depth estimation even with smaller backbone.\n  2. the feature alignment constraint is effective and that the Depth Anything encoder has semantically rich features that can be fine-tuned into segmentation model.\n\n\n_**Zero-Shot, Relative Depth Estimation**_\nIn this experiment, the Depth Anything model is pre-trained on the dataset composed by the authors and evaluated on other datasets without having seen a sample from the individual datasets (0-shot). It is compared against the best checkpoint of MiDaS v3.1.\n![Table 2: Zero-Shot Relative Depth Estimation. Source + annotations by Sascha Kirch](../images/012.gif)\nTable 2: _Zero-Shot Relative Depth Estimation_. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n _**Fine-Tuned (In-Domain) Metric Depth Estimation**_\nIn this experiment the Depth Anything model pre-trained on relative depth estimation is fine-tuned for metric depth estimation. An encoder-decoder model is initialized with the pre-trained Depth Anything encoder and a randomly initialized decoder. It is then fine-tuned using the ZoeDepth framework on the training set of a given dataset and finally evaluated on the same dataset and compared to other models.\n![Table 3: Fine-Tuned \\(In-Domain\\) Metric Depth Estimation. Source + annotations by Sascha Kirch](../images/013.gif)\nTable 3: _Fine-Tuned (In-Domain) Metric Depth Estimation_. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n _**Fine-Tuned (Zero-Shot) Metric Depth Estimation**_\nHere the same pre-trained Depth Anything model is fine-tuned on metric depth estimation, but this time evaluated on another dataset than it was tested on.\nThe ZoeDepth framework is used to fine-tune two metric depth estimation models. The first one uses MiDaS v3.1 (shown as ZoeDepth in the table) as encoder and the second one uses the Depth Anything encoder.\n![Table 4: Fine-Tuned \\(Zero-Shot\\) Metric Depth Estimation. Source + annotations by Sascha Kirch](../images/014.gif)\nTable 4: _Fine-Tuned (Zero-Shot) Metric Depth Estimation_. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n _**Fine-Tuned Semantic Segmentation**_\nIn this experiment the authors test the semantic capability of the Depth Anything encoder. Recall that it was constrained during training with their feature alignment loss to have similar features as the DINOv2 encoder, a foundation model to be known to have rich semantic embeddings.\n![Table 5: Fine-Tuned Semantic Segmentation. Source + annotations by Sascha Kirch](../images/body-d0897703f656fbbacef9.png)\nTable 5: _Fine-Tuned Semantic Segmentation_. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n### Ablations\n_**General Ablation Study**_\nIn this general ablation study, the authors tested the effectiveness of their different loss terms and constraints and the strong perturbations on unlabeled data.\n![Table 6: General Ablation Study for individual loss terms and the strong perturbations. Source + annotations by Sascha Kirch](../images/body-5f87592f60048bb2938c.gif)\nTable 6: _General Ablation Study_ for individual loss terms and the strong perturbations. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n _**Different Encoders for Downstream Task**_\nIn this final ablation study the authors show that their encoder is superior to DINOv2's and MiDaS' encoder when fine-tuned on depth estimation and semantic segmentation tasks suggesting the feature space of the Depth Anything encoder captures more semantic information.\n![Table 7: Comparision of different encoders on different downstream tasks. Source + annotations by Sascha Kirch](../images/body-a2d8857f626d7763ac84.gif)\nTable 7: Comparision of different encoders on different downstream tasks. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n* * *\n## Conclusion\nDepth Anything is a great step towards Foundation Models in other domains than image or text. They have successfully trained a strong and semantically rich encoder model that can be either used in a 0-shot mode or further fine-tuned to a custom dataset.\n* * *\n## Further Readings & Resources\nHere a list of links with further reassorces on Depth Anything and Foundation Models.\n_**Hugging Face Demo to play with Depth Anything:**_\n> [**Depth Anything - a Hugging Face Space by LiheYoung**](https://huggingface.co/spaces/LiheYoung/Depth-Anything)\n_**Paper Walkthroughs**_\nYou might also like my other paper walkthroughs covering other foundation models:\n> [**Paper Walkthroughs by Sascha Kirch**](https://medium.com/@SaschaKirch/list/89c7847da8e2)\n## Register Now to Continue Reading\n### Unlock Towards Data Science with a Free Account\nAll articles on Towards Data Science are available to registered users. Create a free account today to access this article and thousands more.\nRegister for freeSign in to your account\n* * *\n![](../images/body-2648fe230469ec3ba2b1.png)\nWritten By\n## [Sascha Kirch](https://towardsdatascience.com/author/saschakirch/)\n[See all from Sascha Kirch](https://towardsdatascience.com/author/saschakirch/)\n[Editor's Picks](https://towardsdatascience.com/tag/editors-pick/)[Deep Dives](https://towardsdatascience.com/tag/deep-dives/)[Deep Learning](https://towardsdatascience.com/tag/deep-learning/)[Foundation Models](https://towardsdatascience.com/tag/foundation-models/)[Saschas Paper Club](https://towardsdatascience.com/tag/saschas-paper-club/)\nShare This Article\n  * [](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ftowardsdatascience.com%2Fdepth-anything-a-foundation-model-for-monocular-depth-estimation-8a7920b5c9cc%2F&title=Depth%20Anything%20-A%20Foundation%20Model%20for%20Monocular%20Depth%20Estimation)\n  * [](https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Ftowardsdatascience.com%2Fdepth-anything-a-foundation-model-for-monocular-depth-estimation-8a7920b5c9cc%2F&title=Depth%20Anything%20-A%20Foundation%20Model%20for%20Monocular%20Depth%20Estimation)\n  * [](https://x.com/share?url=https%3A%2F%2Ftowardsdatascience.com%2Fdepth-anything-a-foundation-model-for-monocular-depth-estimation-8a7920b5c9cc%2F&text=Depth%20Anything%20-A%20Foundation%20Model%20for%20Monocular%20Depth%20Estimation)\n\n\nTowards Data Science is a community publication. Submit your insights to reach our global audience and earn through the TDS Author Payment Program.\n[Write for TDS](https://towardsdatascience.com/submissions/)\n## Related Articles\n  * [![](../images/015.jpg)](https://towardsdatascience.com/a-beginners-guide-to-world-models/)\n## [A Beginner’s Guide to World Models](https://towardsdatascience.com/a-beginners-guide-to-world-models/)\n[Deep Learning](https://towardsdatascience.com/category/artificial-intelligence/deep-learning/)\nLearn how to simulate reality with Python\n[Mauro Di Pietro](https://towardsdatascience.com/author/maurodp/)\nSeptember 8, 20269 min read\n  * [![](../images/016.jpg)](https://towardsdatascience.com/normalized-discounted-cumulative-gain-37e6f75090e9/)\n## [Normalized Discounted Cumulative Gain](https://towardsdatascience.com/normalized-discounted-cumulative-gain-37e6f75090e9/)\n[Artificial Intelligence](https://towardsdatascience.com/category/artificial-intelligence/)\nA Metric for Evaluating Recommendation Engines\n[Kurtis Pykes](https://towardsdatascience.com/author/kurtispykes/)\nAugust 8, 20205 min read\n  * [![](../images/017.png)](https://towardsdatascience.com/mastering-hadoop-part-3-hadoop-ecosystem-get-the-most-out-of-your-cluster/)\n## [Mastering Hadoop, Part 3: Hadoop Ecosystem: Get the most out of your cluster](https://towardsdatascience.com/mastering-hadoop-part-3-hadoop-ecosystem-get-the-most-out-of-your-cluster/)\n[Data Engineering](https://towardsdatascience.com/category/data-science/data-engineering/)\nExploring the Hadoop ecosystem — key tools to maximize your cluster’s potential\n[Niklas Lang](https://towardsdatascience.com/author/niklas_lang/)\nMarch 14, 202520 min read\n  * [![](../images/018.jpeg)](https://towardsdatascience.com/3-deep-learning-algorithms-in-under-5-minutes-part-2-deep-sequential-models-b84e3a29d9a8/)\n## [3 Deep Learning Algorithms in under 5 minutes - Part 2 (Deep Sequential Models)](https://towardsdatascience.com/3-deep-learning-algorithms-in-under-5-minutes-part-2-deep-sequential-models-b84e3a29d9a8/)\n[Artificial Intelligence](https://towardsdatascience.com/category/artificial-intelligence/)\nNo traces of intimidating linear algebra detected...\n[Thushan Ganegedara](https://towardsdatascience.com/author/thushv89/)\nSeptember 1, 20207 min read\n  * [![](../images/019.jpg)](https://towardsdatascience.com/the-transformer-architecture-of-gpt-models-b8695b48728b/)\n## [The Transformer Architecture of GPT Models](https://towardsdatascience.com/the-transformer-architecture-of-gpt-models-b8695b48728b/)\n[Deep Learning](https://towardsdatascience.com/category/artificial-intelligence/deep-learning/)\nLearn the details of the Transformer architecture\n[Beatriz Stollnitz](https://towardsdatascience.com/author/bea_684/)\nJuly 25, 202323 min read\n  * [![](../images/020.jpg)](https://towardsdatascience.com/is-pytorchs-nesterov-momentum-implementation-wrong-5dc5f5032008/)\n## [Is PyTorch's Nesterov Momentum Implementation Wrong?](https://towardsdatascience.com/is-pytorchs-nesterov-momentum-implementation-wrong-5dc5f5032008/)\n[Deep Learning](https://towardsdatascience.com/category/artificial-intelligence/deep-learning/)\nWe examine and explain the differences between the original formulation of Nesterov momentum and PyTorch's implementation.\n[Jason Vega](https://towardsdatascience.com/author/jasonvega14/)\nSeptember 2, 20237 min read\n  * [![](../images/021.jpg)](https://towardsdatascience.com/confirmatory-factor-analysis-theory-aac11af008a6/)\n## [Confirmatory Factor Analysis Fundamentals](https://towardsdatascience.com/confirmatory-factor-analysis-theory-aac11af008a6/)\n[](https://towardsdatascience.com/depth-anything-a-foundation-model-for-monocular-depth-estimation-8a7920b5c9cc/)\nHow it works and can be used in your research\n[Rafael Valdece Sousa Bastos](https://towardsdatascience.com/author/rafavsbastos/)\nOctober 9, 20219 min read\n  * [![](../images/022.jpeg)](https://towardsdatascience.com/overview-of-human-pose-estimation-neural-networks-hrnet-higherhrnet-architectures-and-faq-1954b2f8b249/)\n## [Overview of Human Pose Estimation Neural Networks - HRNet + HigherHRNet, Architectures and FAQ -...](https://towardsdatascience.com/overview-of-human-pose-estimation-neural-networks-hrnet-higherhrnet-architectures-and-faq-1954b2f8b249/)\n[Deep Learning](https://towardsdatascience.com/category/artificial-intelligence/deep-learning/)\nHigh Resolution Net (HRNet) is a state of the art neural network for human pose estimation - an image processing task which finds the...\n[Peter](https://towardsdatascience.com/author/peternaf/)\nJune 13, 20209 min read\n  * [![](../images/023.png)](https://towardsdatascience.com/avoiding-abuse-and-misuse-of-t-test-and-anova-regression-for-categorical-responses-af15af53a456/)\n## [Avoiding abuse and misuse of T-test and ANOVA: Regression for categorical responses](https://towardsdatascience.com/avoiding-abuse-and-misuse-of-t-test-and-anova-regression-for-categorical-responses-af15af53a456/)\n[Data Visualization](https://towardsdatascience.com/category/data-science/data-visualization/)\nAn approach using Bayesian regression with brms\n[Daniel Manrique Castano](https://towardsdatascience.com/author/damanrique/)\nApril 7, 202412 min read\n\n\n  * [YouTube](https://www.youtube.com/c/TowardsDataScience)\n  * [X](https://x.com/TDataScience)\n  * [LinkedIn](https://www.linkedin.com/company/towards-data-science/)\n  * [Threads](https://www.threads.net/@towardsdatascience)\n  * [Bluesky](https://bsky.app/profile/towardsdatascience.com)\n\n\n[](https://towardsdatascience.com/)\nYour home for data science and AI. The world's leading publication for data science, data analytics, data engineering, machine learning, and artificial intelligence professionals.\nSubscribe to Our Newsletter[Write For TDS](https://towardsdatascience.com/submissions/)•[About](https://towardsdatascience.com/about-towards-data-science-d691af11cc2f/)•[Advertise](https://contact.towardsdatascience.com/advertise-with-towards-data-science)•[Privacy Policy](https://towardsdatascience.com/privacy-policy/)•[Terms of Use](https://towardsdatascience.com/website-terms-of-use/)\n© Insight Media Group, LLC 2026•[The New Stack](https://thenewstack.io)•[roadmap.sh](https://roadmap.sh)•[Creator Network](https://insightmediagroup.io/creator-network)\n####  Recommended Articles \nClose\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607631/image?etag=1781543525510&width=500&height=500) Critical Mistakes Companies Make When Integrating AI/ML into Their Processes ](https://towardsdatascience.com/critical-mistakes-companies-make-when-integrating-ai-ml-into-their-processes/ \"Critical Mistakes Companies Make When Integrating AI/ML into Their Processes\")\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607686/image?etag=1782161464448&width=500&height=500) How Relevance Models Foreshadowed Transformers for NLP ](https://towardsdatascience.com/how-relevance-models-foreshadowed-transformers-for-nlp/ \"How Relevance Models Foreshadowed Transformers for NLP\")\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607639/image?etag=1781250125848&width=500&height=500) Javascript Fatigue: HTMX Is All You Need to Build ChatGPT — Part 1 ](https://towardsdatascience.com/javascript-fatigue-you-dont-need-js-to-build-chatgpt/ \"Javascript Fatigue: HTMX Is All You Need to Build ChatGPT — Part 1\")\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607930/image?etag=1782124566054&width=500&height=500) The Subset Sum Problem Solved in Linear Time for Dense Enough Inputs ](https://towardsdatascience.com/subset-sum-problem-solved-in-linear-time-for-dense-enough-inputs/ \"The Subset Sum Problem Solved in Linear Time for Dense Enough Inputs\")\n\n\n",
  "metadata": {
    "title": "Depth Anything -A Foundation Model for Monocular Depth Estimation | Towards Data Science",
    "description": "Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data by L. Yang et. al.",
    "keywords": null,
    "author": "Sascha Kirch",
    "og:locale": "en_US",
    "og:type": "article",
    "og:title": "Depth Anything -A Foundation Model for Monocular Depth Estimation",
    "og:description": "Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data by L. Yang et. al.",
    "og:url": "https://towardsdatascience.com/depth-anything-a-foundation-model-for-monocular-depth-estimation-8a7920b5c9cc/",
    "og:site_name": "Towards Data Science",
    "og:image": "https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/1mV_i7WpiVDOnNaIZDRYvzg.png",
    "og:image:width": "4190",
    "og:image:height": "994",
    "og:image:type": "image/png",
    "twitter:card": "summary_large_image",
    "twitter:site": "@TDataScience",
    "twitter:creator": "@TDataScience",
    "twitter:label1": "Written by",
    "twitter:data1": "Sascha Kirch",
    "twitter:label2": "Est. reading time",
    "twitter:data2": "11 min read",
    "article:published_time": "2024-03-20T14:40:12.000Z",
    "article:modified_time": "2024-03-20T14:40:12.000Z",
    "article:author": "https://towardsdatascience.com/author/saschakirch/"
  },
  "paywall": {
    "listed_paid": false,
    "detected": false,
    "marker": "",
    "public_only": false,
    "policy": "付费/会员内容只保留页面公开可见部分，不绕过付费墙"
  },
  "crawl": {
    "success": true,
    "status_code": 200,
    "error": ""
  },
  "code_blocks": [],
  "images": [
    {
      "status": "http_404",
      "url": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607631/image?etag=1781543525510&width=500&height=500",
      "src": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607631/image?etag=1781543525510&width=500&height=500",
      "alt": "",
      "downloaded": false,
      "discovery": "saved_markdown",
      "retried_at": "2026-10-20T17:36:16Z"
    },
    {
      "status": "http_404",
      "url": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607686/image?etag=1782161464448&width=500&height=500",
      "src": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607686/image?etag=1782161464448&width=500&height=500",
      "alt": "",
      "downloaded": false,
      "discovery": "saved_markdown",
      "retried_at": "2026-10-20T17:37:17Z"
    },
    {
      "status": "http_404",
      "url": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607639/image?etag=1781250125848&width=500&height=500",
      "src": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607639/image?etag=1781250125848&width=500&height=500",
      "alt": "",
      "downloaded": false,
      "discovery": "saved_markdown",
      "retried_at": "2026-10-20T17:37:17Z"
    },
    {
      "status": "http_404",
      "url": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607930/image?etag=1782124566054&width=500&height=500",
      "src": "https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607930/image?etag=1782124566054&width=500&height=500",
      "alt": "",
      "downloaded": false,
      "discovery": "saved_markdown",
      "retried_at": "2026-10-20T17:37:17Z"
    }
  ],
  "audio": [],
  "videos": [
    {
      "url": "https://www.youtube.com/c/TowardsDataScience",
      "kind": "channel_reference",
      "status": "reference_only"
    }
  ],
  "links": [
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/latest/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/tag/editors-pick/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/tag/the-variable/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/shipai/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/submissions/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/category/artificial-intelligence/deep-learning/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/author/saschakirch/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/tagged/saschas-paper-club"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/byol-the-alternative-to-contrastive-self-supervised-learning-5d0a26983d7c?sk=fc5a3b3a556088181d8726226862252c"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/the-clip-foundation-model-7770858b487d?sk=a7b10ba1d0c3a20ecd4adb8200a48500"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/glip-introducing-language-image-pre-training-to-object-detection-5ddb601873aa?sk=4f0acb404a38d342b7669f861c013a05"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/segment-anything-promptable-segmentation-of-arbitrary-objects-f28958c5612d?sk=bd1311a6d8b1e0e6d3369d536dba0700"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/segment-anything-promptable-segmentation-of-arbitrary-objects-f28958c5612d?sk=bd1311a6d8b1e0e6d3369d536dba0700&source=friends_link"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/the-rise-of-diffusion-models-a-new-era-of-generative-deep-learning-3ef4779f6e1b?sk=8c178422a977c6f49ec24b13502be4fd"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/tag/deep-dives/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/tag/deep-learning/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/tag/foundation-models/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/tag/saschas-paper-club/"
    },
    {
      "type": "internal",
      "href": "https://towardsdatascience.com/a-beginners-guide-to-world-models/"
    },
    {
      "type": "external",
      "href": "https://write.insightmediagroup.io"
    },
    {
      "type": "external",
      "href": "https://www.linkedin.com/company/towards-data-science/"
    },
    {
      "type": "external",
      "href": "https://x.com/TDataScience"
    },
    {
      "type": "external",
      "href": "https://arxiv.org/abs/2401.10891"
    },
    {
      "type": "external",
      "href": "https://medium.com/@SaschaKirch"
    },
    {
      "type": "external",
      "href": "https://github.com/LiheYoung/Depth-Anything"
    },
    {
      "type": "external",
      "href": "https://depth-anything.github.io/"
    },
    {
      "type": "external",
      "href": "https://huggingface.co/spaces/LiheYoung/Depth-Anything"
    },
    {
      "type": "external",
      "href": "https://huggingface.co/spaces/LiheYoung/Depth-Anything/tree/main"
    },
    {
      "type": "external",
      "href": "https://medium.com/@SaschaKirch/list/paper-walkthroughs-by-sascha-kirch-89c7847da8e2"
    },
    {
      "type": "external",
      "href": "https://roadmap.sh/machine-learning"
    },
    {
      "type": "external",
      "href": "https://arxiv.org/abs/2307.15988"
    },
    {
      "type": "external",
      "href": "https://medium.com/@SaschaKirch/subscribe"
    },
    {
      "type": "external",
      "href": "https://medium.com/@SaschaKirch/list/89c7847da8e2"
    },
    {
      "type": "external",
      "href": "https://www.facebook.com/sharer/sharer.php?title=Depth+Anything+-A+Foundation+Model+for+Monocular+Depth+Estimation&u=https%3A%2F%2Ftowardsdatascience.com%2Fdepth-anything-a-foundation-model-for-monocular-depth-estimation-8a7920b5c9cc%2F"
    },
    {
      "type": "external",
      "href": "https://www.linkedin.com/shareArticle?mini=true&title=Depth+Anything+-A+Foundation+Model+for+Monocular+Depth+Estimation&url=https%3A%2F%2Ftowardsdatascience.com%2Fdepth-anything-a-foundation-model-for-monocular-depth-estimation-8a7920b5c9cc%2F"
    },
    {
      "type": "external",
      "href": "https://x.com/share?text=Depth+Anything+-A+Foundation+Model+for+Monocular+Depth+Estimation&url=https%3A%2F%2Ftowardsdatascience.com%2Fdepth-anything-a-foundation-model-for-monocular-depth-estimation-8a7920b5c9cc%2F"
    },
    {
      "type": "external",
      "href": "https://www.youtube.com/c/TowardsDataScience"
    },
    {
      "type": "external",
      "href": "https://www.threads.net/@towardsdatascience"
    },
    {
      "type": "external",
      "href": "https://bsky.app/profile/towardsdatascience.com"
    }
  ],
  "repair_version": 2,
  "repaired_at": "2026-10-20T17:23:09Z",
  "source_url": "https://towardsdatascience.com/depth-anything-a-foundation-model-for-monocular-depth-estimation-8a7920b5c9cc/",
  "delivery_status": "unverified",
  "discovery_status": "http_403",
  "missing_reason": "源页面未重新核验:http_403；已按保留正文补采图片",
  "repair_error": "",
  "actual_video_files": [],
  "expected_saved_body_images": 4,
  "image_discovery": "saved_markdown",
  "source_body_markdown": "![Revisit consent button](https://cdn-cookieyes.com/assets/images/revisit.svg)\nWe value your privacy\nWe use cookies to enhance your browsing experience, serve personalised ads or content, and analyse our traffic. By clicking \"Accept All\", you consent to our use of cookies.\nCustomise Reject All Accept All\nCustomise Consent Preferences ![](https://cdn-cookieyes.com/assets/images/close.svg)\nWe use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.\nThe cookies that are categorised as \"Necessary\" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... Show more\nNecessaryAlways Active\nNecessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.\n  * Cookie\nBCTempID\n  * Duration\n10 minutes\n  * Description\nNo description available.\n\n\n  * Cookie\n__cf_bm\n  * Duration\n1 hour\n  * Description\nThis cookie, set by Cloudflare, is used to support Cloudflare Bot Management. \n\n\n  * Cookie\nAWSALBCORS\n  * Duration\n7 days\n  * Description\nAmazon Web Services set this cookie for load balancing.\n\n\n  * Cookie\n_cfuvid\n  * Duration\nsession\n  * Description\nCloudflare sets this cookie to track users across sessions to optimize user experience by maintaining session consistency and providing personalized services\n\n\n  * Cookie\nli_gc\n  * Duration\n6 months\n  * Description\nLinkedin set this cookie for storing visitor's consent regarding using cookies for non-essential purposes.\n\n\n  * Cookie\n__hssrc\n  * Duration\nsession\n  * Description\nThis cookie is set by Hubspot whenever it changes the session cookie. The __hssrc cookie set to 1 indicates that the user has restarted the browser, and if the cookie does not exist, it is assumed to be a new session.\n\n\n  * Cookie\n__hssc\n  * Duration\n1 hour\n  * Description\nHubSpot sets this cookie to keep track of sessions and to determine if HubSpot should increment the session number and timestamps in the __hstc cookie.\n\n\n  * Cookie\nwpEmojiSettingsSupports\n  * Duration\nsession\n  * Description\nWordPress sets this cookie when a user interacts with emojis on a WordPress site. It helps determine if the user's browser can display emojis properly.\n\n\n  * Cookie\nBCSessionID\n  * Duration\n1 year 1 month 4 days\n  * Description\nBlueconic sets this cookie as a unique identifier for the BlueConic profile.\n\n\n  * Cookie\n_octo\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\nlogged_in\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\n__Secure-YEC\n  * Duration\npast\n  * Description\nYouTube sets this cookie to stores the user's video player preferences using embedded YouTube video\n\n\n  * Cookie\n__eoi\n  * Duration\n6 months\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nAWSALBTGCORS\n  * Duration\n7 days\n  * Description\nNo description available.\n\n\n  * Cookie\nlogin-status-p\n  * Duration\npast\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nAWSALBTG\n  * Duration\n7 days\n  * Description\nNo description available.\n\n\n  * Cookie\ncsrf_token\n  * Duration\nsession\n  * Description\nNo description available.\n\n\n  * Cookie\ntoken_v2\n  * Duration\n1 day\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nD\n  * Duration\n1 year\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nPHPSESSID\n  * Duration\nsession\n  * Description\nThis cookie is native to PHP applications. The cookie stores and identifies a user's unique session ID to manage user sessions on the website. The cookie is a session cookie and will be deleted when all the browser windows are closed.\n\n\n  * Cookie\nVISITOR_PRIVACY_METADATA\n  * Duration\n6 months\n  * Description\nYouTube sets this cookie to store the user's cookie consent state for the current domain. \n\n\n  * Cookie\ncookietest\n  * Duration\nsession\n  * Description\nThe cookietest cookie is typically used to determine whether the user's browser accepts cookies, essential for website functionality and user experience.\n\n\n  * Cookie\n__Host-airtable-session\n  * Duration\n1 year\n  * Description\nThis cookie is used to enable us to integrate the services of Airtable.\n\n\n  * Cookie\n__Host-airtable-session.sig\n  * Duration\n1 year\n  * Description\nThis cookie is used to enable us to integrate the services of Airtable.\n\n\n  * Cookie\nm\n  * Duration\n1 year 1 month 4 days\n  * Description\nStripe sets this cookie for fraud prevention purposes. It identifies the device used to access the website, allowing the website to be formatted accordingly.\n\n\n  * Cookie\nBIGipServer*\n  * Duration\nsession\n  * Description\nMarketo sets this cookie to collect information about the user's online activity and build a profile about their interests to provide advertisements relevant to the user. \n\n\n  * Cookie\n__cfruid\n  * Duration\nsession\n  * Description\nCloudflare sets this cookie to identify trusted web traffic.\n\n\n  * Cookie\n_GRECAPTCHA\n  * Duration\n6 months\n  * Description\nGoogle Recaptcha service sets this cookie to identify bots to protect the website against malicious spam attacks.\n\n\n  * Cookie\n__Secure-YNID\n  * Duration\n6 months\n  * Description\nGoogle cookie used to protect user security and prevent fraud, especially during the login process.\n\n\n  * Cookie\ncookieyes-consent\n  * Duration\n1 year\n  * Description\nCookieYes sets this cookie to remember users' consent preferences so that their preferences are respected on subsequent visits to this site. It does not collect or store any personal information about the site visitors.\n\n\nFunctional\nFunctional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.\n  * Cookie\nlidc\n  * Duration\n1 day\n  * Description\nLinkedIn sets the lidc cookie to facilitate data center selection.\n\n\n  * Cookie\nbrw\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\nbrwConsent\n  * Duration\n5 minutes\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nWMF-Uniq\n  * Duration\n1 year\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nloom_anon_comment\n  * Duration\n1 year\n  * Description\nNo description available.\n\n\n  * Cookie\nloom_referral_video\n  * Duration\nsession\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nVISITOR_INFO1_LIVE\n  * Duration\n6 months\n  * Description\nA cookie set by YouTube to measure bandwidth that determines whether the user gets the new or old player interface.\n\n\n  * Cookie\nyt-remote-connected-devices\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to store the user's video preferences using embedded YouTube videos.\n\n\n  * Cookie\nytidb::LAST_RESULT_ENTRY_KEY\n  * Duration\nNever Expires\n  * Description\nThe cookie ytidb::LAST_RESULT_ENTRY_KEY is used by YouTube to store the last search result entry that was clicked by the user. This information is used to improve the user experience by providing more relevant search results in the future.\n\n\n  * Cookie\nyt-remote-device-id\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to store the user's video preferences using embedded YouTube videos.\n\n\n  * Cookie\nyt-remote-session-name\n  * Duration\nsession\n  * Description\nThe yt-remote-session-name cookie is used by YouTube to store the user's video player preferences using embedded YouTube video.\n\n\n  * Cookie\nyt-remote-fast-check-period\n  * Duration\nsession\n  * Description\nThe yt-remote-fast-check-period cookie is used by YouTube to store the user's video player preferences for embedded YouTube videos.\n\n\n  * Cookie\nyt-remote-session-app\n  * Duration\nsession\n  * Description\nThe yt-remote-session-app cookie is used by YouTube to store user preferences and information about the interface of the embedded YouTube video player.\n\n\n  * Cookie\nyt-remote-cast-available\n  * Duration\nsession\n  * Description\nThe yt-remote-cast-available cookie is used to store the user's preferences regarding whether casting is available on their YouTube video player.\n\n\n  * Cookie\nyt-remote-cast-installed\n  * Duration\nsession\n  * Description\nThe yt-remote-cast-installed cookie is used to store the user's video player preferences using embedded YouTube video.\n\n\n  * Cookie\ncp_session\n  * Duration\n3 months\n  * Description\nCodepen sets this cookie for Help systems found in the website.\n\n\n  * Cookie\nloid\n  * Duration\n1 year 1 month 4 days\n  * Description\nThis cookie is set by the Reddit. The cookie enables the sharing of content from the website onto the social media platform.\n\n\nAnalytics\nAnalytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.\n  * Cookie\n__hstc\n  * Duration\n6 months\n  * Description\nHubspot set this main cookie for tracking visitors. It contains the domain, initial timestamp (first visit), last timestamp (last visit), current timestamp (this visit), and session number (increments for each subsequent session).\n\n\n  * Cookie\nhubspotutk\n  * Duration\n6 months\n  * Description\nHubSpot sets this cookie to keep track of the visitors to the website. This cookie is passed to HubSpot on form submission and used when deduplicating contacts.\n\n\n  * Cookie\n_ga\n  * Duration\n1 year 1 month 4 days\n  * Description\nGoogle Analytics sets this cookie to calculate visitor, session and campaign data and track site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognise unique visitors.\n\n\n  * Cookie\n_ga_*\n  * Duration\n1 year 1 month 4 days\n  * Description\nGoogle Analytics sets this cookie to store and count page views.\n\n\n  * Cookie\n__Host-psifi.analyticsTrace\n  * Duration\n6 hours\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\n__Host-psifi.analyticsTraceV2\n  * Duration\n6 hours\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\n_gh_sess\n  * Duration\nsession\n  * Description\nGitHub sets this cookie for temporary application and framework state between pages like what step the user is on in a multiple step form.\n\n\n  * Cookie\nYSC\n  * Duration\nsession\n  * Description\nYSC cookie is set by Youtube and is used to track the views of embedded videos on Youtube pages.\n\n\n  * Cookie\najs_anonymous_id\n  * Duration\n1 year\n  * Description\nThis cookie is set by Segment to count the number of people who visit a certain site by tracking if they have visited before.\n\n\n  * Cookie\nvuid\n  * Duration\n1 year 1 month 4 days\n  * Description\nVimeo installs this cookie to collect tracking information by setting a unique ID to embed videos on the website. \n\n\nPerformance\nPerformance cookies are used to understand and analyse the key performance indexes of the website which helps in delivering a better user experience for the visitors.\n  * Cookie\nAWSALB\n  * Duration\n7 days\n  * Description\nAWSALB is an application load balancer cookie set by Amazon Web Services to map the session to the target.\n\n\n  * Cookie\nacq\n  * Duration\npast\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nacq.sig\n  * Duration\npast\n  * Description\nDescription is currently not available.\n\n\n  * Cookie\nptc\n  * Duration\n2 years\n  * Description\nNo description available.\n\n\nAdvertisement\nAdvertisement cookies are used to provide visitors with customised advertisements based on the pages you visited previously and to analyse the effectiveness of the ad campaigns.\n  * Cookie\nmuc_ads\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to collect user behaviour and interaction data to optimize the website.\n\n\n  * Cookie\nguest_id_marketing\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to identify and track the website visitor.\n\n\n  * Cookie\nguest_id_ads\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to identify and track the website visitor.\n\n\n  * Cookie\npersonalization_id\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to integrate and share features for social media and also store information about how the user uses the website, for tracking and targeting.\n\n\n  * Cookie\nguest_id\n  * Duration\n1 year 1 month 4 days\n  * Description\nTwitter sets this cookie to identify and track the website visitor. It registers if a user is signed in to the Twitter platform and collects information about ad preferences.\n\n\n  * Cookie\nbcookie\n  * Duration\n1 year\n  * Description\nLinkedIn sets this cookie from LinkedIn share buttons and ad tags to recognize browser IDs.\n\n\n  * Cookie\n__Secure-ROLLOUT_TOKEN\n  * Duration\n6 months\n  * Description\nYouTube sets this cookie to manage feature rollout and experimentation. It helps Google control which new features or interface changes are shown to users as part of testing and staged rollouts, ensuring consistent experience for a given user during an experiment.\n\n\n  * Cookie\nyt.innertube::nextId\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen.\n\n\n  * Cookie\nyt.innertube::requests\n  * Duration\nNever Expires\n  * Description\nYouTube sets this cookie to register a unique ID to store data on what videos from YouTube the user has seen.\n\n\n  * Cookie\nsession_tracker\n  * Duration\nsession\n  * Description\nThis cookie is set by the Reddit. This cookie is used to identify trusted web traffic. It also helps in adverstising on the website.\n\n\n  * Cookie\nedgebucket\n  * Duration\nsession\n  * Description\nReddit sets this cookie to save the information about a log-on Reddit user, for the purpose of advertisement recommendations and updating the content.\n\n\n  * Cookie\ndid\n  * Duration\n1 year\n  * Description\nArbor sets this cookie to show targeted ads to site visitors.This cookie expires after 2 months or 1 year.\n\n\nUncategorised\nOther uncategorised cookies are those that are being analysed and have not been classified into a category as yet.\nNo cookies to display.\nReject All Save My Preferences Accept All\nToggle Search[](https://towardsdatascience.com/)Toggle Mobile Navigation\n[](https://towardsdatascience.com/)\nPublish AI, ML & data-science insights to a global community of data professionals.\nSign in[Submit an Article](https://write.insightmediagroup.io)\n[Latest](https://towardsdatascience.com/latest/)[Editor's Picks](https://towardsdatascience.com/tag/editors-pick/)[Newsletter](https://towardsdatascience.com/tag/the-variable/)[ShipAI](https://towardsdatascience.com/shipai/)\n* * *\n[Write For TDS](https://towardsdatascience.com/submissions/)\n[LinkedIn](https://www.linkedin.com/company/towards-data-science/)[X](https://x.com/TDataScience)Toggle Search\n[Deep Learning](https://towardsdatascience.com/category/artificial-intelligence/deep-learning/)\n# Depth Anything -A Foundation Model for Monocular Depth Estimation\nDepth Anything: Unleashing the Power of Large-Scale Unlabeled Data by L. Yang et. al.\n[Sascha Kirch](https://towardsdatascience.com/author/saschakirch/)\nMarch 20, 202411 min read\n### [🚀 Sascha's Paper Club](https://towardsdatascience.com/tagged/saschas-paper-club)\n![Image created from publication by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/1mV_i7WpiVDOnNaIZDRYvzg.png)\nImage created from [publication](https://arxiv.org/abs/2401.10891) by [Sascha Kirch](https://medium.com/@SaschaKirch)\nMonocular depth estimation, the prediction of distance in 3D space from a 2D image. The \"ill posed and inherently ambiguous problem\", as stated in literally every paper on depth estimation, is a fundamental problem in computer vision and robotics. At the same time foundation models dominate the scene in deep learning based NLP and computer vision. Wouldn't it be awesome if we could leverage their success for depth estimation too?\nIn today's paper walkthrough we'll dive into Depth Anything, a foundation model for monocular depth estimation. We will discover its architecture, the tricks used to train it and how it is used for metric depth estimation.\n* * *\n> **Paper:** [Depth Anything: Unleashing the Power of Large-Scale Unlabeled Data](https://arxiv.org/abs/2401.10891), Lihe Yang et.al., 19 Jan. 2024\n> **Resources:** [GitHub](https://github.com/LiheYoung/Depth-Anything) - [Project Page](https://depth-anything.github.io/) - [Demo](https://huggingface.co/spaces/LiheYoung/Depth-Anything) - [Checkpoints](https://huggingface.co/spaces/LiheYoung/Depth-Anything/tree/main)\n> **Conference:** CVPR2024\n> **Category:** foundation models, monocular depth estimation\n> [**Other Walkthroughs**](https://medium.com/@SaschaKirch/list/paper-walkthroughs-by-sascha-kirch-89c7847da8e2)**:** [[BYOL](https://towardsdatascience.com/byol-the-alternative-to-contrastive-self-supervised-learning-5d0a26983d7c?sk=fc5a3b3a556088181d8726226862252c)] - [[CLIP](https://towardsdatascience.com/the-clip-foundation-model-7770858b487d?sk=a7b10ba1d0c3a20ecd4adb8200a48500)] - [[GLIP](https://towardsdatascience.com/glip-introducing-language-image-pre-training-to-object-detection-5ddb601873aa?sk=4f0acb404a38d342b7669f861c013a05)] - [[Segment Anything](https://towardsdatascience.com/segment-anything-promptable-segmentation-of-arbitrary-objects-f28958c5612d?sk=bd1311a6d8b1e0e6d3369d536dba0700)] - [[DINO](https://towardsdatascience.com/segment-anything-promptable-segmentation-of-arbitrary-objects-f28958c5612d?source=friends_link&sk=bd1311a6d8b1e0e6d3369d536dba0700)] - [[DDPM](https://towardsdatascience.com/the-rise-of-diffusion-models-a-new-era-of-generative-deep-learning-3ef4779f6e1b?sk=8c178422a977c6f49ec24b13502be4fd)]\n* * *\nLearn this step by step with the interactive [Machine Learning](https://roadmap.sh/machine-learning) roadmap.\n## Outline\n  1. Context & Background\n  2. Method\n  3. Qualitative Results\n  4. Experiments & Ablations\n  5. Further Readings & Resources\n\n\n* * *\n## Context & Background\n_**Why is depth such an important modality and why using deep learning for it?**_\n![Fig.1: Image and corresponding depth map. Image by Sascha Kirch and Depth Map created with Depth Anything Hugging Face Demo.](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/1gsrE8KiZ41jKpOYYc_Z09w.png)\nFig.1: Image and corresponding depth map. Image by [Sascha Kirch](https://medium.com/@SaschaKirch) and Depth Map created with [Depth Anything Hugging Face Demo](https://huggingface.co/spaces/LiheYoung/Depth-Anything).\nPut simply: to navigate through 3D space, one must need to know where all the stuff is and at which distance. Classical applications include collision avoidance, drivable space detection, placing objects into a virtual or augmented reality, creating 3D objects, navigating a robot to grab an object and many more.\nDepth can be captured with a variety of sensors featuring different measurement modalities, using active or passive measurement principals and different number of sensors. The problem is that every sensor has its pros and cons but to sum it up: capturing accurate depth is expensive!\nSo, wouldn't it be nice to use a sensor that is relatively cheap, does not need a complex setup, does not need a lot of space, is light in weight and is already available in many systems? That sensor is a camera. Using a single camera solves many issues but faces us with new ones: Predicting 3D information from 2D images is ill posed, meaning we have not enough information to unambiguously predict the depth: is the object small or simply far away? Is a surface concave or convex? Sounds like a job for deep learning, our general function approximator!\n_**How has this problem been approached previously?**_\nOver the years many deep learning approaches have been investigated to perform depth estimation from single images. Some tried regression-based approaches to directly predict a depth value, others discretized the depth and performed a classification to predict in which depth-bin a pixel should be.\nWith the rise of generative deep learning many researchers also used GANs, VAEs or even diffusion-based models, including myself 🤓\n> [**RGB-D-Fusion: Image Conditioned Depth Diffusion of Humanoid Subjects by Sascha Kirch et.al., 2023**](https://arxiv.org/abs/2307.15988)\nWhile many models showed promising performance, their usage has often been very application specific: e.g. indoor vs. outdoor scenes, predicting relative depth vs. metric depth, sparse vs. dense depth.\nPretrained foundation models have been shown great 0-shot performance and can be fine-tuned with relatively few data samples to new applications. Since they are quite data-hungry, foundation models are usually only available for modalities that are available on the internet: images and text, but not for depth data... Until now!\n* * *\n## Method\nHaving talked about why depth is important and that having a Foundation Model for depth data would be desirable, let's dive into how the authors of Depth Anything managed to achieve this.\n### Depth Anything in a Nutshell\nDepth Anything is an auto-encoder model that inputs an image and predicts a depth map. It is trained on a combination of labeled and unlabeled images.\nUp to 3 stages are involved in the training process:\n  1. Train a teacher model on labeled images.\n  2. Pretrain a student model (Depth Anything model) using the teacher to create pseudo labels for unlabeled data.\n  3. (Optionally) Fine-tune the model to a specific task or dataset.\n\n\n![Fig.2: Depth Anything pipeline. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/1YNiS89_2I-sS_qhAz4bhkQ.gif)\nFig.2: Depth Anything pipeline. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n _**Digging a bit deeper**_\nCollecting large amount of data with labels is expensive and time consuming. On the other hand, unlabeled images are available in a vast amount and are easy to collect. So naturally we'd like to utilize this data for training deep learning models. Some previous work had the same idea and used unlabeled data in combination with classical computer vision algorithms like stereo calibration or structure from motion to obtain depth labels, but this is quite time consuming.\nThe authors of Depth Anything trained a strong teacher model using the labeled dataset of 1.5M samples with a strong pre-trained DINOv2 encoder (a foundation model known for its semantically rich representations) and use it to generate pseudo labels for the 62M unlabeled samples that are used to train the student.\nIn that way the student can be trained using supervised techniques and they were able to obtain dense depth maps quickly and easily. Note that the pseudo labels are not perfect though and further tricks are required to train the student. The student has the same architecture as the teacher but is not using the teacher's weights. Its encoder is also initialized with DINOv2 but its decoder is initialized randomly.\n> [**Get an email whenever Sascha Kirch publishes 🚀**](https://medium.com/@SaschaKirch/subscribe)[ _Get an email whenever Sascha Kirch publishes 🚀 Looking to learn more about deep learning or simply stay up to dat_e...medium.com](https://medium.com/@SaschaKirch/subscribe)\n_**Some Words on the Feature Alignment**_\nPrevious work has shown that depth estimation can be improved when training your model with an additional semantic segmentation task. The intuition behind it is, if you have a better understanding of the world (more meaningful feature embeddings) can also better resolve ambiguities in the depth estimation task.\nIn a failed attempt, the authors of Depth Anything tried to train a shared encoder with individual decoders for the depth estimation task and the semantic segmentation task on the unlabeled data. The unlabeled images have been labeled with a combination of Foundation models.\nEventually they implemented the feature alignment constraint. During the training of the student model, the encoder of the student is constrained to have similar features as the frozen DINOv2 encoder (a foundation model known for its semantically rich representations). Their similarity, as we will see later, is enforced by a cosine similarity.\nHowever, since DINOv2 has very similar features for subparts of an object (e.g front and rear of a car) and in depth estimation sub-parts can have very different depth values, they also introduce a margin to enforce the similarity too strongly, but still benefit from it.\n_**And What about those Perturbations?**_\nSo, only adding unlabeled data to the training pipeline is not sufficient to further improve the performance upon the labeled data only baseline.\nWhat the authors did is to add strong perturbations to the unlabeled data that are consumed by the student. Note that these are added only to the student input and not to the teacher and not to the [DINO](https://towardsdatascience.com/segment-anything-promptable-segmentation-of-arbitrary-objects-f28958c5612d?source=friends_link&sk=bd1311a6d8b1e0e6d3369d536dba0700)v2 encoder. Similar approaches have been used already in other self-supervised frameworks like in DINO and [BYOL](https://towardsdatascience.com/byol-the-alternative-to-contrastive-self-supervised-learning-5d0a26983d7c?sk=fc5a3b3a556088181d8726226862252c).\nThese perturbations include augmentation techniques like color jittering, noising the image and spatial distortions.\nThe intuition behind those is always similar: make the models to learn similar features for the same things regardless of their appearance in the image. A car is a car regardless of the image being blurred or horizontally mirrored.\n### The Data used to train the Model\nThe authors compose a dataset consisting of 1.5 million labeled images and 62 million unlabeled images of a variety of indoor and outdoor scenes.\nThe labels are dense depth maps meaning, each pixel will have a depth associated with it (might need interpolation if the map is smaller as the image).\n![Table 1: Dataset composition. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/1BUXPekBp_YUhrqxDR9c-Jg.gif)\nTable 1: Dataset composition. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\nAs mentioned earlier, the labeled data is used to train a teacher model and the student model. The unlabeled data is used to train the student model only.\n### The Loss Function to Train the Model\nThe student model's loss function is an average of 3 loss terms:\n  1. Loss for labeled images between student predictions and ground truth.\n  2. Loss for feature alignment between student encoder and DINOv2.\n  3. Loss for unlabeled images between student prediction and pseudo label generated by the teacher from the unlabeled data.\n\n\n_**Let's start with the labeled images:**_ It is a simple mean absolute error aka. MAE, between predictions of the student on images and their corresponding labels of the labeled dataset.\n![Equation 1: Loss term for labeled images. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/158BkC61wTVK-3N2KED_oqQ.gif)\nEquation 1: Loss term for labeled images. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n _**The feature alignment loss**_ is calculated by the average cosine similarity between the encoder output of the student model and the DINOv2 encoder output. Since we want to have the loss to penalizes dissimilarities, we subtract the cosine similarity from 1. Note that the cosine similarity measures the angle between 2 vectors, not their distance.\n![Equation 2: Loss term for the feature alignment. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/11cfgk5PpXPXfRq_gHnJuTw.gif)\nEquation 2: Loss term for the feature alignment. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n> Note: The paper mentions a margin 𝛼 to not contrain the similarity too strongly, as described earlier. The paper is not really clear about that but I guess they ignore losses that are <𝛼, and they use 𝛼=0.15 according their ablation studies.\n_**Finally let's have a look on the unlabeled data.**_ Despite the strong perturbations applied to single images, the authors also implement a CutMix augmentation for 50% of the samples. It basically combines 2 images using a mask.\n![Equation 3: CutMix image construction. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/19aJT-sLP3GArWeEhYiGpPg.gif)\nEquation 3: CutMix image construction. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\nThe combined image is then fed into the student model and the individual image is fed into the teacher model to obtain the pseudo label. Then a mean absolute error is calculated. Note that the loss is calculated twice, one time for each contributing image determined by the mask M.\n![Equation 4: Individual loss terms for the loss term used for unlabeled images. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/1Qg-BpVfdYuwGyo6H66pZDQ.gif)\nEquation 4: Individual loss terms for the loss term used for unlabeled images. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\nFinally, the individual terms are added and the average over all pixels is taken. I guess there is no need to multiply again by the mask since it has been done in the equation above already.\n![Equation 5: Loss term for unlabeled images. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/1ereAfjJ7mCClZT7NiuUjtQ.gif)\nEquation 5: Loss term for unlabeled images. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n* * *\n## Qualitative Results\nBefore diving into the experiments and ablations, let's change the order of the paper and first inspect some qualitative results.\nIn a first test, the model was inferred with unseen images from different domains including indoor and outdoor scenes with different lighting conditions.\n![Fig. 3: Qualitative results on six unseen datasets. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/15PGWxl6emfCB5lsaGcB7Sw.png)\nFig. 3: Qualitative results on six unseen datasets. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\nFurther, the compare their performance against MiDaS v3.1, showing that the Depth Anything model in general is able to capture more details and has a better general understanding of the scene allowing to resolve ambiguities much better.\n![Fig. 4: Qualitative comparison between Depth Anything and MiDaS v3.1. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/1ZVrK2SbcKGV_XMIDVnpQXA.png)\nFig. 4: Qualitative comparison between Depth Anything and MiDaS v3.1. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\nIn a final qualitative test, they took a ControlNet, a diffusion-based generative model to generate new images conditioned on the predicted depth map and an input prompt.\n![Fig. 5: Using predicted depth for depth+text condition ControlNet for image generation. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/1oklLoF-KJMfjuB_hVGYyOg.gif)\nFig. 5: Using predicted depth for depth+text condition ControlNet for image generation. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n* * *\n## Experiments and Ablations\nLet's now take a closer look onto the experiments and ablations that have been performed to evaluate the effectiveness of their method.\n### Experiments\nIn Summary, the authors show in their experiments that:\n  1. the Depth Anything encoder outperforms previous SOTA on 0-shot relative depth estimation and fine-tuned metric depth estimation even with smaller backbone.\n  2. the feature alignment constraint is effective and that the Depth Anything encoder has semantically rich features that can be fine-tuned into segmentation model.\n\n\n_**Zero-Shot, Relative Depth Estimation**_\nIn this experiment, the Depth Anything model is pre-trained on the dataset composed by the authors and evaluated on other datasets without having seen a sample from the individual datasets (0-shot). It is compared against the best checkpoint of MiDaS v3.1.\n![Table 2: Zero-Shot Relative Depth Estimation. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/1stzju7r6dxRQrVgCabr2kw.gif)\nTable 2: _Zero-Shot Relative Depth Estimation_. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n _**Fine-Tuned (In-Domain) Metric Depth Estimation**_\nIn this experiment the Depth Anything model pre-trained on relative depth estimation is fine-tuned for metric depth estimation. An encoder-decoder model is initialized with the pre-trained Depth Anything encoder and a randomly initialized decoder. It is then fine-tuned using the ZoeDepth framework on the training set of a given dataset and finally evaluated on the same dataset and compared to other models.\n![Table 3: Fine-Tuned \\(In-Domain\\) Metric Depth Estimation. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/1azaq7HPhwbHd4VIVUHWf5A.gif)\nTable 3: _Fine-Tuned (In-Domain) Metric Depth Estimation_. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n _**Fine-Tuned (Zero-Shot) Metric Depth Estimation**_\nHere the same pre-trained Depth Anything model is fine-tuned on metric depth estimation, but this time evaluated on another dataset than it was tested on.\nThe ZoeDepth framework is used to fine-tune two metric depth estimation models. The first one uses MiDaS v3.1 (shown as ZoeDepth in the table) as encoder and the second one uses the Depth Anything encoder.\n![Table 4: Fine-Tuned \\(Zero-Shot\\) Metric Depth Estimation. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/1mlQrGfPDKbONdAQk-TEEVQ.gif)\nTable 4: _Fine-Tuned (Zero-Shot) Metric Depth Estimation_. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n _**Fine-Tuned Semantic Segmentation**_\nIn this experiment the authors test the semantic capability of the Depth Anything encoder. Recall that it was constrained during training with their feature alignment loss to have similar features as the DINOv2 encoder, a foundation model to be known to have rich semantic embeddings.\n![Table 5: Fine-Tuned Semantic Segmentation. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/1IIMN8mxDvv1sRLR7QA1HDw.png)\nTable 5: _Fine-Tuned Semantic Segmentation_. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n### Ablations\n_**General Ablation Study**_\nIn this general ablation study, the authors tested the effectiveness of their different loss terms and constraints and the strong perturbations on unlabeled data.\n![Table 6: General Ablation Study for individual loss terms and the strong perturbations. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/1tM87O5U5nYEu5rNXFJmkoQ.gif)\nTable 6: _General Ablation Study_ for individual loss terms and the strong perturbations. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n _**Different Encoders for Downstream Task**_\nIn this final ablation study the authors show that their encoder is superior to DINOv2's and MiDaS' encoder when fine-tuned on depth estimation and semantic segmentation tasks suggesting the feature space of the Depth Anything encoder captures more semantic information.\n![Table 7: Comparision of different encoders on different downstream tasks. Source + annotations by Sascha Kirch](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/03/1Bmu1K8TRmgJGRlg91lJdkA.gif)\nTable 7: Comparision of different encoders on different downstream tasks. [Source ](https://arxiv.org/abs/2401.10891)+ annotations by [Sascha Kirch](https://medium.com/@SaschaKirch)\n* * *\n## Conclusion\nDepth Anything is a great step towards Foundation Models in other domains than image or text. They have successfully trained a strong and semantically rich encoder model that can be either used in a 0-shot mode or further fine-tuned to a custom dataset.\n* * *\n## Further Readings & Resources\nHere a list of links with further reassorces on Depth Anything and Foundation Models.\n_**Hugging Face Demo to play with Depth Anything:**_\n> [**Depth Anything - a Hugging Face Space by LiheYoung**](https://huggingface.co/spaces/LiheYoung/Depth-Anything)\n_**Paper Walkthroughs**_\nYou might also like my other paper walkthroughs covering other foundation models:\n> [**Paper Walkthroughs by Sascha Kirch**](https://medium.com/@SaschaKirch/list/89c7847da8e2)\n## Register Now to Continue Reading\n### Unlock Towards Data Science with a Free Account\nAll articles on Towards Data Science are available to registered users. Create a free account today to access this article and thousands more.\nRegister for freeSign in to your account\n* * *\n![](https://assets.insightmediagroup.io/media/1787657088944_hlxvw4.png)\nWritten By\n## [Sascha Kirch](https://towardsdatascience.com/author/saschakirch/)\n[See all from Sascha Kirch](https://towardsdatascience.com/author/saschakirch/)\n[Editor's Picks](https://towardsdatascience.com/tag/editors-pick/)[Deep Dives](https://towardsdatascience.com/tag/deep-dives/)[Deep Learning](https://towardsdatascience.com/tag/deep-learning/)[Foundation Models](https://towardsdatascience.com/tag/foundation-models/)[Saschas Paper Club](https://towardsdatascience.com/tag/saschas-paper-club/)\nShare This Article\n  * [](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Ftowardsdatascience.com%2Fdepth-anything-a-foundation-model-for-monocular-depth-estimation-8a7920b5c9cc%2F&title=Depth%20Anything%20-A%20Foundation%20Model%20for%20Monocular%20Depth%20Estimation)\n  * [](https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Ftowardsdatascience.com%2Fdepth-anything-a-foundation-model-for-monocular-depth-estimation-8a7920b5c9cc%2F&title=Depth%20Anything%20-A%20Foundation%20Model%20for%20Monocular%20Depth%20Estimation)\n  * [](https://x.com/share?url=https%3A%2F%2Ftowardsdatascience.com%2Fdepth-anything-a-foundation-model-for-monocular-depth-estimation-8a7920b5c9cc%2F&text=Depth%20Anything%20-A%20Foundation%20Model%20for%20Monocular%20Depth%20Estimation)\n\n\nTowards Data Science is a community publication. Submit your insights to reach our global audience and earn through the TDS Author Payment Program.\n[Write for TDS](https://towardsdatascience.com/submissions/)\n## Related Articles\n  * [![](https://assets.insightmediagroup.io/media/1787815057461_e8hnid.jpg)](https://towardsdatascience.com/a-beginners-guide-to-world-models/)\n## [A Beginner’s Guide to World Models](https://towardsdatascience.com/a-beginners-guide-to-world-models/)\n[Deep Learning](https://towardsdatascience.com/category/artificial-intelligence/deep-learning/)\nLearn how to simulate reality with Python\n[Mauro Di Pietro](https://towardsdatascience.com/author/maurodp/)\nSeptember 8, 20269 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2020/08/0r7WLl-w-r1ewZJ9f-scaled.jpg)](https://towardsdatascience.com/normalized-discounted-cumulative-gain-37e6f75090e9/)\n## [Normalized Discounted Cumulative Gain](https://towardsdatascience.com/normalized-discounted-cumulative-gain-37e6f75090e9/)\n[Artificial Intelligence](https://towardsdatascience.com/category/artificial-intelligence/)\nA Metric for Evaluating Recommendation Engines\n[Kurtis Pykes](https://towardsdatascience.com/author/kurtispykes/)\nAugust 8, 20205 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2025/03/Hadoop-ecosystem-1.png)](https://towardsdatascience.com/mastering-hadoop-part-3-hadoop-ecosystem-get-the-most-out-of-your-cluster/)\n## [Mastering Hadoop, Part 3: Hadoop Ecosystem: Get the most out of your cluster](https://towardsdatascience.com/mastering-hadoop-part-3-hadoop-ecosystem-get-the-most-out-of-your-cluster/)\n[Data Engineering](https://towardsdatascience.com/category/data-science/data-engineering/)\nExploring the Hadoop ecosystem — key tools to maximize your cluster’s potential\n[Niklas Lang](https://towardsdatascience.com/author/niklas_lang/)\nMarch 14, 202520 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2020/09/1sT9zTDM5LQsWhigt8pH-6w.jpeg)](https://towardsdatascience.com/3-deep-learning-algorithms-in-under-5-minutes-part-2-deep-sequential-models-b84e3a29d9a8/)\n## [3 Deep Learning Algorithms in under 5 minutes - Part 2 (Deep Sequential Models)](https://towardsdatascience.com/3-deep-learning-algorithms-in-under-5-minutes-part-2-deep-sequential-models-b84e3a29d9a8/)\n[Artificial Intelligence](https://towardsdatascience.com/category/artificial-intelligence/)\nNo traces of intimidating linear algebra detected...\n[Thushan Ganegedara](https://towardsdatascience.com/author/thushv89/)\nSeptember 1, 20207 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2023/07/0-mYlhUpK57CJUSF6.jpg)](https://towardsdatascience.com/the-transformer-architecture-of-gpt-models-b8695b48728b/)\n## [The Transformer Architecture of GPT Models](https://towardsdatascience.com/the-transformer-architecture-of-gpt-models-b8695b48728b/)\n[Deep Learning](https://towardsdatascience.com/category/artificial-intelligence/deep-learning/)\nLearn the details of the Transformer architecture\n[Beatriz Stollnitz](https://towardsdatascience.com/author/bea_684/)\nJuly 25, 202323 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2023/09/06AqvHdEYHKx3qNC--scaled.jpg)](https://towardsdatascience.com/is-pytorchs-nesterov-momentum-implementation-wrong-5dc5f5032008/)\n## [Is PyTorch's Nesterov Momentum Implementation Wrong?](https://towardsdatascience.com/is-pytorchs-nesterov-momentum-implementation-wrong-5dc5f5032008/)\n[Deep Learning](https://towardsdatascience.com/category/artificial-intelligence/deep-learning/)\nWe examine and explain the differences between the original formulation of Nesterov momentum and PyTorch's implementation.\n[Jason Vega](https://towardsdatascience.com/author/jasonvega14/)\nSeptember 2, 20237 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2021/10/0VlcUnnUdsuODJd2l-scaled.jpg)](https://towardsdatascience.com/confirmatory-factor-analysis-theory-aac11af008a6/)\n## [Confirmatory Factor Analysis Fundamentals](https://towardsdatascience.com/confirmatory-factor-analysis-theory-aac11af008a6/)\n[](https://towardsdatascience.com/depth-anything-a-foundation-model-for-monocular-depth-estimation-8a7920b5c9cc/)\nHow it works and can be used in your research\n[Rafael Valdece Sousa Bastos](https://towardsdatascience.com/author/rafavsbastos/)\nOctober 9, 20219 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2020/06/1cboPN6YlubpMvuYLxPSP6A.jpeg)](https://towardsdatascience.com/overview-of-human-pose-estimation-neural-networks-hrnet-higherhrnet-architectures-and-faq-1954b2f8b249/)\n## [Overview of Human Pose Estimation Neural Networks - HRNet + HigherHRNet, Architectures and FAQ -...](https://towardsdatascience.com/overview-of-human-pose-estimation-neural-networks-hrnet-higherhrnet-architectures-and-faq-1954b2f8b249/)\n[Deep Learning](https://towardsdatascience.com/category/artificial-intelligence/deep-learning/)\nHigh Resolution Net (HRNet) is a state of the art neural network for human pose estimation - an image processing task which finds the...\n[Peter](https://towardsdatascience.com/author/peternaf/)\nJune 13, 20209 min read\n  * [![](https://assets.insightmediagroup.io/media/wp-content/uploads/2024/04/16sL-D5TLhN7mOpgKvla7ww.png)](https://towardsdatascience.com/avoiding-abuse-and-misuse-of-t-test-and-anova-regression-for-categorical-responses-af15af53a456/)\n## [Avoiding abuse and misuse of T-test and ANOVA: Regression for categorical responses](https://towardsdatascience.com/avoiding-abuse-and-misuse-of-t-test-and-anova-regression-for-categorical-responses-af15af53a456/)\n[Data Visualization](https://towardsdatascience.com/category/data-science/data-visualization/)\nAn approach using Bayesian regression with brms\n[Daniel Manrique Castano](https://towardsdatascience.com/author/damanrique/)\nApril 7, 202412 min read\n\n\n  * [YouTube](https://www.youtube.com/c/TowardsDataScience)\n  * [X](https://x.com/TDataScience)\n  * [LinkedIn](https://www.linkedin.com/company/towards-data-science/)\n  * [Threads](https://www.threads.net/@towardsdatascience)\n  * [Bluesky](https://bsky.app/profile/towardsdatascience.com)\n\n\n[](https://towardsdatascience.com/)\nYour home for data science and AI. The world's leading publication for data science, data analytics, data engineering, machine learning, and artificial intelligence professionals.\nSubscribe to Our Newsletter[Write For TDS](https://towardsdatascience.com/submissions/)•[About](https://towardsdatascience.com/about-towards-data-science-d691af11cc2f/)•[Advertise](https://contact.towardsdatascience.com/advertise-with-towards-data-science)•[Privacy Policy](https://towardsdatascience.com/privacy-policy/)•[Terms of Use](https://towardsdatascience.com/website-terms-of-use/)\n© Insight Media Group, LLC 2026•[The New Stack](https://thenewstack.io)•[roadmap.sh](https://roadmap.sh)•[Creator Network](https://insightmediagroup.io/creator-network)\n####  Recommended Articles \nClose\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607631/image?etag=1781543525510&width=500&height=500) Critical Mistakes Companies Make When Integrating AI/ML into Their Processes ](https://towardsdatascience.com/critical-mistakes-companies-make-when-integrating-ai-ml-into-their-processes/ \"Critical Mistakes Companies Make When Integrating AI/ML into Their Processes\")\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607686/image?etag=1782161464448&width=500&height=500) How Relevance Models Foreshadowed Transformers for NLP ](https://towardsdatascience.com/how-relevance-models-foreshadowed-transformers-for-nlp/ \"How Relevance Models Foreshadowed Transformers for NLP\")\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607639/image?etag=1781250125848&width=500&height=500) Javascript Fatigue: HTMX Is All You Need to Build ChatGPT — Part 1 ](https://towardsdatascience.com/javascript-fatigue-you-dont-need-js-to-build-chatgpt/ \"Javascript Fatigue: HTMX Is All You Need to Build ChatGPT — Part 1\")\n  * [ ![](https://h030.towardsdatascience.com/rest/v2/contentStores/d7d3a4ab-7caf-4383-bbd2-fbf7fb4f1787/items/607930/image?etag=1782124566054&width=500&height=500) The Subset Sum Problem Solved in Linear Time for Dense Enough Inputs ](https://towardsdatascience.com/subset-sum-problem-solved-in-linear-time-for-dense-enough-inputs/ \"The Subset Sum Problem Solved in Linear Time for Dense Enough Inputs\")\n\n\n",
  "body_base_path": "attachments/568078ea72ab/pages/",
  "body_markdown_path": "attachments/568078ea72ab/pages/archived-body.md",
  "local_html": "attachments/568078ea72ab/pages/archived-body.html",
  "body_source": "prior_capture"
}