周报(8.12-8.18)

周报(8.12-8.18)

本周工作

DD-Net学习与代码复现

在这里插入图片描述

DD-Net网络结构如上图所示。DD-Net也有一个为处理OpenFWI数据的版本:DD-Net70:

在这里插入图片描述

与传统DL-FWI不同的是,DD-Net同时拥有两个解码器,第一个解码器的目标是传统的速度模型,它侧重于速度值的精确拟合,这也是用于生成速度图像的主要解码器;第二个解码器的目标是速度模型边缘信息,将Canny轮廓提取后的黑白边缘速度模型进一步用作第二解码器的拟合目标。此解码器将用作训练轮廓信息的辅助解码器。

网络结构复现

与盐数据不同的是,OpenFWI在时间域上的跨度非常大,时间域和空间域的比例值较大,直接进行特征提取工作会导致空间上的时间丢失。因此,在开始特征提取工作之前,我们需要先对时间域进行压缩。第一步压缩使用插值完成,使用了以下函数:

torch.nn.functional.interpolate(input, size=None, scale_factor=None, mode='nearest', align_corners=None, recompute_scale_factor=None, antialias=False)

该函数可以使用不同的插值算法碓输入进行插值,输入参数解释如下:

  • input: 输入
  • size: 输出数据的形状
  • scale_factor: 表示在输入的不同维度上进行缩放的比例
  • mode: 使用的差值算法,可以使用’nearest’最邻近、'linear’线性、'bilinear’双线性、‘bicubic’、‘trilinear’、‘area’和’nearest-exact’。
  • align_corners:将像素视为正方形而不是点。对于将像素视为点的情况,计算某像素值时使用临近点的像素值进行;对于将像素视为正方形的情况,计算某像素值时会将该点与周围三点合并为像素块,并使用临近像素块的值进行计算。
  • recompute_scale_factor: 如果设置为True,函数将强制使用scale_factor作为输出大小的依据。
  • antialias: 抗锯齿。

其他操作是经典的卷积操作,不再解释。结合起来,可以获得下采样部分的代码:

class DownSampling(nn.Module):def __init__(self, shot_num):super().__init__()self.conv1_1 = ConvBlock(shot_num, 8, kernel_size=(3, 1), stride=(2, 1), padding=(1, 0))self.conv1_2 = ConvBlock(8, 8, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))self.conv2_1 = ConvBlock(8, 16, kernel_size=(3, 1), stride=(2, 1), padding=(1, 0))self.conv2_2 = ConvBlock(16, 16, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))self.conv3_1 = ConvBlock(16, 32, kernel_size=(3, 1), stride=(2, 1), padding=(1, 0))self.conv3_2 = ConvBlock(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))def forward(self, inputs):width = inputs.shape[3]new_size = [width * 8, width]outputs = F.interpolate(inputs, size=new_size, mode='bilinear', align_corners=False)outputs = self.conv1_1(outputs)outputs = self.conv1_2(outputs)outputs = self.conv2_1(outputs)outputs = self.conv2_2(outputs)outputs = self.conv3_1(outputs)outputs = self.conv3_2(outputs)return outputs

随后DD-Net70使用了与FCNVMB相似的网络结构:

class unetConv2(nn.Module):def __init__(self, in_channels, out_channels):super().__init__()self.conv1 = nn.Sequential(nn.Conv2d(in_channels, out_channels, 3, 1, 1), nn.BatchNorm2d(out_channels), nn.ReLU(inplace=True))self.conv2 = nn.Sequential(nn.Conv2d(out_channels, out_channels, 3, 1, 1), nn.BatchNorm2d(out_channels), nn.ReLU(inplace=True))def forward(self, inputs):outputs = self.conv1(inputs)outputs = self.conv2(outputs)return outputsclass unetDown(nn.Module):def __init__(self, in_channels, out_channels):super().__init__()self.conv = unetConv2(in_channels, out_channels)self.down = nn.MaxPool2d(2, 2, ceil_mode=True)def forward(self, inputs):outputs = self.conv(inputs)outputs = self.down(outputs)return outputsclass unetJumpUp(nn.Module):def __init__(self, in_channels, out_channels):super().__init__()self.up = nn.ConvTranspose2d(in_channels, out_channels, kernel_size=2, stride=2)self.conv = unetConv2(out_channels*2, out_channels)def forward(self, input1, input2):# inputs1是上一层输入数据,inputs2是跳跃连接数据outputs = self.up(input1)outputs = F.interpolate(outputs, size=(input2.shape[2],input2.shape[3]), mode='bilinear')outputs = self.conv(torch.cat([outputs, input2], 1))return outputsclass unetUp(nn.Module):def __init__(self, in_channels, out_channels, output_shape):super().__init__()self.up = nn.ConvTranspose2d(in_channels, out_channels, kernel_size=2, stride=2)self.conv = unetConv2(out_channels, out_channels)self.output_shape = output_shapedef forward(self, input1):outputs = self.up(input1)outputs = F.interpolate(outputs, size=self.output_shape, mode='bilinear')outputs = self.conv(outputs)return outputs

