Shifting More Attention to Video Salient Object Detection笔记

一、前言

该论文类似一个视频显著性检测的综述测评。
本文对8种用于视频显著性检测的数据集以及17种比较先进的视频显著性检测算法进行了对比分析
另外本文也有自己的特点:
①本文构建了用于视频显著性检测的大规模的稠密标注的视频显著对象检测(DAVSOD)数据集。
②本文还提出了一种面向显著性转移的VSOD(SSAV)的模型。

二、关于DAVSOD数据集

  1. 为什么要构建DAVSOD数据集呢?

我们知道,在我们看一段视频时,由于视频是一直运动着的,因此我们在观看过程中,注意力很可能会因为视频内容的变化而变化。但在以往的数据集中,进行标注时却并没有考虑动态的人眼注视点数据,而是直接将视频帧拆分成离散的静态帧来进行标注。

  1. DAVSOD数据集如何构建?

首先,该数据集的视频是来自当前最大规模的动态眼动数据集DHF1K,对其进行切片并删除黑屏过度片段,得到的包含226个视频,23938帧,798秒,分辨率为640×360像素的大型数据集。
在这里插入图片描述

其次,对该数据集进行标注,在标注过程中首次标注了注意力转移所发生的的时刻。
接着,对每个视频都手动标记了一个类别。
最后,标注时不仅标注了每帧的显著对象,还根据人类注意力,对每帧视频选择至多5个对象并细致标注。
在这里插入图片描述

  1. 数据集划分

以4:2:4的比例将视频分为训练、验证、测试集合(分别有90,46,90个视频)
根据VSOD的难度,90个测试集又分为32个容易的子集、30个正常子集和25个困难子集。

三、DAVSOD与其他数据集对比

在这里插入图片描述
其中
#Vi.:视频数量
#AF.:标注帧的数量
DL:是否是稠密(逐帧)标注
AS:是否考虑了注意力转移
FP:显著物体的标注是否根据人眼注视点
EF:是否为标注的显著对象提高人眼标注点
IL:是否提高了实例-级标注

对比分析:①DAVSOD首次强调了动态场景中的显著对象转移,并提供了唯一的、与视觉注意力相一致的标注。②DAVSOD多样性、大规模稠密标注、完整的对象/实例-级显著对象的标注、视频描述以及丰富的属性标注(例如显著对象的数量,运动模式以及场景/对象类别等)为VSOD任务打下基础。

四、关于SSAV模型

该模型由金字塔扩张卷积模块(PDC)和显著性转移感知模块(SSLSTM)
在这里插入图片描述

4.1PDC

用于提取静态特征,得到静态特征序列。

  1. 那为什么要用PDC呢?

由于多尺度信息的利用和空间细节的保留,平行叠加一组带有采样率的扩张卷积层可以获得更好的性能。

  1. 那么如何实现PDC呢?

先用Q表示输入帧的3D特征张量,接着一扩张率为d>1的扩张卷积层Dd作用到Q,得到特征P。
最终得到一个通过不同扩张率得到不同层的多尺度信息和原始信息Q的特征序列:
在这里插入图片描述
其中P1代表第一个扩张率得到的层对原始特征Q作用的结果

4.2 SSLSTM

用于捕获时序信息,同时区分背景中的显著物体以及编码注意力转移信息。

  1. 如何实现SSLSTM呢?

我们已经通过PDC得到了一个静态特征序列X,因此在某时刻t时,给定Xt,则可利用显著性转移感知的convLSTM输出相应的显著对象掩码St:
在这里插入图片描述
其中σ为sigmoid激活函数。
该模块的关键是显著性转移感知注意网络F^A,它用来作为神经元注意机制,对convLSTM输出的特征H进行加权;并且有效的模拟人类注意力转移行为。由于它要实现两个功能,因此又引入一个小的convLSTM来构建显著性转移感知注意网络,从而达到convLSTM嵌套另外的convLSTM的效果:
在这里插入图片描述

用l(·)∈{0,1}表示是否存在注意视点标注(其中为0表示没有,为1表示有),当l(·)=0时则F^A以隐式方式训练,=1则以显式方式训练。

五、SSAV与其他算法对比

在这里插入图片描述

