GPU (Graphics Processing Unit) parallel hierarchical motion detection method and system for edge computing
By employing a GPU-parallel hierarchical motion detection method on edge devices and utilizing DMA and parallel computing optimization techniques, the problems of wasted computing resources and data transmission bottlenecks in multi-channel video streams on edge devices are solved, achieving efficient and real-time motion detection.
Patent Information
- Application Number
- CN202511954356.3
- Authority / Receiving Office
- CN · China
- Patent Type
- Applications(China)
- Current Assignee / Owner
- Filing Date
- 2025-12-23
- Publication Date
- 2026-03-20
AI Technical Summary
Existing technologies suffer from wasted computing resources, data transmission bottlenecks, and insufficient real-time performance when processing multiple video streams on edge devices.
A GPU-parallel hierarchical motion detection method oriented towards edge computing is adopted. By acquiring multi-channel video stream data and copying the data to the GPU according to whether the device supports DMA matching processing strategy, the GPU is used to perform parallel vectorized inter-frame difference and tree reduction summation to determine the number of global moving pixels, and moving target localization is performed only when necessary.
It significantly reduces the data transfer overhead between the CPU and GPU, alleviates the system bus bandwidth bottleneck, reduces overall power consumption, improves processing efficiency, reduces invalid calculations, and achieves efficient, real-time motion detection of multiple video streams.
Smart Images