与FCNVMB不同的是,DD-Net中使用了interpolate函数进行函数裁剪,而不是使用pad函数。

网络代码复现

对于网络的代码实现,我抱有部分疑虑,以下是我参考论文复现出的代码:

class DDNet70(nn.Module):def __init__(self):super().__init__()self.downSampling = DownSampling()# Intrinsic UNet sectionself.down1 = unetDown(32, 64)self.down2 = unetDown(64, 128)self.down3 = unetDown(128, 256)self.down4 = unetDown(256, 512)# Decode1self.up1_1 = unetJumpUp(512, 256)self.up1_2 = unetJumpUp(256, 128)self.up1_3 = unetUp(128, 64, (35, 35))self.up1_4 = unetUp(64, 32, (70, 70))self.conv1 = ConvBlock_Tanh(32, 1)# Decode2self.up2_1 = unetJumpUp(512, 256)self.up2_2 = unetJumpUp(256, 128)self.up2_3 = unetUp(128, 64, (35, 35))self.up2_4 = unetUp(64, 32, (70, 70))self.conv2 = ConvBlock_Tanh(32, 2)def forward(self, inputs,):outputs = self.downSampling(inputs)outputs = self.down1(outputs)outputs_jump1 = self.down2(outputs)outputs_jump2 = self.down3(outputs_jump1)center = self.down4(outputs_jump2)# Decoder 1outputs = self.up1_1(center, outputs_jump2)outputs = self.up1_2(outputs, outputs_jump1)outputs = self.up1_3(outputs)print(outputs.shape)outputs = self.up1_4(outputs)outputs1 = self.conv1(outputs)# Decoder 2outputs = self.up2_1(center, outputs_jump2)outputs = self.up2_2(outputs, outputs_jump1)# delete no usedel centerdel outputs_jump2del outputs_jump1outputs = self.up2_3(outputs)outputs = self.up2_4(outputs)outputs2 = self.conv2(outputs)return [outputs1, outputs2]

但论文代码中没有完全区分两个解码器的卷积函数,即进行速度图像解码的卷积与进行边缘图像的卷积是同一个卷积对象, 理论上具有相同的参数。虽然有较大的相似性,但这确实是两个不同的任务,虽然有较大的相似性,使用同一组卷积对象是否有所不妥?

损失函数

DD-Net的另一个创新点在于,DD-Net使用了复合损失函数,因为边界图像是黑白图像,直接使用MSE并不完全合理。但如果把边缘图像视作“该像素是否是边缘”的标签,就可以使用交叉熵损失进行损失计算。DD-Net的输出同时含有速度图像与边缘图像,因此就必须构建一个复合的损失函数,简单来说,DD-Net构建了一个这样的损失函数。
L o s s = α 1 ⋅ M S E + α 2 ⋅ C r o s s E n t r o p y Loss = \alpha_1\cdot MSE+\alpha_2\cdot CrossEntropy Loss=α1MSE+α2CrossEntropy
根据论文介绍,对于归一化后的OpenFWI数据, α 2 α 1 \frac{\alpha_2}{\alpha_1} α1α2最好在 [ 10 , 1 0 2 ] [10, 10^2] [10,102]内。复现代码如下:

