理解SIFT

简介: 理解SIFT.tab{font-size:12px; margin-bottom: 10px;}.tab a{cursor:pointer;cursor:pointer;display:inline-block;margin-right:10px;color:#000}#tab-html{color:#ccc}.
理解SIFT

理解SIFT

## SIFT步骤### 找尺度空间极值 可以用DoG找 需要讲理论依据和DoG结合进行推导 s值和$\sigma$值的选取问题### 关键点定位 和泰勒展开相关### 方向赋值### 局部图像描述符## SIFT用于目标识别的步骤 目标图像提取SIFT特征;搭建SIFT特征数据库 用快速kNN将目标特征在数据库中查找 用霍夫变换寻找属于同一单目标的簇(cluster) 用least-square(最小二乘法)验证## SIFT算法步骤 多尺度极值检测(用DoG找) 关键点定位 方向赋值 关键点描述符## 尺度空间极值检测尺度空间定义:$L(x,y,\sigma)=G(x,y,\sigma)*I(x,y)$相关论文已证明,真正具有尺度无关性的算子只有一种:归一化的LoG函数:$\sigma^2\nabla^2G$考虑高斯查分函数DoG:$G(x,y,k\sigma)-G(x,y,\sigma)$对应的尺度空间表达式有:$D(x,y,\sigma)=L(x,y,k\sigma)-L(x,y,\sigma) \\=(G(x,y,k\sigma)-G(x,y,\sigma))*I(x,y)$考虑热放射等式,有:$\frac{\partial G}{\partial \sigma}=\sigma\nabla^2G$其证明过程:$G(x,y)=\frac{1}{2\pi \sigma^2}e^{\frac{x^2+y^2}{2\sigma^2}} \\\frac{\partial G}{\partial x}=-\frac{x}{2\pi\sigma^4}e^{-\frac{x^2+y^2}{2\sigma^2}} \\\frac{\partial^2G}{\partial^2x}=-\frac{\sigma^2-x^2}{2\pi\sigma^6}e^{-\frac{x^2+y^2}{2\sigma^2}} \\\nabla^2G=\frac{\partial^2G}{\partial^2x}+\frac{\partial^2G}{\partial^2y} = \frac{x^2+y^2-2\sigma^2}{2\pi\sigma^6}e^{-\frac{x^2+y^2}{2\sigma^2}} \\\frac{\partial G}{\partial \sigma}=\frac{x^2+y^2-2\sigma^2}{2\pi\sigma^5}e^{-\frac{x^2+y^2}{2\sigma^2}} \\\therefore \frac{\partial G}{\partial x}=\sigma \nabla^2 G$$G(x,y)=\frac{1}{2\pi \sigma^2}e^{\frac{x^2+y^2}{2\sigma^2}} \\\frac{\partial G}{\partial x}=-\frac{x}{2\pi\sigma^4}e^{-\frac{x^2+y^2}{2\sigma^2}} \\\frac{\partial^2G}{\partial^2x}=-\frac{\sigma^2-x^2}{2\pi\sigma^6}e^{-\frac{x^2+y^2}{2\sigma^2}} \\\nabla^2G=\frac{\partial^2G}{\partial^2x}+\frac{\partial^2G}{\partial^2y} = \frac{x^2+y^2-2\sigma^2}{2\pi\sigma^6}e^{-\frac{x^2+y^2}{2\sigma^2}} \\\frac{\partial G}{\partial \sigma}=\frac{x^2+y^2-2\sigma^2}{2\pi\sigma^5}e^{-\frac{x^2+y^2}{2\sigma^2}} \\\therefore \frac{\partial G}{\partial x}=\sigma \nabla^2 G$而考虑$\frac{\partial G}{\partial \sigma}$的近似替代公式:$\sigma\nabla^2G=\frac{\partial G}{\partial \sigma} \approx \frac{G(x,y,k\sigma)-G(x,y,\sigma)}{k\sigma-\sigma}$因此有:$G(x,y,k\sigma)-G(x,y,\sigma) \approx (k-1)\sigma^2\nabla^2G$即:用DoG来近似替代LoG算子,得到近似不变的尺度无关特性。相差的倍数是常量没有影响。当k->1,误差几乎为0.### 高斯金字塔的建立**octave**:采样率相同、尺寸相同,模糊度逐渐增强的一组相邻图像**level**:octave中的每张图像,叫做一个level每个octae内是持续高斯模糊得到;每个octave的第一个levle通过降采样得到。每个octave内有s次模糊。$\sigma$的选取和$s$选取,不能太小,否则不准确;太大又会消耗太多计算资源,得不到实时效果。Lowe的论文实验表明,选取$\sigma=1.6$,$s=3$是合适的。不过为了充分利用输入的图像,可以考虑在生成octave前做一次升采样:认为照相机采集的图像本身就是模糊的,其$\sigma=0.5$,利用线性插值得到$\sigma=1.0$的图像,然后用于生成octave**疑问**l升采样后的图像,有没有再次做模糊操作得到octave的第一张?还是说直接作为octave的第一个level?### DoG金字塔每两个高斯金字塔level之间做差值就得到DoG的一个level。为了得到所有极值,因为高斯金字塔的首尾两层不会被带入计算,因此在首尾各添加一层,最上面再加一层**这段还是不够清晰,需要修改**### 局部极值检测在DoG金字塔中,检测空间中每个像素点周边的26个点。如果是极值,那么继续往金字塔高层进行检测。极值检测需要考虑检测的策略:检测到的极值点数量会影响到后续的特征检测数量,特征越少则匹配的结果越少,但是往往是正确率较高的匹配;特征越多则匹配的结果越多,但是正确率往往不高。前者更多地考虑了效率,后者更多地考虑了完整性,需要在效率和完整性之间权衡。因而,要选取合适数量的特征数量,在这之前需要选取合适数量的极值点,这就需要考虑采样频率的问题。(实际上,集中在一起的极值点对于小的扰动非常不稳定)。采样频率的问题,包括尺度上的采样频率、空间域上的采样频率两个方面。Lowe通过实验得到一些测量结果,从结果的图表中得到$s$值和$\sigma$值的经验值。Lowe的实验图像“有32张,包括室外场景、人脸、航拍图片、工业图像(这些图像的来源领域对结果几乎没有影响)”。但是本人认为,仅仅从32张图像就得到相关的经验参数,并不很具有说服力,如果有时间,不妨使用更多的图片进行相关测定。尺度上的采样频率问题,就是考虑图像金字塔中每个octave内的尺度空间数量s。实验中尺度图像由随机的旋转和0.2~0.9之间的随机尺度变换得到,同时也添加了1%的噪声(使用平均分布为每个像素点增加一个随机数)。实验结果为:随着尺度数量s的增加,同一位置的重复匹配率“先增加后减小”,同一极值点对应的特征描述符在数据库中被**正确**搜索到的比率,也是“先增加后减小”。折可以被解释为:随着尺度数量s的增加,尽管极值点数量增加,但是过了一定限度后增加的极值点都是低于平均稳定程度的,因而反倒降低了匹配的重复率和正确率。对应于Lowe的实验结果,选取$s=3$时,正确匹配率最高。而随着尺度数量s的增加,极值点数量也增加,并且正确匹配的极值点的总数也是增加的;而通常目标识别通常更依赖于正确匹配的极值点数量而不是正确匹配率,因此看起来使用更大的尺度空间数s会得到更好的效果。但是,这会增加计算消耗。因而,Lowe的论文中权衡了正确率和计算消耗,选取$s=3$作为每个octave内的尺度数量。也就是说,仅仅检测那些稳定的极值点,同时又能够避免大量的计算消耗,还能够得到很好的正确率。空间域上的采样频率问题,就是高斯模糊的参数$\sigma$,即平滑尺度。考虑到极值可能随机地出现在一起,也需要类似前面一种情况考虑采样频率和检率的问题。实验数据表明,随着$\sigma$的增加,同一特征点在变换后的图像中被重复检测到的百分比、极值点对应的特征描述符在数据库中被查找到的正确率,都呈现增加趋势。但是$\sigma$增加后计算量也增加,权衡考虑算法效率和正确率,使用$\sigma=1.6$。(同样地,这显然也是Lowe的32张图像的测试结果带来的经验数据,个人认为这个数据要根据不同的情况可以适当修改)。同时也可以考虑图像预先平滑操作,这样能**有效地忽略最高空域频率**(这句其实并不理解),其做法是:认为相机拍摄得到的原始图像的模糊度为$\sigma=0.5$,通过双线性差值得到$\sigma=1.0$模糊尺度的图像。这就意味着,在创建尺度空间的第一个octave之前,需要做一次平滑操作(也就是:原图升采样得到$\sigma=1.0$-->做第一次预先处理的平滑得到$\sigma=1.6$的尺度图像作为第一个octave的第一个level)。**这里发现对于“采样”并不很理解,需要找书仔细看下**## 确定关键点的精确位置前面得到的极值,只是离散的图像金字塔中不同尺度下的极值点。真正的尺度空间应当是连续的,而不是离散的,图像金字塔中的极值只是真正极值的近似,还需要进一步的精确检测,得到真正的极值点和极值。使用泰勒公式对DoG函数进行展开,并求导,解出导数为0的点,得到的解就是“前面极值检测中检测到的极值采样点,与真正的尺度空间中的极值点的偏差(这个偏差是向量(x,y,$\sigma$))”。即:$定义向量\vec{x} = (x, y, \sigma)对D函数,泰勒展开有:D(\vec {x})=D+\frac{\partial D^T}{\partial \vec {x}}\vec {x} + \frac{1}{2}\vec {x}^T\frac{\partial^2 D}{\partial \vec{x}^2}\vec {x}求解得到:\vec {x_0} = - \frac{\partial^2 D^{-1}}{\partial \vec {x}^2}\frac{\partial D}{\partial \vec {x}} $$其中使用到对于向量求导的计算,包括: \\\frac{\partial \vec {x}}{\partial \vec {x}}=单位矩阵E \\\frac{\partial \vec{x}^T \vec{x}}{\vec{x}} = 2 \vec{x}$将$\vec{x_0}$带入$D(\vec{x})$的表达式,得到对应的极值:$D(\vec{x}) = D + \frac{1}{2}\frac{\partial D^T}{\partial \vec{x}}\vec{x}$实验中忽略$D \lt 0.03$的极值点。这样,得到的$\vec{x}$表示采样点的偏离量。此时,keypoint的表示中包括了:位置(x,y),尺度$\sigma$。后面还会包括方向。### 消除边界响应还需要去除边界上的干扰,需要考虑**主曲率**。 通过计算**黑塞矩阵**能得到特征值之间的关系,而主曲率和特征值之间是成倍的关系,因此只需要考虑特征值之间的关系。假设黑塞矩阵算出的特征值中,大的为$\alpha$,小的为$\beta$,而:$ H=\begin{matrix} D_{xx} & D_{xy} \\ D_{xy} & D_{yy}\end{matrix}$$Tr(H)=D_{xx}+D_{yy} = \alpha + \beta \\Det(H)=D_{xx}D_{yy}-(D_{xy})^2 = \alpha \beta$显然,$\frac{Tr(H)}{Det(H)}$是增函数,因此只需要保证:$\frac{Tr(H)^2}{Det(H)}
## SIFT步骤### 找尺度空间极值    可以用DoG找    需要讲理论依据和DoG结合进行推导    s值和$\sigma$值的选取问题### 关键点定位    和泰勒展开相关### 方向赋值### 局部图像描述符## SIFT用于目标识别的步骤    目标图像提取SIFT特征;搭建SIFT特征数据库    用快速kNN将目标特征在数据库中查找    用霍夫变换寻找属于同一单目标的簇(cluster)    用least-square(最小二乘法)验证## SIFT算法步骤    多尺度极值检测(用DoG找)    关键点定位    方向赋值    关键点描述符## 尺度空间极值检测尺度空间定义:$L(x,y,\sigma)=G(x,y,\sigma)*I(x,y)$相关论文已证明,真正具有尺度无关性的算子只有一种:归一化的LoG函数:$\sigma^2\nabla^2G$考虑高斯查分函数DoG:$G(x,y,k\sigma)-G(x,y,\sigma)$对应的尺度空间表达式有:$D(x,y,\sigma)=L(x,y,k\sigma)-L(x,y,\sigma) \\=(G(x,y,k\sigma)-G(x,y,\sigma))*I(x,y)$考虑热放射等式,有:$\frac{\partial G}{\partial \sigma}=\sigma\nabla^2G$其证明过程:$G(x,y)=\frac{1}{2\pi \sigma^2}e^{\frac{x^2+y^2}{2\sigma^2}} \\\frac{\partial G}{\partial x}=-\frac{x}{2\pi\sigma^4}e^{-\frac{x^2+y^2}{2\sigma^2}}  \\\frac{\partial^2G}{\partial^2x}=-\frac{\sigma^2-x^2}{2\pi\sigma^6}e^{-\frac{x^2+y^2}{2\sigma^2}} \\\nabla^2G=\frac{\partial^2G}{\partial^2x}+\frac{\partial^2G}{\partial^2y} = \frac{x^2+y^2-2\sigma^2}{2\pi\sigma^6}e^{-\frac{x^2+y^2}{2\sigma^2}} \\\frac{\partial G}{\partial \sigma}=\frac{x^2+y^2-2\sigma^2}{2\pi\sigma^5}e^{-\frac{x^2+y^2}{2\sigma^2}}  \\\therefore \frac{\partial G}{\partial x}=\sigma \nabla^2 G$$G(x,y)=\frac{1}{2\pi \sigma^2}e^{\frac{x^2+y^2}{2\sigma^2}} \\\frac{\partial G}{\partial x}=-\frac{x}{2\pi\sigma^4}e^{-\frac{x^2+y^2}{2\sigma^2}}  \\\frac{\partial^2G}{\partial^2x}=-\frac{\sigma^2-x^2}{2\pi\sigma^6}e^{-\frac{x^2+y^2}{2\sigma^2}} \\\nabla^2G=\frac{\partial^2G}{\partial^2x}+\frac{\partial^2G}{\partial^2y} = \frac{x^2+y^2-2\sigma^2}{2\pi\sigma^6}e^{-\frac{x^2+y^2}{2\sigma^2}} \\\frac{\partial G}{\partial \sigma}=\frac{x^2+y^2-2\sigma^2}{2\pi\sigma^5}e^{-\frac{x^2+y^2}{2\sigma^2}}  \\\therefore \frac{\partial G}{\partial x}=\sigma \nabla^2 G$而考虑$\frac{\partial G}{\partial \sigma}$的近似替代公式:$\sigma\nabla^2G=\frac{\partial G}{\partial \sigma} \approx \frac{G(x,y,k\sigma)-G(x,y,\sigma)}{k\sigma-\sigma}$因此有:$G(x,y,k\sigma)-G(x,y,\sigma) \approx (k-1)\sigma^2\nabla^2G$即:用DoG来近似替代LoG算子,得到近似不变的尺度无关特性。相差的倍数是常量没有影响。当k->1,误差几乎为0.### 高斯金字塔的建立**octave**:采样率相同、尺寸相同,模糊度逐渐增强的一组相邻图像**level**:octave中的每张图像,叫做一个level每个octae内是持续高斯模糊得到;每个octave的第一个levle通过降采样得到。每个octave内有s次模糊。$\sigma$的选取和$s$选取,不能太小,否则不准确;太大又会消耗太多计算资源,得不到实时效果。Lowe的论文实验表明,选取$\sigma=1.6$,$s=3$是合适的。不过为了充分利用输入的图像,可以考虑在生成octave前做一次升采样:认为照相机采集的图像本身就是模糊的,其$\sigma=0.5$,利用线性插值得到$\sigma=1.0$的图像,然后用于生成octave**疑问**l升采样后的图像,有没有再次做模糊操作得到octave的第一张?还是说直接作为octave的第一个level?### DoG金字塔每两个高斯金字塔level之间做差值就得到DoG的一个level。为了得到所有极值,因为高斯金字塔的首尾两层不会被带入计算,因此在首尾各添加一层,最上面再加一层**这段还是不够清晰,需要修改**### 局部极值检测在DoG金字塔中,检测空间中每个像素点周边的26个点。如果是极值,那么继续往金字塔高层进行检测。极值检测需要考虑检测的策略:检测到的极值点数量会影响到后续的特征检测数量,特征越少则匹配的结果越少,但是往往是正确率较高的匹配;特征越多则匹配的结果越多,但是正确率往往不高。前者更多地考虑了效率,后者更多地考虑了完整性,需要在效率和完整性之间权衡。因而,要选取合适数量的特征数量,在这之前需要选取合适数量的极值点,这就需要考虑采样频率的问题。(实际上,集中在一起的极值点对于小的扰动非常不稳定)。采样频率的问题,包括尺度上的采样频率、空间域上的采样频率两个方面。Lowe通过实验得到一些测量结果,从结果的图表中得到$s$值和$\sigma$值的经验值。Lowe的实验图像“有32张,包括室外场景、人脸、航拍图片、工业图像(这些图像的来源领域对结果几乎没有影响)”。但是本人认为,仅仅从32张图像就得到相关的经验参数,并不很具有说服力,如果有时间,不妨使用更多的图片进行相关测定。尺度上的采样频率问题,就是考虑图像金字塔中每个octave内的尺度空间数量s。实验中尺度图像由随机的旋转和0.2~0.9之间的随机尺度变换得到,同时也添加了1%的噪声(使用平均分布为每个像素点增加一个随机数)。实验结果为:随着尺度数量s的增加,同一位置的重复匹配率“先增加后减小”,同一极值点对应的特征描述符在数据库中被**正确**搜索到的比率,也是“先增加后减小”。折可以被解释为:随着尺度数量s的增加,尽管极值点数量增加,但是过了一定限度后增加的极值点都是低于平均稳定程度的,因而反倒降低了匹配的重复率和正确率。对应于Lowe的实验结果,选取$s=3$时,正确匹配率最高。而随着尺度数量s的增加,极值点数量也增加,并且正确匹配的极值点的总数也是增加的;而通常目标识别通常更依赖于正确匹配的极值点数量而不是正确匹配率,因此看起来使用更大的尺度空间数s会得到更好的效果。但是,这会增加计算消耗。因而,Lowe的论文中权衡了正确率和计算消耗,选取$s=3$作为每个octave内的尺度数量。也就是说,仅仅检测那些稳定的极值点,同时又能够避免大量的计算消耗,还能够得到很好的正确率。空间域上的采样频率问题,就是高斯模糊的参数$\sigma$,即平滑尺度。考虑到极值可能随机地出现在一起,也需要类似前面一种情况考虑采样频率和检率的问题。实验数据表明,随着$\sigma$的增加,同一特征点在变换后的图像中被重复检测到的百分比、极值点对应的特征描述符在数据库中被查找到的正确率,都呈现增加趋势。但是$\sigma$增加后计算量也增加,权衡考虑算法效率和正确率,使用$\sigma=1.6$。(同样地,这显然也是Lowe的32张图像的测试结果带来的经验数据,个人认为这个数据要根据不同的情况可以适当修改)。同时也可以考虑图像预先平滑操作,这样能**有效地忽略最高空域频率**(这句其实并不理解),其做法是:认为相机拍摄得到的原始图像的模糊度为$\sigma=0.5$,通过双线性差值得到$\sigma=1.0$模糊尺度的图像。这就意味着,在创建尺度空间的第一个octave之前,需要做一次平滑操作(也就是:原图升采样得到$\sigma=1.0$-->做第一次预先处理的平滑得到$\sigma=1.6$的尺度图像作为第一个octave的第一个level)。**这里发现对于“采样”并不很理解,需要找书仔细看下**## 确定关键点的精确位置前面得到的极值,只是离散的图像金字塔中不同尺度下的极值点。真正的尺度空间应当是连续的,而不是离散的,图像金字塔中的极值只是真正极值的近似,还需要进一步的精确检测,得到真正的极值点和极值。使用泰勒公式对DoG函数进行展开,并求导,解出导数为0的点,得到的解就是“前面极值检测中检测到的极值采样点,与真正的尺度空间中的极值点的偏差(这个偏差是向量(x,y,$\sigma$))”。即:$定义向量\vec{x} = (x, y, \sigma)对D函数,泰勒展开有:D(\vec {x})=D+\frac{\partial D^T}{\partial \vec {x}}\vec {x} + \frac{1}{2}\vec {x}^T\frac{\partial^2 D}{\partial \vec{x}^2}\vec {x}求解得到:\vec {x_0} = - \frac{\partial^2 D^{-1}}{\partial \vec {x}^2}\frac{\partial D}{\partial \vec {x}} $$其中使用到对于向量求导的计算,包括:  \\\frac{\partial \vec {x}}{\partial \vec {x}}=单位矩阵E    \\\frac{\partial \vec{x}^T \vec{x}}{\vec{x}} = 2 \vec{x}$将$\vec{x_0}$带入$D(\vec{x})$的表达式,得到对应的极值:$D(\vec{x}) = D + \frac{1}{2}\frac{\partial D^T}{\partial \vec{x}}\vec{x}$实验中忽略$D \lt 0.03$的极值点。这样,得到的$\vec{x}$表示采样点的偏离量。此时,keypoint的表示中包括了:位置(x,y),尺度$\sigma$。后面还会包括方向。### 消除边界响应还需要去除边界上的干扰,需要考虑**主曲率**。 通过计算**黑塞矩阵**能得到特征值之间的关系,而主曲率和特征值之间是成倍的关系,因此只需要考虑特征值之间的关系。假设黑塞矩阵算出的特征值中,大的为$\alpha$,小的为$\beta$,而:$ H=\begin{matrix}     D_{xx} & D_{xy} \\     D_{xy} & D_{yy}\end{matrix}$$Tr(H)=D_{xx}+D_{yy} = \alpha + \beta  \\Det(H)=D_{xx}D_{yy}-(D_{xy})^2 = \alpha \beta$显然,$\frac{Tr(H)}{Det(H)}$是增函数,因此只需要保证:$\frac{Tr(H)^2}{Det(H)}             
               
目录
相关文章
|
2月前
|
存储 算法 区块链
从零实现Python扫雷游戏:完整开发指南与深度解析
扫雷作为Windows经典游戏,承载了许多人的童年回忆。本文将详细介绍如何使用Python和Tkinter库从零开始构建一个功能完整的扫雷游戏,涵盖游戏设计、算法实现和界面开发的全过程。
189 1
|
2月前
|
人工智能 监控 安全
MCP与企业数据集成:ERP、CRM、数据仓库的统一接入
作为一名深耕企业级系统集成领域多年的技术博主"摘星",我深刻认识到现代企业面临的数据孤岛问题日益严重。随着企业数字化转型的深入推进,各类业务系统如ERP(Enterprise Resource Planning,企业资源规划)、CRM(Customer Relationship Management,客户关系管理)、数据仓库等系统的数据互联互通需求愈发迫切。传统的点对点集成方式不仅开发成本高昂,维护复杂度也呈指数级增长,更重要的是难以满足实时性和一致性要求。Anthropic推出的MCP(Model Context Protocol,模型上下文协议)为这一痛点提供了革命性的解决方案。MCP通过
172 0
|
6月前
|
机器学习/深度学习 人工智能 自然语言处理
《打破黑箱:深度学习模型可解释性的攻坚之路》
深度学习模型在图像识别、自然语言处理等领域取得了显著成果,但其“黑箱”特性引发了可靠性、安全性和透明度的担忧。这种不可解释性在医疗、金融和自动驾驶等场景中可能导致不确定性或信任危机。为解决这一问题,研究者从模型可视化、特征重要性分析、设计可解释模型架构及事后解释方法等方向展开探索。然而,现有方法仍面临局部解释性、计算成本高及缺乏统一评估标准等问题。实现深度学习模型的可解释性是AI走向成熟与广泛应用的关键,未来需学术界与产业界共同努力,推动技术进步以造福社会。
434 9
|
6月前
|
人工智能 算法 计算机视觉
当科技吞没生活:我们是否正在成为工具的附庸?
清晨六点,智能手环唤醒你,咖啡机自动研磨咖啡豆,智能音箱播报新闻,人脸识别完成健康检测。科技优化生活,但也引发担忧:东京大学研究显示,过度依赖智能设备使决策能力每年衰退3%;韩炳哲警告数字化全景监狱使人丧失自主性。真正的科技人文主义应在效率与人性间找到平衡,保留生活中的不完美与珍贵体验。
124 5
|
9月前
|
传感器 物联网 数据挖掘
新技术趋势与应用:物联网与虚拟现实的未来发展###
随着科技的迅猛发展,物联网(IoT)和虚拟现实(VR)已成为引领未来的重要技术趋势。本文旨在探讨这两项新兴技术的发展趋势和应用场景,通过分析当前技术现状、挑战及未来前景,揭示物联网和虚拟现实在各领域的潜在影响和应用价值。研究表明,物联网在智能家居、智慧城市、工业自动化等方面具有广泛的应用前景;而虚拟现实则在游戏娱乐、教育培训、医疗健康等领域展现出巨大的潜力。本文认为,随着技术的不断进步,物联网和虚拟现实将深度融合,为社会经济发展带来新的机遇和挑战。 ###
465 59
|
11月前
|
人工智能 算法 数据库
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-08
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-10-08
201 1
|
数据库 开发者
从EF6无缝切换到Entity Framework Core:一份详尽无遗的开发者实战攻略,带你领略数据库操作的全新境界,让代码优雅转身,性能与可维护性双丰收的秘密武器
【8月更文挑战第31天】本文通过详细的代码示例,介绍了如何将基于 EF6 的应用程序平滑迁移到 EF Core。从创建初始 EF6 项目并定义数据库上下文开始,逐步演示了如何使用 EF6 进行数据操作。随后,文章详细讲解了迁移到 EF Core 的步骤,包括配置 EF Core 数据库上下文、定义领域模型及数据操作等。通过具体示例,展示了 EF Core 的强大功能,帮助开发者构建高效且可扩展的数据访问层。
229 0
|
Ubuntu 安全 搜索推荐
Linux Ubuntu 桌面环境概览
Ubuntu,在开源领域如同璀璨明星,以其卓越的桌面环境和用户体验赢得全球用户的心。采用优雅且功能丰富的GNOME桌面,Ubuntu界面简洁现代,提供直观易用的操作体验。无论是文件管理还是系统设置,图形界面让一切变得轻松。此外,高度可定制化特性让桌面成为个性展示的舞台,集成丰富应用满足多样化需求。背后强大的社区支持确保用户获得及时帮助,共享开源精神。
411 0
|
前端开发 JavaScript 开发工具
【React】使用Next.js构建并部署个人博客
【React】使用Next.js构建并部署个人博客
【React】使用Next.js构建并部署个人博客
|
Docker 容器
Docker安装ClickHouse
Docker安装ClickHouse