Certainly! Below is a complete code example for the `LedShift` application described in the second part of the document "Lab 3 - IO Operations - LED Application.pdf". This code will shift the position of the lit LED from the first LED on the Basys3 board, using an interrupt to rotate the LED every 0.1 seconds. ### led_shift.c ```c #include "xparameters.h" #include "xgpio.h" #include "xintc.h" #include "xtmrctr.h" #include "xil_exception.h" #include "xil_printf.h" #include "rotate.h" // Global variables static XGpio Gpio; volatile u16 ledValue = 0x0001; // Start with the first LED lit XIntc Intc; XTmrCtr TmrCtr; // Function prototypes void initGpio(void); void initInterruptSystem(void); void TimerISR(void *CallBackRef); int main() { // Initialize the GPIO initGpio(); // Initialize the interrupt system initInterruptSystem(); // Output the initial value to the LED port XGpio_DiscreteWrite(&Gpio, 1, ledValue); // Enter an infinite loop while (1) { // Main loop does nothing, everything is handled by the interrupt service routine } return 0; } void initGpio(void) { // Initialize the GPIO driver int Status; Status = XGpio_Initialize(&Gpio, XPAR_GPIO_0_DEVICE_ID); if (Status != XST_SUCCESS) { xil_printf("GPIO Initialization Failed\r\n"); return; } xil_printf("GPIO Initialization Successful\r\n"); } void initInterruptSystem(void) { int Status; // Initialize the interrupt controller driver Status = XIntc_Initialize(&Intc, XPAR_INTC_0_DEVICE_ID); if (Status != XST_SUCCESS) { xil_printf("INtc Initialization Failed\r\n"); return; } // Connect the interrupt handler Status = XIntc_Connect(&Intc, XPAR_INTC_0_TMRCTR_0_INTERRUPT_INTR, (XInterruptHandler)TimerISR, &TmrCtr); if (Status != XST_SUCCESS) { xil_printf("INtc Connect Failed\r\n"); return; } // Enable the interrupt XIntc_Enable(&Intc, XPAR_INTC_0_TMRCTR_0_INTERRUPT_INTR); // Start the interrupt controller Status = XIntc_Start(&Intc, XIN_REAL_MODE); if (Status != XST_SUCCESS) { xil_printf("INtc Start Failed\r\n"); return; } // Initialize the timer/counter driver Status = XTmrCtr_Initialize(&TmrCtr, XPAR_TMRCTR_0_DEVICE_ID); if (Status != XST_SUCCESS) { xil_printf("TmrCtr Initialization Failed\r\n"); return; } // Set the timer to generate an interrupt every 0.1 seconds XTmrCtr_SetLoadReg(&TmrCtr, 0, XPAR_CPU_MHZ * 100000); // 0.1 seconds in microseconds // Start the timer XTmrCtr_Start(&TmrCtr, 0); // Enable global interrupts Xil_ExceptionInit(); Xil_ExceptionRegisterHandler(XIL_EXCEPTION_ID_INT, (Xil_ExceptionHandler)XIntc_InterruptHandler, &Intc); Xil_ExceptionEnable(); } void TimerISR(void *CallBackRef) { // Acknowledge the interrupt XTmrCtr InterruptionMask; InterruptionMask = XTmrCtr_GetInterruptStatus(&TmrCtr, 0); XTmrCtr_ClearInterruptStatus(&TmrCtr, 0, InterruptionMask); // Rotate the LED value to the left ledValue = rotateLeft(ledValue, 1); // Output the rotated value to the LED port XGpio_DiscreteWrite(&Gpio, 1, ledValue); } ``` ### rotate.c ```c #include "xparameters.h" #include "xgpio.h" #include "xil_types.h" u16 rotateLeft(u16 value, int count) { while (count--) { if (value & 0x8000) { value = (value << 1) | 1; } else { value = value << 1; } } return value; } u16 rotateRight(u16 value, int count) { while (count--) { if (value & 1) { value = (value >> 1) | 0x8000; } else { value = value >> 1; } } return value; } ``` ### Explanation: 1. **Initialization**: - `initGpio()` initializes the GPIO driver for the LEDs. - `initInterruptSystem()` sets up the interrupt controller and timer to generate interrupts every 0.1 seconds. 2. **Main Loop**: - The main loop does nothing because all the work is handled by the interrupt service routine (ISR). 3. **Interrupt Service Routine (ISR)**: - `TimerISR()` is called every 0.1 seconds. - It acknowledges the interrupt, rotates the `ledValue` to the left using the `rotateLeft()` function, and updates the LED port with the new value. 4. **Rotation Functions**: - `rotateLeft()` shifts the bits to the left and wraps around if the most significant bit is set. - `rotateRight()` shifts the bits to the right and wraps around if the least significant bit is set. This code will cause the LED to shift from right to left, wrapping around when it reaches the last LED.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值