《Keras 3 单眼深度估计》:此文为AI自动翻译

server/2025/2/26 12:51:38/

《Keras 3 单眼深度估计》

作者:Victor Basu
创建日期:2021/08/30
最后修改时间:2024/08/13
描述:使用卷积网络实现深度估计模型。

(i) 此示例使用 Keras 3

 在 Colab 中查看 

 GitHub 源


介绍

深度估计是从 2D 图像推断场景几何结构的关键步骤。 单眼深度估计的目标是预测每个像素的深度值或 推断深度信息,仅给出一个 RGB 图像作为输入。 此示例将展示一种使用 convnet 构建深度估计模型的方法 和简单的损失函数。


设置

import osos.environ["KERAS_BACKEND"] = "tensorflow"import sysimport tensorflow as tf
import keras
from keras import layers
from keras import ops
import pandas as pd
import numpy as np
import cv2
import matplotlib.pyplot as pltkeras.utils.set_random_seed(123)

下载数据集

为此,我们将使用数据集 DIODE:密集的室内和室外深度数据集 教程。但是,我们使用验证集生成训练和评估子集 对于我们的模型。我们使用原始数据集的验证集而不是训练集的原因是 训练集包含 81GB 的数据,相比之下,下载起来很有挑战性 到只有 2.6GB 的验证集。 您可以使用的其他数据集包括 NYU-v2 和 KITTI。

annotation_folder = "/dataset/"
if not os.path.exists(os.path.abspath(".") + annotation_folder):annotation_zip = keras.utils.get_file("val.tar.gz",cache_subdir=os.path.abspath("."),origin="http://diode-dataset.s3.amazonaws.com/val.tar.gz",extract=True,)
Downloading data from http://diode-dataset.s3.amazonaws.com/val.tar.gz 

2774625282/2774625282 ━━━━━━━━━━━━━━━━━━━━ 205s 0us/步


准备数据集

我们只使用室内图像来训练我们的深度估计模型。

path = "val/indoors"filelist = []for root, dirs, files in os.walk(path):for file in files:filelist.append(os.path.join(root, file))filelist.sort()
data = {"image": [x for x in filelist if x.endswith(".png")],"depth": [x for x in filelist if x.endswith("_depth.npy")],"mask": [x for x in filelist if x.endswith("_depth_mask.npy")],
}
df = pd.DataFrame(data)df = df.sample(frac=1, random_state=42)

准备超参数

HEIGHT = 256
WIDTH = 256
LR = 0.00001
EPOCHS = 30
BATCH_SIZE = 32

构建数据管道

  1. 管道采用包含 RGB 图像路径的 DataFrame, 以及深度和深度蒙版文件。
  2. 它读取 RGB 图像并调整其大小。
  3. 它读取深度和深度蒙版文件,对其进行处理以生成深度图图像,然后 调整其大小。
  4. 它返回批处理的 RGB 图像和深度图图像。
class DataGenerator(keras.utils.PyDataset):def __init__(self, data, batch_size=6, dim=(768, 1024), n_channels=3, shuffle=True):super().__init__()"""
        Initialization
        """self.data = dataself.indices = self.data.index.tolist()self.dim = dimself.n_channels = n_channelsself.batch_size = batch_sizeself.shuffle = shuffleself.min_depth = 0.1self.on_epoch_end()def __len__(self):return int(np.ceil(len(self.data) / self.batch_size))def __getitem__(self, index):if (index + 1) * self.batch_size > len(self.indices):self.batch_size = len(self.indices) - index * self.batch_size# Generate one batch of data# Generate indices of the batchindex = self.indices[index * self.batch_size : (index + 1) * self.batch_size]# Find list of IDsbatch = [self.indices[k] for k in index]x, y = self.data_generation(batch)return x, ydef on_epoch_end(self):"""
        Updates indexes after each epoch
        """self.index = np.arange(len(self.indices))if self.shuffle == True:np.random.shuffle(

http://www.ppmy.cn/server/170749.html

相关文章

信息系统项目管理师2025年考试关键知识点梳理-第10章 项目进度管理

项目进度管理是为了保证项目按时完成,对项目所需的各个过程进行管理,包括规划进度、定义活动、排列活动顺序、估算活动持续时间、制定项目进度管理计划和控制进度。 1、管理基础 1.1项目进度计划的定义和总要求 项目进度计划提供了项目的详尽计划,说明项目如何以及何时交…

【PDF预览】使用iframe实现pdf文件预览,加盖章

使用iframe实现pdf文件预览&#xff0c;以及在pdf上添加水印。另外还包括批注、打印、下载、缩放、分页等功能 <iframesrc"http://static.shanhuxueyuan.com/test.pdf"width"100%"height"100%"frameborder"0"></iframe>&l…

asp.net core

初始化 WebApplication.CreateBuilder var builder WebApplication.CreateBuilder(args);用于创建一个 Web 应用程序的构建器 (WebApplicationBuilder) 实例。通过这个构建器&#xff0c;你可以配置应用程序的服务和中间件&#xff0c;进而构建和运行你的 ASP.NET Core Web …

Java进阶学习笔记64——IO流

IO流&#xff1a; 输入输出流&#xff0c;就是读写数据的。 IO流的应用场景&#xff1a; 怎么去学习IO流&#xff1f; 1、先搞清楚IO流的分类、体系&#xff1f; 2、再挨个学习每个IO流的作用、用法。 IO流的分类&#xff1a; 按流的方向分为&#xff1a; 按流中数据的最小…

【Docker基础】理解 Docker:本质、性质、架构与核心组件

文章目录 Docker 本质Docker 的引擎迭代Docker 和虚拟机的区别Docker 为什么比虚拟机资源利用率高&#xff0c;速度快&#xff1f;Docker 和 JVM 虚拟化的区别Docker 版本1. LXC (Linux Containers)2. libcontainer3. Moby4. docker-ce5. docker-ee总结&#xff1a; Docker 架构…

C#贪心算法

贪心算法&#xff1a;生活与代码中的 “最优选择大师” 在生活里&#xff0c;我们常常面临各种选择&#xff0c;都希望能做出最有利的决策。比如在超市大促销时&#xff0c;面对琳琅满目的商品&#xff0c;你总想用有限的预算买到价值最高的东西。贪心算法&#xff0c;就像是一…

JPA与存储过程的完美结合

在现代的Java开发中&#xff0c;JPA&#xff08;Java Persistence API&#xff09;已经成为ORM&#xff08;对象关系映射&#xff09;的主流选择之一。它不仅简化了数据库操作&#xff0c;还提供了强大的功能来与数据库交互。今天&#xff0c;我们将深入探讨如何通过NamedStore…

音视频容器格式

音视频容器格式是存储和封装音视频流、字幕、元数据等信息的文件格式。容器格式决定了音视频的组织方式和播放方式&#xff0c;不同的容器格式适用于不同的用途和平台。以下是一些常见的音视频容器格式的详细介绍&#xff1a; 1. MP4 (.mp4) 介绍&#xff1a; MP4 是最常见的…