Shifting More Attention to Video Salient Object Detection (CVPR 2019)

Shifting More Attention to Video Salient Object Detection

现实生活中缺少一个完善的高质量标注的视频显著性目标检测(video salient object detection, VSOD)数据集。因此,本文构建了一个视频注意力一致,稠密标注的VSOD数据集,简称DAVSOD。这个数据集包含226个视频,共23938帧,涵盖了多种真实场景,物体,实例和动作。借助相应的真实眼动注视点数据,得到精确的用户标注。从而首次明确强调了具有挑战性的显著性转移现象,即视频中的显著对象可能会动态改变。
为了进一步给VSOD领域提供一个全面的评测,本文在7个现有数据集和构建的DAVSOD数据集上系统评估17个最具有代表性的VSOD算法。同时,提供了一个基准模型,它配备了一个面向显著性转移的长短时记忆卷积网络(convLSTM),可通过学习人类注意力转移行为来有效的捕获视频动态显著性。

本文贡献:
1)构建了一个数据集;
2)对17种最先进的模型进行全面的评测,同时,提出一个名为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、付费专栏及课程。

余额充值