a spacial-temporal pattern detection system for home automation

Related tags

Deep Learning argos
Overview

Argos

docker pulls

a spacial-temporal pattern detection system for home automation. Based on OpenCV and Tensorflow, can run on raspberry pi and notify HomeAssistant via MQTT or webhooks.

Demo

Have a spare raspberry pi or jetson nano (or old laptop/mac mini) lying around? Have wifi connected security cams in your house (or a raspi camera)? Want to get notified when someone exits or enters your main door? When someone waters your plants (or forgets to)? When your dog hasn't been fed food in a while, or hasn't eaten? When someone left the fridge door open and forgot? left the gas stove running and forgot? when birds are drinking from your dog's water bowl? Well, you're not alone, and you're at the right place :)

Architecture

argos

  • Take a video input (a raspberry pi camera if run on a rpi, an RTMP stream of a security cam, or a video file)
  • Run a simple motion detection algorithm on the stream, applying minimum box thresholds, negative masks and masks
  • Run object detection on either the cropped frame where motion was detected or even the whole frame if needed, using tensorflow object detection API. There is support for both tensorflow 1 and 2 as well as tensorflow lite, and custom models as well
  • Serves a flask webserver to allow you to see the motion detection and object detection in action, serve a mpeg stream which can be configured as a camera in HomeAssistant
  • Object detection is also highly configurable to threshold or mask out false positives
  • Object detection features an optional "detection buffer' which can be used to get the average detection in moving window of frames before reporting the maximum cumulative average detection
  • Supports sending notifications to HomeAssistant via MQTT or webhooks. Webhook notification send the frame on which the detection was triggered, to allow you to create rich media notifications from it via the HA android or iOS apps.
  • Pattern detection: both the motion-detector and object-detector send events to a queue which is monitored and analyzed by a pattern detector. You can configure your own "movement patterns" - e.g. a person is exiting a door or entering a door, or your dog is going to the kitchen. It keeps a configurable history of states (motion detected in a mask, outside a mask, object detected (e.g. person), etc.) and your movement patterns are pre-configured sequence of states which identify that movement. door_detect.py provides a movement pattern detector to detect if someone is entering or exiting a door
  • All of the above functionality is provided by running stream.py. There's also serve.py which serves as an object detection service which can be called remotely from a low-grade CPU device like a raspberry pi zero w which cannot run tensorflow lite on its own. The motion detector can still be run on the pi zero, and only object detection can be done remotely by calling this service, making a distributed setup.
  • Architected to be highly concurrent and asynchronous (uses threads and queue's between all the components - flask server, motion detector, object detector, pattern detector, notifier, mqtt, etc)
  • Has tools to help you generate masks, test and tune the detectors, etc.
  • Every aspect of every detector can be tuned in the config files (which are purposefully kept as python classes and not yaml), every aspect is logged with colored output on the console for you to debug what is going on.

Installation

On a pi, as a systemd service
cd ~
git clone https://github.com/angadsingh/argos
sudo apt-get install python3-pip
sudo apt-get install python3-venv
pip3 install --upgrade pip
python3 -m venv argos-venv/
source argos-venv/bin/activate
pip install https://github.com/bitsy-ai/tensorflow-arm-bin/releases/download/v2.4.0/tensorflow-2.4.0-cp37-none-linux_armv7l.whl
pip install wheel
pip install -r argos/requirements.txt

#only required for tf2
git clone https://github.com/tensorflow/models.git
cd models/research/object_detection/packages/tf2
python -m pip install . --no-deps

make a systemd service to run it automatically

cd ~/argos
sudo cp resources/systemd/argos_serve.service /etc/systemd/system/
sudo cp resources/systemd/argos_stream.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable argos_serve.service
sudo systemctl enable argos_stream.service
sudo systemctl start argos_serve
sudo systemctl start argos_stream

see the logs

journalctl --unit argos_stream.service -f
As a docker container

You can use the following instructions to install argos as a docker container (e.g. if you already use docker on your rpi for hassio-supervised, or you intend to install it on your synology NAS which has docker, or you just like docker)

Install docker (optional)

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

Run argos as a docker container

Note: replace the docker tag name below for your cpu architecture

image example device notes
angadsingh/argos:armv7 raspberry pi 2/3/4+
angadsingh/argos:x86_64 PC, Mac
angadsingh/argos:x86_64_gpu PC, Mac tensorflow with gpu support. run with docker flag --runtime=nvidia

stream.py:

docker run --rm -p8081:8081 -v configs:/configs \
						-v /home/pi/detections:/output_detections \
						-v /home/pi/argos-ssh:/root/.ssh angadsingh/argos:armv7 \
						/usr/src/argos/stream.py --ip 0.0.0.0 --port 8081 \
						--config configs.your_config

serve.py:

docker run --rm -p8080:8080 -v configs:/configs \
						-v /home/pi/upload:/upload angadsingh/argos:armv7 \
						/usr/src/argos/serve.py --ip 0.0.0.0 --port 8080 \
						--config configs.your_config  --uploadfolder "/upload"

make a systemd service to run it automatically. these services automatically download the latest docker image and run them for you: (note: you'll have to change the docker tag inside the service file for your cpu architecture)

sudo wget https://raw.githubusercontent.com/angadsingh/argos/main/resources/systemd/argos_serve_docker.service -P /etc/systemd/system/
sudo wget https://raw.githubusercontent.com/angadsingh/argos/main/resources/systemd/argos_stream_docker.service -P /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable argos_serve_docker.service
sudo systemctl enable argos_stream_docker.service
sudo systemctl start argos_serve_docker
sudo systemctl start argos_stream_docker

see the logs

journalctl --unit argos_serve_docker.service -f
journalctl --unit argos_stream_docker.service -f

Usage

stream.py - runs the motion detector, object detector (with detection buffer) and pattern detector

stream.py --ip 0.0.0.0 --port 8081 --config configs.config_tflite_ssd_example
Method Endpoint Description
Browse / will show a web page with the real time processing of the input video stream, and a separate video stream showing the object detector output
GET /status status shows the current load on the system
GET /config shows the config
GET /config?= will let you edit any config parameter without restarting the service
GET /image returns the latest frame as a JPEG image (useful in HA generic camera platform)
GET /video_feed streams an MJPEG video stream of the motion detector (useful in HA generic camera platform)
GET /od_video_feed streams an MJPEG video stream of the object detector

serve.py

serve.py --ip 0.0.0.0 --port 8080 --config configs.config_tflite_ssd_example --uploadfolder upload
Method Endpoint Description
POST /detect params:

file: the jpeg file to run the object detector on
threshold: object detector threshold (override config.tf_accuracy_threshold)
nmask: base64 encoded negative mask to apply. format: (xmin, ymin, xmax, ymax)

Home assistant automations

ha_automations/notify_door_movement_at_entrance.yaml - triggered by pattern detector ha_automations/notify_person_is_at_entrance.yaml - triggered by object detector

both of these use HA webhooks. i used MQTT earlier but it was too delayed and unreliable for my taste. the project still supports MQTT though and you'll have to make mqtt sensors in HA for the topics you're sending the notifications to here.

Configuration

both stream.py and serve.py share some configuration for the object detection, but stream.py builds on top of that with a lot more configuration for the motion detector, object detection buffer, pattern detector, and stream input configuration, etc. The example config documents the meaning of all the parameters

Performance

This runs at the following FPS with every component enabled:

device component fps
raspberry pi 4B motion detector 18 fps
raspberry pi 4B object detector (tflite) 5 fps

I actually run multiple of these for different RTMP cameras, each at 1 fps (which is more than enough for all real time home automation use cases)

Note:

This is my own personal project. It is not really written in a readable way with friendly abstractions, as that wasn't the goal. The goal was to solve my home automation problem quickly so that I can get back to real work :) So feel free to pick and choose snippets of code as you like or the whole solution if it fits your use case. No compromises were made in performance or accuracy, only 'coding best practices'. I usually keep such projects private but thought this is now meaty enough to be usable to someone else in ways I cannot imagine, so don't judge this project on its maturity or reuse readiness level ;) . Feel free to fork this project and make this an extendable framework if you have the time.

If you have any questions feel free to raise a github issue and i'll respond as soon as possible

Special thanks to these resources on the web for helping me build this.

Comments
  • Instructions for x86-64 install? Getting Illegal instruction

    Instructions for x86-64 install? Getting Illegal instruction

    I'm trying to see if I can get this running in an LXC container running ubuntu server 20.02

    The one change I made from the instructions is to install TF via:

    pip install https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow_cpu-2.4.0-cp38-cp38-manylinux2010_x86_64.whl
    

    When running stream.py I get:

    (argos-venv) edalquist@argos:~/argos$ python stream.py --ip 0.0.0.0 --port 8080 --config configs.driveway_stream
    INFO:__main__:package import START
    INFO:__main__:package import END
    INFO:notifier:mqtt init
    INFO:__main__:flask init..
    INFO:__main__:start reading video file
    INFO:__main__:TFObjectDetector init START
     * Serving Flask app "stream" (lazy loading)
     * Environment: production
       WARNING: This is a development server. Do not use it in a production deployment.
       Use a production WSGI server instead.
     * Debug mode: off
    INFO:werkzeug: * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
    INFO:input.rtmpstream:rtmp capture init START
    Illegal instruction
    

    Here is my OpenCV build info dump:

    (argos-venv) edalquist@argos:~/argos$ python -c "import cv2; print(cv2.getBuildInformation())"
    
    General configuration for OpenCV 4.5.1 =====================================
      Version control:               4.5.1-dirty
    
      Platform:
        Timestamp:                   2021-01-02T13:00:02Z
        Host:                        Linux 4.15.0-1077-gcp x86_64
        CMake:                       3.18.4
        CMake generator:             Unix Makefiles
        CMake build tool:            /bin/gmake
        Configuration:               Release
    
      CPU/HW features:
        Baseline:                    SSE SSE2 SSE3
          requested:                 SSE3
        Dispatched code generation:  SSE4_1 SSE4_2 FP16 AVX AVX2 AVX512_SKX
          requested:                 SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
          SSE4_1 (15 files):         + SSSE3 SSE4_1
          SSE4_2 (1 files):          + SSSE3 SSE4_1 POPCNT SSE4_2
          FP16 (0 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
          AVX (4 files):             + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
          AVX2 (29 files):           + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2
          AVX512_SKX (4 files):      + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2 AVX_512F AVX512_COMMON AVX512_SKX
    
      C/C++:
        Built as dynamic libs?:      NO
        C++ standard:                11
        C++ Compiler:                /usr/lib/ccache/compilers/c++  (ver 9.3.1)
        C++ flags (Release):         -Wl,-strip-all   -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG
        C++ flags (Debug):           -Wl,-strip-all   -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG
        C Compiler:                  /usr/lib/ccache/compilers/cc
        C flags (Release):           -Wl,-strip-all   -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -O3 -DNDEBUG  -DNDEBUG
        C flags (Debug):             -Wl,-strip-all   -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG
        Linker flags (Release):      -Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a -L/root/ffmpeg_build/lib  -Wl,--gc-sections -Wl,--as-needed
        Linker flags (Debug):        -Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a -L/root/ffmpeg_build/lib  -Wl,--gc-sections -Wl,--as-needed
        ccache:                      YES
        Precompiled headers:         NO
        Extra dependencies:          ade Qt5::Core Qt5::Gui Qt5::Widgets Qt5::Test Qt5::Concurrent /lib64/libpng.so /lib64/libz.so dl m pthread rt
        3rdparty dependencies:       ittnotify libprotobuf libjpeg-turbo libwebp libtiff libopenjp2 IlmImf quirc ippiw ippicv
    
      OpenCV modules:
        To be built:                 calib3d core dnn features2d flann gapi highgui imgcodecs imgproc ml objdetect photo python3 stitching video videoio
        Disabled:                    world
        Disabled by dependency:      -
        Unavailable:                 java python2 ts
        Applications:                -
        Documentation:               NO
        Non-free algorithms:         NO
    
      GUI:
        QT:                          YES (ver 5.15.0)
          QT OpenGL support:         NO
        GTK+:                        NO
        VTK support:                 NO
    
      Media I/O:
        ZLib:                        /lib64/libz.so (ver 1.2.7)
        JPEG:                        libjpeg-turbo (ver 2.0.6-62)
        WEBP:                        build (ver encoder: 0x020f)
        PNG:                         /lib64/libpng.so (ver 1.5.13)
        TIFF:                        build (ver 42 - 4.0.10)
        JPEG 2000:                   build (ver 2.3.1)
        OpenEXR:                     build (ver 2.3.0)
        HDR:                         YES
        SUNRASTER:                   YES
        PXM:                         YES
        PFM:                         YES
    
      Video I/O:
        DC1394:                      NO
        FFMPEG:                      YES
          avcodec:                   YES (58.109.100)
          avformat:                  YES (58.61.100)
          avutil:                    YES (56.60.100)
          swscale:                   YES (5.8.100)
          avresample:                NO
        GStreamer:                   NO
        v4l/v4l2:                    YES (linux/videodev2.h)
    
      Parallel framework:            pthreads
    
      Trace:                         YES (with Intel ITT)
    
      Other third-party libraries:
        Intel IPP:                   2020.0.0 Gold [2020.0.0]
               at:                   /tmp/pip-req-build-ms668fyv/_skbuild/linux-x86_64-3.8/cmake-build/3rdparty/ippicv/ippicv_lnx/icv
        Intel IPP IW:                sources (2020.0.0)
                  at:                /tmp/pip-req-build-ms668fyv/_skbuild/linux-x86_64-3.8/cmake-build/3rdparty/ippicv/ippicv_lnx/iw
        Lapack:                      NO
        Eigen:                       NO
        Custom HAL:                  NO
        Protobuf:                    build (3.5.1)
    
      OpenCL:                        YES (no extra features)
        Include path:                /tmp/pip-req-build-ms668fyv/opencv/3rdparty/include/opencl/1.2
        Link libraries:              Dynamic load
    
      Python 3:
        Interpreter:                 /opt/python/cp38-cp38/bin/python (ver 3.8.6)
        Libraries:                   libpython3.8.a (ver 3.8.6)
        numpy:                       /tmp/pip-build-env-qm375ina/overlay/lib/python3.8/site-packages/numpy/core/include (ver 1.17.3)
        install path:                python
    
      Python (for build):            /bin/python2.7
    
      Java:
        ant:                         NO
        JNI:                         NO
        Java wrappers:               NO
        Java tests:                  NO
    
      Install to:                    /tmp/pip-req-build-ms668fyv/_skbuild/linux-x86_64-3.8/cmake-install
    -----------------------------------------------------------------
    
    opened by edalquist 11
  • Unable to run application

    Unable to run application

    After running the Docker Container it reflects with missing "SlidingWindowDetectionBuffer"

    2022-03-23 12:11:31:INFO:__main__:package import START
    2022-03-23 12:11:31:INFO:__main__:package import END
    Traceback (most recent call last):
      File "/usr/src/argos/stream.py", line 230, in <module>
        m = importlib.import_module(args["config"])
      File "/usr/lib/python3.6/importlib/__init__.py", line 126, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "<frozen importlib._bootstrap>", line 994, in _gcd_import
      File "<frozen importlib._bootstrap>", line 971, in _find_and_load
      File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
      File "<frozen importlib._bootstrap>", line 994, in _gcd_import
      File "<frozen importlib._bootstrap>", line 971, in _find_and_load
      File "<frozen importlib._bootstrap>", line 955, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 665, in _load_unlocked
      File "<frozen importlib._bootstrap_external>", line 678, in exec_module
      File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
      File "/configs/config_tflite_ssd_stream.py", line 5, in <module>
        from lib.detection_buffer import SlidingWindowDetectionBuffer, SimpleDetectionBuffer
    ImportError: cannot import name 'SlidingWindowDetectionBuffer'```
    
    opened by hahne-t 3
  • Error loading config file

    Error loading config file

    I created my own stream config via: $ cp configs/examples/config_tflite_ssd_stream.py configs/driveway_stream.py modified the file and then when I run stream.py I get:

    (argos-venv) edalquist@argos:~/argos$ python stream.py --ip 0.0.0.0 --port 8080 --config config.driveway_stream
    INFO:__main__:package import START
    INFO:__main__:package import END
    Traceback (most recent call last):
      File "stream.py", line 229, in <module>
        m = importlib.import_module(args["config"])
      File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
        return _bootstrap._gcd_import(name[level:], package, level)
      File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
      File "<frozen importlib._bootstrap>", line 991, in _find_and_load
      File "<frozen importlib._bootstrap>", line 961, in _find_and_load_unlocked
      File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
      File "<frozen importlib._bootstrap>", line 1014, in _gcd_import
      File "<frozen importlib._bootstrap>", line 991, in _find_and_load
      File "<frozen importlib._bootstrap>", line 973, in _find_and_load_unlocked
    ModuleNotFoundError: No module named 'config'
    
    opened by edalquist 2
  • Setting pattern_detection_enabled=False breaks stream.py

    Setting pattern_detection_enabled=False breaks stream.py

    At fe0da14 when I set pattern_detection_enabled to False I get:

    $ python stream.py --ip 0.0.0.0 --port 8080 --config configs.driveway_stream
    2021-02-13 14:45:31:INFO:__main__:package import START
    \2021-02-13 14:45:31:INFO:__main__:package import END
    Traceback (most recent call last):
      File "stream.py", line 241, in <module>
        sd = StreamDetector(config, od, pattern_detector)
      File "stream.py", line 54, in __init__
        self.door_state_manager = DoorStateManager(pattern_detector, pattern_detector.broker_q)
    AttributeError: 'NoneType' object has no attribute 'broker_q'
    

    It looks like pattern_detection_enabled=False results in pattern_detector being set to None but that isn't handled in the door and motion state handler init:

            self.door_state_manager = DoorStateManager(pattern_detector, pattern_detector.broker_q)
            self.motion_state_manager = MotionStateManager(pattern_detector, pattern_detector.broker_q)
    
    opened by edalquist 1
  • Extend base config for stream example

    Extend base config for stream example

    I cloned the example stream config and then get errors like the following

    (argos-venv) edalquist@argos:~/argos$ python stream.py --ip 0.0.0.0 --port 8080 --config configs.driveway_stream
    INFO:__main__:package import START
    INFO:__main__:package import END
    INFO:notifier:mqtt init
    INFO:__main__:flask init..
    INFO:__main__:start reading video file
    INFO:__main__:TFObjectDetector init START
     * Serving Flask app "stream" (lazy loading)
     * Environment: production
       WARNING: This is a development server. Do not use it in a production deployment.
       Use a production WSGI server instead.
     * Debug mode: off
    INFO:werkzeug: * Running on http://0.0.0.0:8080/ (Press CTRL+C to quit)
    INFO:input.rtmpstream:rtmp capture init START
    2021-01-24 22:11:31.078193: W tensorflow/stream_executor/platform/default/dso_loader.cc:60] Could not load dynamic library 'libcudart.so.11.0'; dlerror: libcudart.so.11.0: cannot open shared object file: No such file or directory
    2021-01-24 22:11:31.078223: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
    INFO:detection.door_detect:stateHistory: []
    INFO:detection.door_detect:stateHistory: []
    INFO:input.rtmpstream:rtmp capture init END
    INFO:__main__:TFObjectDetector init END
    INFO:__main__:detect_objects init..
    INFO:detection.door_detect:door state changed: DoorStates.DOOR_CLOSED
    INFO:detection.door_detect:motion state changed: MotionStates.NO_MOTION
    INFO:__main__:od=0.00/md=0.00/st=0.00 fps
    INFO:lib.ha_mqtt:mqttPublish: MotionStates.NO_MOTION
    INFO:werkzeug:192.168.0.233 - - [24/Jan/2021 22:11:33] "GET /image HTTP/1.1" 200 -
    INFO:detection.door_detect:stateHistory: [DoorStates.DOOR_CLOSED[1], MotionStates.NO_MOTION[1]]
    Exception in thread Thread-13:
    Traceback (most recent call last):
      File "/usr/lib/python3.7/threading.py", line 926, in _bootstrap_inner
        self.run()
      File "/usr/lib/python3.7/threading.py", line 870, in run
        self._target(*self._args, **self._kwargs)
      File "stream.py", line 92, in detect_objects
        output_frame, crop, motion_outside = self.motion_detector.detect(output_frame)
      File "/home/edalquist/argos/detection/motion_detector.py", line 65, in detect
        if self.config.md_enable_erode:
    AttributeError: 'Config' object has no attribute 'md_enable_erode'
    
    opened by edalquist 0
Owner
Angad Singh
Angad Singh
CVPR2021: Temporal Context Aggregation Network for Temporal Action Proposal Refinement

Temporal Context Aggregation Network - Pytorch This repo holds the pytorch-version codes of paper: "Temporal Context Aggregation Network for Temporal

Zhiwu Qing 63 Sep 27, 2022
Implementation of temporal pooling methods studied in [ICIP'20] A Comparative Evaluation Of Temporal Pooling Methods For Blind Video Quality Assessment

Implementation of temporal pooling methods studied in [ICIP'20] A Comparative Evaluation Of Temporal Pooling Methods For Blind Video Quality Assessment

Zhengzhong Tu 5 Sep 16, 2022
Cascaded Deep Video Deblurring Using Temporal Sharpness Prior and Non-local Spatial-Temporal Similarity

This repository is the official PyTorch implementation of Cascaded Deep Video Deblurring Using Temporal Sharpness Prior and Non-local Spatial-Temporal Similarity

hippopmonkey 4 Dec 11, 2022
BADet: Boundary-Aware 3D Object Detection from Point Clouds (Pattern Recognition 2022)

BADet: Boundary-Aware 3D Object Detection from Point Clouds (Pattern Recognition

Rui Qian 17 Dec 12, 2022
Code for the paper "MASTER: Multi-Aspect Non-local Network for Scene Text Recognition" (Pattern Recognition 2021)

MASTER-PyTorch PyTorch reimplementation of "MASTER: Multi-Aspect Non-local Network for Scene Text Recognition" (Pattern Recognition 2021). This projec

Wenwen Yu 255 Dec 29, 2022
Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition

Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition

null 107 Dec 2, 2022
[CVPR 21] Vectorization and Rasterization: Self-Supervised Learning for Sketch and Handwriting, IEEE Conf. on Computer Vision and Pattern Recognition (CVPR), 2021.

Vectorization and Rasterization: Self-Supervised Learning for Sketch and Handwriting, CVPR 2021. Ayan Kumar Bhunia, Pinaki nath Chowdhury, Yongxin Yan

Ayan Kumar Bhunia 44 Dec 12, 2022
Unified unsupervised and semi-supervised domain adaptation network for cross-scenario face anti-spoofing, Pattern Recognition

USDAN The implementation of Unified unsupervised and semi-supervised domain adaptation network for cross-scenario face anti-spoofing, which is accepte

null 11 Nov 3, 2022
Jittor Medical Segmentation Lib -- The assignment of Pattern Recognition course (2021 Spring) in Tsinghua University

THU模式识别2021春 -- Jittor 医学图像分割 模型列表 本仓库收录了课程作业中同学们采用jittor框架实现的如下模型: UNet SegNet DeepLab V2 DANet EANet HarDNet及其改动HarDNet_alter PSPNet OCNet OCRNet DL

null 48 Dec 26, 2022
Deep Halftoning with Reversible Binary Pattern

Deep Halftoning with Reversible Binary Pattern ICCV Paper | Project Website | BibTex Overview Existing halftoning algorithms usually drop colors and f

Menghan Xia 17 Nov 22, 2022
Local Similarity Pattern and Cost Self-Reassembling for Deep Stereo Matching Networks

Local Similarity Pattern and Cost Self-Reassembling for Deep Stereo Matching Networks Contributions A novel pairwise feature LSP to extract structural

null 31 Dec 6, 2022
Decision Transformer: A brand new Offline RL Pattern

DecisionTransformer_StepbyStep Intro Decision Transformer: A brand new Offline RL Pattern. 这是关于NeurIPS 2021 热门论文Decision Transformer的复现。 ?? 原文地址: Deci

Irving 14 Nov 22, 2022
FindFunc is an IDA PRO plugin to find code functions that contain a certain assembly or byte pattern, reference a certain name or string, or conform to various other constraints.

FindFunc: Advanced Filtering/Finding of Functions in IDA Pro FindFunc is an IDA Pro plugin to find code functions that contain a certain assembly or b

null 213 Dec 17, 2022
Official implement of Paper:A deeply supervised image fusion network for change detection in high resolution bi-temporal remote sening images

A deeply supervised image fusion network for change detection in high resolution bi-temporal remote sensing images 深度监督影像融合网络DSIFN用于高分辨率双时相遥感影像变化检测 Of

Chenxiao Zhang 135 Dec 19, 2022
[TIP 2020] Multi-Temporal Scene Classification and Scene Change Detection with Correlation based Fusion

Multi-Temporal Scene Classification and Scene Change Detection with Correlation based Fusion Code for Multi-Temporal Scene Classification and Scene Ch

Lixiang Ru 33 Dec 12, 2022
Code and models for ICCV2021 paper "Robust Object Detection via Instance-Level Temporal Cycle Confusion".

Robust Object Detection via Instance-Level Temporal Cycle Confusion This repo contains the implementation of the ICCV 2021 paper, Robust Object Detect

Xin Wang 69 Oct 13, 2022
Change is Everywhere: Single-Temporal Supervised Object Change Detection in Remote Sensing Imagery (ICCV 2021)

Change is Everywhere Single-Temporal Supervised Object Change Detection in Remote Sensing Imagery by Zhuo Zheng, Ailong Ma, Liangpei Zhang and Yanfei

Zhuo Zheng 125 Dec 13, 2022
[Official] Exploring Temporal Coherence for More General Video Face Forgery Detection(ICCV 2021)

Exploring Temporal Coherence for More General Video Face Forgery Detection(FTCN) Yinglin Zheng, Jianmin Bao, Dong Chen, Ming Zeng, Fang Wen Accepted b

null 57 Dec 28, 2022