Figure CN121708048A_ABST
Abstract
Description
Technical Field
[0001] This invention relates to the fields of computer vision and edge computing technology, and in particular to a GPU parallel hierarchical motion detection system and method for edge computing. Background Technology
[0002] With the rapid development of smart cities, intelligent security, and other fields, massive amounts of video surveillance data are generated at the network edge. As a core task of intelligent video analysis, moving target detection faces an increasingly prominent contradiction between real-time computation, accuracy, and resource consumption on edge devices where computing power, storage bandwidth, and power consumption are limited.
[0003] Traditional video motion detection solutions primarily rely on centralized processing on backend servers or high-performance smart cameras at the front end, resulting in issues such as high network latency, high deployment costs, and algorithmic limitations. Edge computing, by offloading computational tasks to network edge devices, offers an effective solution to these problems. However, edge devices are typically equipped with general-purpose but limited-performance GPUs and need to process multiple high-definition video streams simultaneously. Existing GPU-accelerated motion detection solutions essentially still follow a "per-frame detection" processing model, performing a complete, computationally intensive detection process on every frame of the input video. In typical surveillance scenarios, still frames constitute the majority, leading to a significant waste of computational resources and energy. Furthermore, existing solutions frequently transfer complete image data between the CPU and GPU, easily creating performance bottlenecks under the limited system bus bandwidth of edge devices, thus restricting the concurrent processing capability and real-time performance of multiple video streams.
[0004] Therefore, a technical solution is needed that can be deeply optimized for the resource characteristics of edge devices, so as to achieve efficient and real-time motion detection of multiple video streams while significantly reducing the system's computational load, data transmission overhead and overall power consumption. Summary of the Invention
[0005] The technical problem to be solved by the present invention is to provide a GPU parallel hierarchical motion detection method and system for edge computing, so as to solve the problems of wasted computing resources, data transmission bottlenecks and insufficient real-time performance in the processing of multiple video streams on edge devices in the existing technology.
[0006] To solve the above-mentioned technical problems, the technical solution adopted by the present invention is as follows: A GPU-parallel hierarchical motion detection method for edge computing includes the following steps: S1. Acquire multi-channel video stream data, match the corresponding data processing strategy according to whether the edge device supports DMA, and copy the processed multi-channel video stream data to the GPU; S2. On the GPU, global motion filtering is performed on the grayscale images of the current frame and the previous frame video data after processing in step S1. A difference map is obtained by parallel vectorization of inter-frame difference, and tree reduction summation is performed to calculate the number of global motion pixels. S3. Determine whether the number of global motion pixels exceeds a preset threshold. If so, calculate the motion region of the global motion pixels and locate the moving target. Otherwise, directly process the grayscale image of the next frame of video data.
[0007] To solve the above-mentioned technical problems, another technical solution adopted by the present invention is as follows: A GPU parallel hierarchical motion detection system for edge computing includes a memory and a processor. The memory stores a computer program that can run on the processor, and the processor executes the computer program to implement the steps of the method described above.
[0008] The beneficial effects of this invention are as follows: Based on whether the edge device supports DMA, the corresponding video stream processing strategy is adapted and the processed video is transmitted to the GPU, significantly reducing the data transfer overhead between the CPU and GPU, alleviating the system bus bandwidth bottleneck, and reducing overall power consumption. By utilizing the GPU for vectorized inter-frame difference and tree-based reduction summation to quickly calculate the global number of moving pixels in the video, the core calculation steps are executed entirely on the GPU. Furthermore, by integrating parallel optimization techniques such as vectorized processing and tree-based reduction, the hardware parallel advantages of the GPU are fully utilized, greatly improving processing efficiency. By comparing the global number of moving pixels with a preset threshold, it is determined whether to further locate the moving target, avoiding the ineffective processing of a large number of still frames in traditional solutions, significantly reducing the computational load. In this way, the problems of wasted computing resources, data transmission bottlenecks, and insufficient real-time performance that exist when edge devices process multiple video streams are effectively overcome. Attached Figure Description
[0009] Figure 1 This is a flowchart of a GPU parallel hierarchical motion detection method for edge computing according to an embodiment of the present invention; Figure 2 This is a detailed flowchart of a GPU parallel hierarchical motion detection method for edge computing according to an embodiment of the present invention; Figure 3 This is a schematic diagram of the structure of a GPU parallel hierarchical motion detection system for edge computing according to an embodiment of the present invention.
[0010] Label Explanation: 1. A GPU parallel hierarchical motion detection system for edge computing; 2. Memory; 3. Processor. Detailed Implementation
[0011] To explain in detail the technical content, objectives, and effects of the present invention, the following description is provided in conjunction with the embodiments and accompanying drawings.
[0012] Before detailing the embodiments of this application, some related concepts will first be explained: DMA (Direct Memory Access) is a technology that allows specific hardware subsystems (such as GPUs and network cards) in a computer system to read and write system memory independently and directly without going through the central processing unit (CPU).
[0013] Inter-frame difference: A motion detection algorithm that detects changes in a scene by calculating the difference between corresponding pixels in two consecutive frames of a video sequence.
[0014] Reduction: A parallel computing paradigm that refers to the process of combining a large amount of data into a single result through some operation (such as summation or finding the maximum value).
[0015] Bit-packing is a parallel lossless data reduction technique based on bit mapping. It achieves constant-ratio compression and efficient transmission by mapping multiple low-width data to specific bits in a single storage unit.
[0016] In existing technologies, such as edge computing scenarios like smart security and intelligent transportation, massive amounts of surveillance cameras continuously generate video data. Traditional video motion detection solutions typically rely on centralized processing by backend servers or expensive smart cameras at the front end, resulting in problems such as high network latency, high deployment costs, and difficulty in supporting multi-channel concurrency. Edge computing, by offloading computing tasks to network edge devices, is an effective way to solve these problems. However, these edge devices are usually equipped with general-purpose but limited-performance GPUs and need to process multiple high-definition video streams simultaneously. Existing GPU-based motion detection solutions often perform a complete, computationally intensive detection process for each frame of video, while the monitored scene is mostly static, resulting in a huge waste of computing resources and energy. At the same time, the frequent transmission of complete image data between the CPU and GPU can easily create a performance bottleneck under the limited system bus bandwidth of the edge device, severely restricting the real-time analysis capability of multiple video streams.
[0017] To at least solve the above problems, please refer to Figure 1 This invention provides a GPU-parallel hierarchical motion detection method for edge computing, comprising the following steps: S1. Acquire multi-channel video stream data, match the corresponding data processing strategy according to whether the edge device supports DMA, and copy the processed multi-channel video stream data to the GPU; S2. On the GPU, global motion filtering is performed on the grayscale images of the current frame and the previous frame video data after processing in step S1. A difference map is obtained by parallel vectorization of inter-frame difference, and tree reduction summation is performed to calculate the number of global motion pixels. S3. Determine whether the number of global motion pixels exceeds a preset threshold. If so, calculate the motion region of the global motion pixels and locate the moving target. Otherwise, directly process the grayscale image of the next frame of video data.
[0018] As described above, the beneficial effects of this invention are as follows: Based on whether the edge device supports DMA adaptation and corresponding multi-channel video stream processing strategies, the processed video is transmitted to the GPU, significantly reducing data transfer overhead between the CPU and GPU, alleviating system bus bandwidth bottlenecks, and reducing overall power consumption. Utilizing the parallel advantages of the GPU, rapid global motion evaluation is performed to obtain the number of global motion pixels used to determine whether to perform moving target localization. If the number of global motion pixels exceeds a preset threshold, subsequent refined analysis is performed. This allows the system to intelligently skip complex subsequent processing of a large number of static scenes, significantly reducing the computational load.
[0019] Furthermore, step S1, which involves matching the corresponding data processing strategy based on whether the edge device supports DMA, specifically includes: If the edge device supports DMA, then video data can be directly mapped from memory to GPU memory using DMA technology; If the edge device does not support DMA, after decoding the multi-channel video stream data, the component data used to characterize the brightness is extracted and copied to the GPU memory as a grayscale image.
[0020] As described above, for platforms supporting DMA, zero-copy technology can completely eliminate the bandwidth consumption and latency caused by physical copying between CPU and GPU memory. For platforms that do not support DMA, only the luminance component most sensitive to the human eye (such as the Y component) is transmitted, effectively reducing the amount of data transmitted. This adaptive strategy ensures near-optimal data transmission efficiency under different hardware conditions, enhancing the compatibility and universality of the detection method.
[0021] Furthermore, after step S1, the method further includes: performing parallel downsampling and size alignment processing on the incoming multi-channel video stream data on the GPU to obtain video stream data in a unified data format.
[0022] As described above, parallel downsampling can significantly reduce the total number of pixels that need to be processed subsequently, while size alignment can unify the resolution of all video streams, ensuring that video sources of different resolutions can be processed efficiently. At the same time, aligned sizes are beneficial to GPU computing, thereby improving data compatibility.
[0023] Further, in step S2, global motion filtering is performed. A difference map is obtained through parallel vectorized inter-frame difference, and tree-based reduction and summation are performed to calculate the number of global motion pixels. Specifically, this includes: S21. Each work item in the GPU kernel function reads and processes multiple pixels at once, calculates the absolute difference between the pixel vector of the first frame and the corresponding pixel vector of the previous frame, and obtains the difference map. S22. For each work item, count the number of pixels whose absolute difference exceeds a preset threshold, obtain the local count for each work item, and store the local count in the local memory of the GPU. S23. Within the local working group of the GPU, a tree-based reduction algorithm is used to sum all local counts in the local memory in parallel to obtain the total count. S24. The sum of the counts from each working group is accumulated to the global counter through atomic operations to obtain the global number of moving pixels.
[0024] As described above, the GPU kernel function first reads (e.g., uchar4) and processes multiple pixels one at a time to improve memory bandwidth utilization and instruction efficiency. Then, the GPU performs vectorized inter-frame differencing and tree-based reduction summation to quickly calculate the global number of moving pixels in the video. By fusing vectorized processing and tree-based reduction with parallel optimization techniques, the GPU's hardware parallelism is fully utilized, significantly improving processing efficiency. The entire process is completed efficiently and in parallel within the GPU, minimizing interaction with the CPU and achieving extremely high execution efficiency.
[0025] Further, step S3, which calculates the motion region of global moving pixels and locates the moving target, specifically includes: S31. Based on the difference map obtained in step S2, perform image preprocessing on the GPU to obtain a binarized motion mask map; S32. Calculate the motion region of the motion mask to obtain the moving target.
[0026] As described above, target localization is performed only after motion is confirmed. It utilizes previously generated difference maps, avoiding redundant calculations and enabling on-demand allocation of computing resources.
[0027] Furthermore, the image preprocessing in step S31 includes at least Gaussian blurring, and the Gaussian blurring is implemented by separating the convolution kernel.
[0028] As described above, Gaussian blurring can effectively filter out sensor noise and pseudo-motion caused by subtle changes in lighting in the difference image, thus improving detection robustness. Gaussian blurring is achieved by using separable convolution kernels, that is, by utilizing the separability of the Gaussian kernel, it is decomposed into two independent, one-dimensional convolution kernels (one horizontal and one vertical), which can reduce computational complexity from... Reduce to This significantly improves the execution speed of this step on the GPU.
[0029] Further, the motion region calculation of the motion mask image in step S32 includes: dividing the motion mask image into multiple sub-blocks on the GPU, determining in parallel whether each sub-block is a motion block, merging adjacent motion blocks, generating bounding box coordinates and sending them back to the CPU.
[0030] As described above, the technical solution of dividing the motion mask image into multiple sub-blocks on the GPU and merging adjacent motion blocks according to their motion states to generate the target bounding box coordinates and then sending them back to the CPU achieves a coarse localization effect. This solution is completed entirely on the GPU, with minimal data transfer and the lowest end-to-end latency, making it suitable for scenarios with extremely high response speed requirements. Furthermore, the motion region calculation of the motion mask image in step S32 also includes: transmitting the motion mask image back to the CPU, whereby the CPU runs a contour extraction algorithm to generate the contour and bounding box of the moving target.
[0031] The process of transferring the motion mask image back to the CPU includes: if the edge device supports DMA, the motion mask image is directly mapped back to the CPU memory space with zero copy for reading; if the edge device does not support DMA, the motion mask image is bitmap compressed before being transferred from the GPU back to the CPU.
[0032] As described above, a technical solution achieves precise localization by intelligently transferring data to the CPU based on whether the edge device supports DMA, and then having the CPU uniformly execute contour extraction algorithms to generate the contours and bounding boxes of the moving target. Regarding data transmission, zero-copy is achieved when DMA is supported; otherwise, parallel bitmap compression is performed using the bit width characteristics of binary images, effectively reducing the system bus pressure caused by data backhaul and avoiding transmission jitter due to its constant compression rate. Utilizing mature and accurate contour extraction algorithms on the CPU (such as findContours) allows for even more precise moving target contours.
[0033] Please refer to Figure 3Another embodiment of the present invention provides a GPU parallel hierarchical motion detection system for edge computing, including a memory and a processor. The memory stores a computer program that can run on the processor. When the processor executes the computer program, it implements the various steps of the GPU parallel hierarchical motion detection method for edge computing as described above.
[0034] The GPU parallel hierarchical motion detection method and system for edge computing described above are applicable to edge computing scenarios such as smart security, smart transportation, and smart power line inspection, which require real-time, low-power motion detection and alarm for massive video streams. The specific implementation methods are described below: Please refer to Figure 1 Embodiment 1 of the present invention is as follows: A GPU-parallel hierarchical motion detection method for edge computing includes the following steps: S1. Acquire multi-channel video stream data, match the corresponding data processing strategy according to whether the edge device supports DMA, and copy the processed multi-channel video stream data to the GPU.
[0035] For details, please refer to Figure 2 If the edge device supports DMA, the video data is directly mapped from the memory to the GPU memory using DMA technology. If the edge device does not support DMA, the multi-channel video stream data is decoded, and the component data representing brightness is extracted and copied as a grayscale image to the GPU memory. Then, on the GPU, the incoming multi-channel video stream data undergoes parallel downsampling and size alignment processing to obtain video stream data in a unified data format.
[0036] In one embodiment, if the device supports DMA (Direct Memory Access), video data is directly mapped from memory to GPU memory using DMA technology, thus eliminating the need for CPU involvement in data copying. This zero-copy approach significantly reduces system bus load and eliminates data transfer latency.
[0037] In another embodiment, if the gateway receives video streams from multiple 1080P high-definition network cameras, its integrated GPU does not support DMA. After decoding each video stream, the system extracts only the Y (luminance) component from the YUV data to form a single-channel grayscale image, which is then copied to the GPU's global memory. This operation reduces the amount of data transmitted per frame, from transmitting YUV data to transmitting only the Y component, achieving significant bandwidth savings at the data transmission level, especially suitable for edge devices with limited system bus bandwidth. An OpenCL kernel is written on the GPU to perform parallel downsampling of the grayscale images from multiple video streams to optimize memory access.
[0038] S2. On the GPU, global motion filtering is performed on the grayscale images of the current frame and the previous frame video data after processing in step S1. A difference map is obtained by parallel vectorization of inter-frame difference, and tree reduction summation is performed to calculate the number of global motion pixels.
[0039] S21. Each working item in the GPU kernel function reads and processes multiple pixels at once, calculates the absolute difference between the pixel vector of the first frame and the corresponding pixel vector of the previous frame, and obtains the difference map.
[0040] S22. For each work item, count the number of pixels whose absolute difference exceeds a preset threshold, obtain the local count for each work item, and store the local count in the local memory of the GPU.
[0041] S23. Within the local working group of the GPU, a tree-based reduction algorithm is used to sum all local counts in the local memory in parallel to obtain the total count.
[0042] S24. The sum of the counts from each working group is accumulated to the global counter through atomic operations to obtain the global number of moving pixels.
[0043] For details, please refer to Figure 2 The first layer of fast filtering is performed on the GPU. A fused OpenCL kernel is written: for each work item, a uchar4 (4 pixels) is read, the absolute difference with the previous frame is calculated, the number of pixels greater than a threshold is counted and written to local memory, tree-structured reduction and summation are performed within the work group, and finally the results of all work groups are summed. The CPU reads the final global count. This step takes less than 0.5 milliseconds to process a single video stream.
[0044] S3. Determine whether the number of global motion pixels exceeds a preset threshold. If so, calculate the motion region of the global motion pixels and locate the moving target. Otherwise, directly process the grayscale image of the next frame of video data.
[0045] The specific execution steps for calculating the motion region of global moving pixels and locating the moving target in step S3 include steps S31 to S32.
[0046] S31. Based on the difference map obtained in step S2, perform image preprocessing on the GPU to obtain a binarized motion mask map.
[0047] For details, please refer to Figure 2 The threshold was set to 0.3% (approximately 389 pixels) of the total number of pixels after downsampling. For scenarios such as monitoring equipment rooms and perimeter walls, the number of frames with a count below the threshold was more than 99.5% of the time. The system directly processed the next frame, skipping all subsequent calculations, and the average GPU utilization remained below 5%.
[0048] When someone enters the area monitored by a certain camera, the output count of video stream S3 jumps to over 2000, exceeding the threshold. The system immediately triggers the second layer of calculation. Based on the difference map of S2, the GPU kernel is started for preprocessing: a separable Gaussian kernel (sigma=1.5) is used for blurring; then a 3x3 dilation operation is performed; finally, binarization (threshold 40) is performed to generate a clear motion mask map.
[0049] S32. Calculate the motion region of the motion mask to obtain the moving target.
[0050] In one embodiment, the gateway accesses video streams from multiple 1080P high-definition network cameras, and the scene is configured in coarse positioning mode. On the GPU, the mask image is divided into 16x16 blocks, motion blocks are marked in parallel, and then adjacent blocks are merged to finally generate one or more rectangular boxes covering moving people. Only the four integer values (x, y, width, height) of this box are sent back to the CPU, along with an alarm message.
[0051] In another embodiment, cameras monitoring equipment areas within the power distribution room are configured in a fine-grained positioning mode. This step proceeds after the system determines significant motion (such as personnel inspection or abnormal activity) in step S2. After generating the motion mask image in S31, the system transfers the mask image from GPU memory back to the CPU to obtain accurate moving target contours for subsequent analysis. To minimize the impact of data transmission on the system bus, the binary mask image is bitmap compressed before being sent back. After receiving and decompressing the data, the CPU calls a mature contour extraction algorithm (such as OpenCV's findContours function) to generate accurate moving target contours, providing input for subsequent analysis.
[0052] Please refer to Figure 3 Embodiment two of the present invention is as follows: A GPU-parallel hierarchical motion detection system 1 for edge computing includes a memory 2 and a processor 3. The memory 2 stores a computer program implementing the method described in Embodiment 1. Upon system startup, the processor 3 loads and executes the computer program, driving the GPUs to work collaboratively, thereby achieving real-time, hierarchical motion detection of multiple video streams simultaneously on the gateway. Testing shows that compared to traditional continuous frame difference detection on the CPU, this system offers improved processing throughput; and compared to running a complete background subtraction algorithm for each frame on the GPU, the system's average power consumption is reduced.
[0053] In summary, the GPU parallel hierarchical motion detection method and system for edge computing provided by this invention effectively overcomes the core contradiction between computing power, bandwidth and power consumption in edge video analysis through innovative algorithm architecture design and deep hardware co-optimization, providing key technical support for building large-scale, low-cost and highly reliable edge intelligent vision systems.
[0054] The above description is merely an embodiment of the present invention and does not limit the patent scope of the present invention. Any equivalent modifications made based on the content of the present invention specification and drawings, or direct or indirect applications in related technical fields, are similarly included within the patent protection scope of the present invention.
Claims
1. A GPU-parallel hierarchical motion detection method for edge computing, characterized in that, Including the following steps: S1. Acquire multi-channel video stream data, match the corresponding data processing strategy according to whether the edge device supports DMA, and copy the processed multi-channel video stream data to the GPU; S2. On the GPU, global motion filtering is performed on the grayscale images of the current frame and the previous frame video data after processing in step S1. A difference map is obtained by parallel vectorization of inter-frame difference, and tree reduction summation is performed to calculate the number of global motion pixels. S3. Determine whether the number of global motion pixels exceeds a preset threshold. If so, calculate the motion region of the global motion pixels and locate the moving target. Otherwise, directly process the grayscale image of the next frame of video data.
2. The method according to claim 1, characterized in that, Step S1, which involves matching the corresponding data processing strategy based on whether the edge device supports DMA, includes: If the edge device supports DMA, the multi-channel video stream data can be directly mapped from the memory to the GPU memory using DMA technology; If the edge device does not support DMA, after decoding the multi-channel video stream data, the component data used to characterize the brightness is extracted and copied to the GPU memory as a grayscale image.
3. The method according to claim 1, characterized in that, The process following step S1 also includes: On the GPU, the incoming multi-channel video stream data is subjected to parallel downsampling and size alignment processing to obtain video stream data with a unified data format.
4. The method according to claim 1, characterized in that, In step S2, global motion filtering is performed. A difference map is obtained through parallel vectorized inter-frame difference, and tree-based reduction and summation are performed to calculate the number of global motion pixels, including: S21. Each work item in the GPU kernel function reads and processes multiple pixels at once, calculates the absolute difference between the pixel vector of the first frame and the corresponding pixel vector of the previous frame, and obtains the difference map. S22. For each work item, count the number of pixels whose absolute difference exceeds a preset threshold, obtain the local count for each work item, and store the local count in the local memory of the GPU. S23. Within the local working group of the GPU, a tree-based reduction algorithm is used to sum all local counts in the local memory in parallel to obtain the total count. S24. The sum of the counts from each working group is accumulated to the global counter through atomic operations to obtain the global number of moving pixels.
5. The method according to claim 1, characterized in that, Step S3, which calculates the motion region of global moving pixels and locates the moving target, specifically includes: S31. Based on the difference map obtained in step S2, perform image preprocessing on the GPU to obtain a binarized motion mask map; S32. Calculate the motion region of the motion mask to obtain the moving target.
6. The method according to claim 5, characterized in that, The image preprocessing in step S31 includes at least Gaussian blurring, and the Gaussian blurring is implemented by separating the convolution kernel.
7. The method according to claim 5, characterized in that, Step S32, which involves calculating the motion region of the motion mask image, includes: On the GPU, the motion mask image is divided into multiple sub-blocks, each sub-block is determined in parallel to determine whether it is a motion block, adjacent motion blocks are merged, bounding box coordinates are generated and sent back to the CPU.
8. The method according to claim 5, characterized in that, The motion region calculation for the motion mask image in step S32 further includes: The motion mask image is sent back to the CPU, which then runs a contour extraction algorithm to generate the contour and bounding box of the moving target.
9. The method according to claim 8, characterized in that, The motion mask image is transmitted back to the CPU, including: If the edge device supports DMA, the motion mask image is directly mapped back to the CPU memory space with zero copy for reading. If the edge device does not support DMA, the motion mask image is bitmap compressed, and the compressed motion mask image is transferred from the GPU back to the CPU.
10. A GPU-parallel hierarchical motion detection system for edge computing, characterized in that, It includes a memory and a processor, wherein the memory stores a computer program that runs on the processor, and the processor executes the computer program to implement the various steps of a GPU parallel hierarchical motion detection method for edge computing as described in any one of claims 1 to 9.
Citation Information
Patent Citations
GPU-based video processing method
CN107920253A
Motion smoothing for re-projected frames
CN113170136A
Video signal processing apparatus and video signal processing method, and video signal display device
JP2011254392A
Video processing with multiple graphical processing units
US20070103590A1
Network-enabled graphics processing module
US20180063555A1