IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 项目实训第三周 -> 正文阅读

[人工智能]项目实训第三周

本周工作

第三周继续探索相关的车道线识别的网络,上一周的对于RESA的探索中,当把模型跑通时,发现该模型的时间也并不足够快,在3090显卡上1280*720的图片帧率为50帧左右,这将在Jeston的板子上会很慢,因此我还需要进一步探索更快的车道线检测办法来实现实时检索。
再不断翻阅论文的过程,我发现Ultra-fast-lane-detection这篇论文的思想和前面复现的几个模型不太相同,在论文他所提到了它的推理速度达到了300+fps。因此我便展开了对于Ultra-fast-lane-detection模型的尝试,将该模型进行了复现和相关的测试。

模型介绍:

加快推理预测的主要原理

之前的车道线分割的网络模型是多是根据逐个像素进行预测是否属于车道线,这样极大的减慢了推理的速度。直观上来车道线的预测不需要每个像素的预测。该模型便推出了一种新的车道线定义,它将车道线检测定义在寻找车道线在某些行上的集合,即基于行方向上的位置选择和分类问题。
在这里插入图片描述
如上图所示,该模型针对分出的每一行h上的列维度w上进行车道线位置的选择,h
和w是可以远小于原图像的H,W的,这样推理的速度便会极大的提升。就如下图所示:
在这里插入图片描述
它相比于全像素的分割,计算的量级极大的减少。根据我对论文的阅读,它的推理过程是提取h*w的特征图,对于每一行的预测过程是输出w+1的特征,和上图相同,直观上来讲就是越有可能属于车道线的cell的颜色越深。

全局感受野

车道线的识别不应该单纯只是单像素的分割识别,而是应该各个像素之间要有所关联,也就是感受野的大小,当车道线有所破损时,感受野的作用便凸显出来了。
该模型是一般的基于全连接层的分类,它所使用的特征是全局特征。这样就直接解决了感受野的问题,对于我们的方法,在检测某一行的车道线位置时,感受野就是全图大小,因此他对于遮挡和损坏的车道线的推测效果更好。
其主要关于全连接的代码如图所示

        self.cls = torch.nn.Sequential(
            torch.nn.Linear(1800, 2048),
            torch.nn.ReLU(),
            torch.nn.Linear(2048, self.total_dim),
        )

Loss定义

除了有了水平行方向上直接的位置信息,该模型还使用这些信息来加入车道线的先验约束——平滑性和刚性。

该模型将相邻行上分类的L1范数定义为平滑性,希望车道线位置在相邻行上是相近且平滑变化的。
在这里插入图片描述
关于该损失的定义代码如下:

class ParsingRelationLoss(nn.Module):
    def __init__(self):
        super(ParsingRelationLoss, self).__init__()
    def forward(self,logits):
        n,c,h,w = logits.shape
        loss_all = []
        for i in range(0,h-1):
            loss_all.append(logits[:,:,i,:] - logits[:,:,i+1,:])
        #loss0 : n,c,w
        loss = torch.cat(loss_all)
        return torch.nn.functional.smooth_l1_loss(loss,torch.zeros_like(loss))

将相邻行间的二阶差分定义为车道线的形状。由于车道线大多是直线,因此其二阶差分为0,所以约束其二阶差分与0的差异可以在优化过程中使得预测出的车道线更直。
在这里插入图片描述
该Loss的代码如下所示:

class OhemCELoss(nn.Module):
    def __init__(self, thresh, n_min, ignore_lb=255, *args, **kwargs):
        super(OhemCELoss, self).__init__()
        self.thresh = -torch.log(torch.tensor(thresh, dtype=torch.float)).cuda()
        self.n_min = n_min
        self.ignore_lb = ignore_lb
        self.criteria = nn.CrossEntropyLoss(ignore_index=ignore_lb, reduction='none')

    def forward(self, logits, labels):
        N, C, H, W = logits.size()
        loss = self.criteria(logits, labels).view(-1)
        loss, _ = torch.sort(loss, descending=True)
        if loss[self.n_min] > self.thresh:
            loss = loss[loss>self.thresh]
        else:
            loss = loss[:self.n_min]
        return torch.mean(loss)

优化目标的定义,尤其是平滑性和刚性的定义是其他的先前网络不具有的,而这些特性恰好是车道线具有的特性。下一周我准备对于该模型进行相关的训练和测试。并不断调优。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-19 11:56:10  更:2022-05-19 11:57:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:50:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码