class LossDDNet:def __init__(self, weights=[1, 1], crossEntropy_weight=[1, 1]):self.criterion1 = nn.MSELoss()crossEntropyWeight = torch.from_numpy(np.array(crossEntropy_weight, dtype=np.float32)).cuda()self.criterion2 = nn.CrossEntropyLoss(weight=crossEntropyWeight)self.weights = weightsdef __call__(self, outputs1, outputs2, targets1, targets2):mse = self.criterion1(outputs1, targets1)cross = self.criterion2(outputs2, torch.squeeze(targets2).long())criterion = (self.weights[0] * mse + self.weights[1] * cross)return criterion

其中,torch.squeeze函数会移除对象中所有长度为1的维度。

分阶段学习

为了使训练效果更好,DD-Net在训练过程中对数据集难度进行分级,总共分为3级,从简单的数据开始训练,完成阶段后训练更难得数据集。

学习地震正演

根据相关书籍,继续学习地震正演理论,持续记录学习笔记。

下周工作

  1. 训练DD-Net70网络,观察网络效果
  2. 继续学习地震正演
  3. 开展对地震速度图像拼接得研究

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/410126.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

力扣第71题:简化路径 放弃栈模拟,选择数据流√(C++)

目录 题目 思路 解题过程 复杂度 Code 题目 给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 / 开头),请你将其转化为更加简洁的规范路径。 在 Unix 风格的文件系统中,一个点&#xff…

医生隐瞒病情属于什么行为?

