DuLa-Net: A Dual-Projection Network for Estimating Room Layouts from a Single RGB Panorama和BiFuse: M...

这两篇论文做的工作都是关于全景图的工作,一篇是做layout的估计,另外一篇是做深度估计,他们相同点是都用了不同视角的图像来作为输入,将全景图和透视图之间的特征进行融合来做高层的任务。

dula-net

这篇文章做的工作做的任务是估计非cuboid的室内场景的layout,作者使用了两路branch,一路是panorama的branch,另外一路是ceilling的branch,通过一个E2P的stn将其特征进行变换和融合,然后将最终的结果也进行融合,并且生成最后的layout
作者的贡献点在于使用了两种不同的输入,以及feature fusion这样的一个层,并且作者说不怎么需要后处理就能够得到比较好的layout,因为作者处理的case不仅仅包含cuboid的shape,作者也处理非规则的cuboid,所以建了个数据集,corners比较多。流程图如下


feature 融合的方式是从panorama向下融合,直接采用相加的方式

注意上图还是有post process的,训练的方式是对两个网络分别使用交叉熵loss,作者做了一些实验验证其方法是有效的,对比对象主要是layoutnet,发现都是超过之前的试验结果的。
感觉这篇文章的主要创新点在于使用了一个E2P的stn layer,下一篇文章也是类似的创新

BiFuse

这一篇文章做的是深度估计,和上一篇文章是一样的,ta提出了一个是e2c还有一个是c2e的两个stn,用于融合两个branch的特征,同时作者提出了一种spherecial的padding方法,

对比的对象有omnidepth的一篇文章,以及FCRN的单目图像估计的文章
作者在消融实验部分也比较了是否添加fuse,两个单路的情况是怎么样的,发现加了fuse对于有些指标提升并不是很大

好的,下面是使用GY906红外温度传感器的代码示例,该代码使用89C52单片机和GY906进行连接,读取GY906输出的温度数据并在LCD屏幕上显示出来。 ``` #include <reg52.h> #include <intrins.h> //定义端口 #define wela P2 #define dula P2 #define DATA P0 #define SDA P1_7 #define SCL P1_6 //定义函数 void delay(unsigned int i); void init(); void write_com(unsigned char com); void write_data(unsigned char dat); void display(unsigned char addr,unsigned char dat); unsigned char read_i2c(unsigned char addr,unsigned char reg); void write_i2c(unsigned char addr,unsigned char reg,unsigned char dat); //主函数 void main() { unsigned char temp[2]; //存储温度数据 unsigned int temperature; //存储温度值 init(); //初始化 while(1) { temperature = read_i2c(0xD0,0x07)*256 + read_i2c(0xD0,0x06); //读取温度值 temperature = temperature*0.02 - 273.15; //将温度值转换为摄氏度 display(0x80,temperature/100); //显示百位数字 display(0x81,temperature%100/10); //显示十位数字 display(0x82,temperature%10); //显示个位数字 delay(500); //延时0.5s } } //延时函数 void delay(unsigned int i) { while(i--); } //初始化函数 void init() { write_com(0x38); //开显示 write_com(0x0c); //开光标、不显示 write_com(0x06); //写数据时光标自动加1 write_com(0x01); //清屏 } //写命令函数 void write_com(unsigned char com) { DATA = com; //将命令写入数据口 dula = 0; //清除锁存器 _nop_(); //空操作 _nop_(); dula = 1; //锁存器锁存 } //写数据函数 void write_data(unsigned char dat) { DATA = dat; //将数据写入数据口 dula = 0; //清除锁存器 _nop_(); //空操作 _nop_(); dula = 1; //锁存器锁存 } //显示函数 void display(unsigned char addr,unsigned char dat) { wela = 0; //清除锁存器 _nop_(); //空操作 _nop_(); wela = 1; //锁存器锁存 write_com(addr); //写入地址 write_data(dat+'0'); //写入数字 } //I2C读取函数 unsigned char read_i2c(unsigned char addr,unsigned char reg) { unsigned char dat; SDA = 1; //SDA线置高 SCL = 1; //SCL线置高 _nop_(); //空操作 _nop_(); SDA = 0; //SDA线置低(起始信号) _nop_(); _nop_(); SCL = 0; //SCL线置低 _nop_(); _nop_(); write_i2c(addr,reg,0); //写入寄存器地址 SDA = 1; //SDA线置高(停止信号) _nop_(); _nop_(); SCL = 1; //SCL线置高 _nop_(); _nop_(); SDA = 1; //SDA线置高 _nop_(); _nop_(); SCL = 0; //SCL线置低 _nop_(); _nop_(); SDA = 0; //SDA线置低(起始信号) _nop_(); _nop_(); addr = addr | 0x01; //读取地址 write_i2c(addr,0,0); //写入读取地址 SDA = 1; //SDA线置高 _nop_(); _nop_(); SCL = 1; //SCL线置高 _nop_(); _nop_(); dat = DATA; //读取数据 SDA = 1; //SDA线置高(停止信号) _nop_(); _nop_(); SCL = 0; //SCL线置低 _nop_(); _nop_(); return dat; } //I2C写入函数 void write_i2c(unsigned char addr,unsigned char reg,unsigned char dat) { SDA = 1; //SDA线置高 SCL = 1; //SCL线置高 _nop_(); //空操作 _nop_(); SDA = 0; //SDA线置低(起始信号) _nop_(); _nop_(); DATA = addr; //写入设备地址 _nop_(); _nop_(); SCL = 0; //SCL线置低 _nop_(); _nop_(); SDA = 1; //SDA线置高(ACK信号) _nop_(); _nop_(); DATA = reg; //写入寄存器地址 _nop_(); _nop_(); SCL = 1; //SCL线置高 _nop_(); _nop_(); SCL = 0; //SCL线置低 _nop_(); _nop_(); SDA = 1; //SDA线置高(ACK信号) _nop_(); _nop_(); DATA = dat; //写入数据 _nop_(); _nop_(); SCL = 1; //SCL线置高 _nop_(); _nop_(); SCL = 0; //SCL线置低 _nop_(); _nop_(); SDA = 1; //SDA线置高(停止信号) _nop_(); _nop_(); } ``` 需要注意的是,该代码中使用的读取温度值的计算方法适用于GY906型号的红外温度传感器,如果您使用的是其他型号的红外温度传感器,可能需要根据传感器的数据手册进行相应的调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值