根据《民法典》第一千二百二十二条的规定,患者在诊疗活动中受到损害,有下列情形之一的,推定医疗机构有过错:   (一)违反法律、行政法规、规章以及其他有关诊疗规范的规定;   (二…

LLMs 基础知识 | BERT 模型族

本文主要文章是解决蚂蚁金服携手上海财经大学,共同出具大预言模型白皮书一文中的部分模型问题。 01 Slef-Attention 注意力机制,注意力权重可以看作是输入对输出的重要程度。这里注意,所谓注意力,即模型认为该单词有多值得被注意…

基于BlockQueue的生产消费模型及Linux中的信号量

基于BlockQueue的生产消费模型 Task.hpp #pragma once#include<cstdio> #include<iostream> #include<string> #include<functional>using namespace std; class CalTask {using func_tfunction<int(int,int,char)>;//typedef function<int(…

妙用 Batch,StarRocks 存算分离实时性能起飞

前言 当大家提到存算分离时&#xff0c;尤其是考虑后端使用 AWS S3 为代表的对象存储作为数据存储时&#xff0c;直觉就是性能拉胯&#xff0c;只能用作批量数据处理场景&#xff0c;至少这是我在跟很多用户交流时获得的第一感受。而 StarRocks 作为一个具备强实时性数据分析引…

Vue实现zip压缩下载

1&#xff0c;安装依赖npm //jszip是一个用于创建、读取和编辑.zip文件的JavaScript库 https://stuk.github.io/jszip/ npm install jszip https://www.npmjs.com/package/file-saver npm install file-saver 2&#xff0c;在所需的页面中引入对应包 import JSZip from &…

【启明智显分享】智能音箱AI大模型一站式解决方案重塑人机交互体验,2个月高效落地

2010年左右&#xff0c;智能系统接入音箱市场&#xff0c;智能音箱行业在中国市场兴起。但大潮激荡&#xff0c;阿里、小米、百度三大巨头凭借自身强大的资本、技术、粉丝群强势入局&#xff0c;形成三足鼎立态势。经过几年快速普及&#xff0c;智能音箱整体渗透率极高&#xf…

【课件分享】电子档案库房——构筑档案数字资源长期保存的安全防线

关注我们 - 数字罗塞塔计划 - 如此重磅的会议&#xff0c;如此高能的干货&#xff0c;小编已经迫不及待第一时间分享给大家&#xff0c;一起来看看杨博士在学术交流活动上的演讲内容吧。 01 课件分享 一、背景现状 二、总体设计 详细视频请在公众号中观看 三、解决方案 四、应…

汽车线束品牌服务商推荐-力可欣:致力于汽车连接线束和汽车连接器的开发、生产和应用

汽车线束品牌服务商推荐-力可欣&#xff1a;致力于汽车连接线束和汽车连接器的开发、生产和应用

安卓13 背光调节非线性问题处理,调节范围不正常问题

总纲 android13 rom 开发总纲说明 目录 1.前言 2.问题分析 3.代码修改 4.彩蛋 1.前言 我们看看现在的版本的亮度图 2.问题分析 当背光亮度设置为0%时,每次按下亮度增加键或者 input keyevent BRIGHTNESS_UP,亮度UI的增幅较大,首次按下后亮度平滑提升至大约55%,随后继…

深入调研亚马逊云科技AI平台Amazon Bedrock热门开发功能

国际数据公司&#xff08;IDC&#xff09;在2024 年 8 月发布了《 中国大模型平台市场份额&#xff0c; 2023 &#xff1a;大模型元年——初局 》调研报告 。IDC的数据显示&#xff0c;2023年中国大模型平台及相关应用市场规模达惊人的17.65亿元人民币&#xff0c;且科学计算大…

售后更新出现问题分析-幂等和防重

2024-08-27 早上测试提交BUG,说售后单状态流转不对&#xff0c;吓得我一激灵&#xff0c;赶紧打开IDEA 查看代码&#xff0c;发现售后这块代码没有动过呀&#xff0c;咋回事&#xff1f; 流程是这样的&#xff1a; 测试模拟用户下单&#xff0c;提交订单后付款&#xff0c;然后…

基于顺序表实现通讯录功能项目

本文通过顺序表实现通讯录的功能&#xff0c;增删查改数据 首先实现顺序表的功能&#xff0c;再用顺序表实现通讯录的功能 顺序表中的成员为一个结构体对象con&#xff0c;自定义的类型&#xff0c;里面包含着联系人的姓名性别年龄电话地址 seqlist.h&#xff1a;顺序表头文…

摩尔线程 × 智汇云舟|打造视频孪生国产解决方案

近日&#xff0c;摩尔线程与国内数字孪生头部企业和视频孪生首倡者智汇云舟达成深度战略合作&#xff0c;双方将在技术融合、产品共创和市场推广领域加强合作&#xff0c;共同研发面向未来的视频孪生国产化解决方案&#xff0c;推动视频孪生技术在国内关键领域的应用落地&#…

闲置物品|基于SprinBoot+vue的校园闲置物品交易平台(源码+数据库+文档)

校园闲置物品交易平台 目录 基于SprinBootvue的校园闲置物品交易平台 一、前言 二、系统设计 三、系统功能设计 5.1系统功能实现 5.2管理员模块实现 5.3用户模块实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xf…

ZBrush入门使用介绍——11、边缘环

大家好&#xff0c;我是阿赵。   继续介绍ZBrush的用法。这次看看边缘环的使用方法。我个人的感觉&#xff0c;边缘环有点类似于3DsMax之类软件的挤出功能&#xff0c;可以沿着环形的面&#xff0c;添加凹凸效果。   边缘环工具入口在几何体编辑里面&#xff1a; 一、 边…

【python3.8安装报错】lmportError: DLL load failed while importing ft2font: 找不到指定的模块

客户需求背景&#xff1a; 安装python3.8无法运行&#xff0c;报错 lmportError: DLL load failed while importing ft2font: 找不到指定的模块 考虑兼容性问题 这个问题首先需要考虑的是是否是python版本太高了&#xff0c;因为python3.9不支持win7&#xff0c;而python3.8版…

arm64--异常处理与中断处理

一、异常等级 EL0 非特权模式&#xff0c;用于运行应用程序 EL1为特权模式&#xff0c;用于运行操作系统内核 EL2用于运行虚拟化管理程序 EL3用于运行安全世界的管理程序 二、同步异常与异步异常 1. 同步异常&#xff1a;处理器执行某条指令而直接导致的异常&#xff0c;…

有效提高媒体曝光率,智能推荐为什么是“最大的计算系统之一”?

导语&#xff1a;我认为很少有人意识到&#xff0c;推荐系统是世界上构想过的最大的计算系统之一。——Jensen Huang &#xfeff; 在信息过载的时代背景下&#xff0c;智能推荐系统已广泛应用于电子商务、社交媒体、新闻资讯、视频音乐、旅游出行等领域&#xff0c;为用户提…

力扣经典题目之->单值二叉树(递归判断)

一&#xff1a;题目 本博客采用此模型&#xff1a; 二&#xff1a;思路 单值二叉树即所有值相等的二叉树 1&#xff1a;递归的大事化小思路即&#xff1a; 将当前节点与它的左右子节点进行比较&#xff0c;如果不相等&#xff0c;则直接返回false。如果相等&#xff0c;则递归…