Skip to content

abstractguy/TSO_project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

330 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TSO_project

Codacy Badge

Hits

made-with-python

made-with-Markdown

made-with-bash

made-with-c++

ForTheBadge powered-by-electricity

Documentation Status

Profile views

Demandez moi n'importe quoi !

Ask Me Anything !

License

Cliquez ci-dessous pour la version française

Version française

An "intelligent" robotic arm using a camera for pick and place

Codacy Badge

The problem

Robotic arms using proximity sensors are notoriously inefficient at the pick and place task. Proximity sensors do not enable the user to select the category of objects to displace. Moreover, they fail to estimate the exact position of the object precisely in one pass without resorting to a long scanning procedure, equivalent to a blind person asking his dog to tell him where the car keys are by covering the whole field by foot.

The solution

Instead, contemporary progress in machine vision allows the machine to locate and seize the complex object directly after one look, in real time, without resorting to one-dimensional, close proximity sensors.

💬 Ask a question          📖 Read questions

The summary

A preconfigured development computer (auto-install scripts and documentation included) connects by SSH to a preconfigured Nvidia Jetson Nano (auto-install scripts and documentation included) with a Raspberry Pi camera v2.1 or a Arducam Camarray Hat (auto-install scripts and documentation included). Only one is attached by a 1 meter MIPI ribbon cable with a repeater extension to the tip of the uArm. The USB-controlled Jetson becomes the central controlling unit in this topology. The x86_64 (but could be other architectures) flashes the firmware on the ESP32 microcontroller (soldered on the Altium-designed Printed Circuit Board) through another USB port. This firmware (without going into the details or extras just yet) listens to the UART for GCODE which it then executes and effects using 3 Pulse Width Modulation outputs to 4 proprietary servomotors (the only uArm part which has not been (re)defined in this project). 4 analog inputs provide angle feedback to the firmware. The valve is strapped to VCC to save pins and the pump is driven with a GPIO by flipping the logical levels. The uARM (the name of the robotic arm used in this project) initializes to a position in the middle of its servomotor angle range. It can be controlled using GCODE from the UART to pick up objects using absolute, relative or polar coordinates (polar coordinates simplify the X and Y axis PIDs and are normalized to grads to represent the whole uArm range by all axes scaled by a +/- 100 range). It can then pick up a single selected class of common objects labeled from the COCO dataset (80 classes) and a bunch of machine learning goodies see software/jetson/fastmot/, using neural network detection feedback from a camera. It then places and drops the object to a predefined location and loops...

TODO if you want to use it with your own microcontroller (review presets before implementing your own!)

  • Add an #ifdef to identify your microcontroller pin PWM, ADC and GPIO in uArmPin.h in UArmForArduino (only necessary if your application does not use the same pinout)
  • If your microcontroller does not define timers, add it to the modified version of the Servo Arduino library with the slowmove extension by comparing it with the provided AVR (AtMega) implementation which was added (not necessary but recommended)
  • Use the grab() and drop() methods in pyuarm to complete the pick and place in the set_servos() process (only the fetch, the hardest part, is set in the main loop)
  • If you want the uArm to have perspective and grab objects, converting back from Polar(length, angle, height) back to Cartesian(x, y, z) (reuse functions in pyuarm) is recommended to match camera and uArm range coordinates exactly (the whole ranges were enabled, but not matched back with the initial camera position in cartesian coordinates)
  • Tune the initial position height to scale the camera view and register the range coordinates of the uArm and of the camera equally

Don't forget to review the documentation in the CLICK ME's below!

Documentation

The project timeline was obtained with the folowing command

$ git log --pretty=format:"%h %ad | %s %d [%an]" --date=short >log.txt

Project timeline

Reports

Compile code and documentation to website

To compile and deploy parts of previously commented code as a website on readthedocs or locally, click the link below. Note: Since the impact of this on my notes was minimal and the code commenting required was time-consuming, not all documentation will be displayed to the website.

Install documentation as website

Mechanics

The *.STL files can be 3D-printed

here

This has not been attempted as I would lack the time to assemble the parts. It is available though.

Simulation

The *.STL files can be converted to *.URDF for simulation using a physics engine like Gazebo (or displayed using RVIZ) in ROS Kinetic, all within Docker

see instructions in software/jetson/jetson-containers/README.md

If you add the Moveit plugins, simulation can run with the uARM in tandem. If you then add openai-gym to the ROS container, you can plug this environment to FERM, replacing the xArm by the uArm. This was plan C, which has not been completed, as focus shifted towards implementing plans A and B. I have only ran physical and simulation movements separately in ROS and put the plan aside for lack of time and points.

FERM

Electronics

The minimalistic Printed Circuit Board features an ESP32 as the motor-driving microcontroller. Altium design files are provided.

electronics/ folder

A standard ESP32-WROOM-32 module is the microcontroller. A CP2109 USB to serial chip is used to program it and transfer data from a Micro-USB connector. An unused SD card slot is available if more external memory is required. A MCP16311T-E/M step-down regulator taps 12 volts from the jack barrel connector to provide the 5 volts servomotors need to function. A fixed output Complementary Metal Oxide Semiconductor Low-Dropout regulator (TC1264) taps 5 volts from the USB connector to provide 3.3 volts for the other circuits. One Light Emitting Diode confirms that regulator provides the 3.3 volts. There is one GPIO-controllable LED and one push button plugged on another GPIO. Another push button is plugged to the EN pin for enabling the ESP32-WROOM-32 module.

Software

There is PC-compatible (Windows, MACOSX, Linux, Raspbian, other ARM flavors, etc.) software with drivers to program and deploy the environment for commanding everything from the Jetson (or computer). Firmware for the PCB (compatible with a number of architectures) is provided below.

firmware

The main code was tested on PC and Jetson for easier modular tests while programming. Code quality and reproducibility are hallmarks of this project.

uArm GCode-based Firmware in C++

The firmware is portable across Arduino boards (it runs on AVR, SAM, SAMD, NRF52, STM32F4, ESP32 and ESP32-S2 microcontrollers). Only pin definitions below need to be redefined in order to support your custom microcontroller.

here

Some presets have been defined for AVR, ESP32 and ESP32-S2. The script below automates the flashing process. software/jetson/install/flash_firmware_custom.sh

See software/arduino-1.8.13/portable/sketchbook/libraries/UArmForArduino/README.md for more explanations.

Portable and enhanced servomotor libraries for Arduino in C++

The firmware is portable across Arduino boards (it runs on AVR, SAM, SAMD, NRF52, STM32F4, ESP32 and ESP32-S2 microcontrollers). This is because the servomotors have been made portable for the original Arduino Servo library. In addition, the ESP32Servo library is automatically selected with the board manager; the above-named architectures will be automatically selected during this step. A slowmove extension was added to AVR, enabling movement easing with bicubic interpolation (shown by the *.gif above). See below for more explanations.

software/arduino-1.8.13/portable/sketchbook/libraries/Servo/readme.md and software/arduino-1.8.13/portable/sketchbook/libraries/ESP32Servo/README.md

ArduCAM Camarray or Raspberry Pi camera v2.1 (your choice, but the RPi cam is less expansive and requires less installs)

An automated installation procedure and seemless handling for the driver code, all compatible with V4L2 and Gstreamer frameworks, allowing faster, easier and interchangeable inference tests using images, videos, a few network streaming protocols, V4L2-supported cameras (MIPI, USB, etc), etc., all accessible using the same interface.

Custom uARM GCODE-based serial port controller in Python-3.7

A custom controller communicating with the uARM firmware using a GCODE protocol through a USB connection to the serial port provides grad-scaled absolute polar coordinate positioning for easy control. There is bicubic easing, a slowmove extension, calibration, movement recording and replay, etc.

Multi-threading and multi-process management

For faster and simpler parallel handling of the whole ecosystem, the main entrypoint process loop runs with parallel programs excluding the manager program: the main camera/inference loop, a PID controller for the X axis, a PID controller for the Y axis and the uARM control process. Camera input is optionally threaded in 4 ways (no threading, video get, video show and both).

Accelerated inference using TensorRT and Numba, deployable on Nvidia Jetson platforms

A platform featuring YOLOv4-mish-640, KLT optical flow tracking, camera motion compensation, a Kalman filter, data association (...), with instructions for training and evaluation and deployable inference on an Nvidia Jetson (Nano or AGX Xavier) using TensorRT and Numba.

Additional documentation and instructions

CLICK ME - Hardware prerequisites
Hardware prerequisites for the Jetson Nano
- Micro SD card with at least 16Gb of storage
- Ubuntu host PC* with SD card slot or USB SD card reader/writer
- Jetson Nano Dev Kit with micro USB power supply (at least 5V, 2A) or DC power supply (5V 4A)
- Full HD display with HDMI
- Keyboard and mouse
- Ethernet cable connected to the Internet, or USB Wi-Fi adapter
- Either an Arducam camera array hat, or the Raspberry Pi camera v2.1 (recommended)
  • You can use a Windows host PC to flash the microSD card instead, however this tutorial uses Ubuntu as it’s a simpler process. See NVIDIA’s guide for a Windows option.
CLICK ME - Software prerequisites (all installed automatically)
  • CUDA>=10
  • cuDNN>=7
  • TensorRT>=7
  • OpenCV>=3.3
  • PyCuda
  • Numpy>=1.15
  • Scipy>=1.5
  • TensorFlow<2.0 (for SSD support)
  • Numba==0.48
  • cython-bbox
  • pyserial
CLICK ME - Hardware instructions for the Jetson Nano Devkit B01 (previous board revision also shown)
  • Insert the microSD card into the appropriate slot
  • Connect the display and USB keyboard /mouse and Ethernet cable.
  • Depending on the power supply you want to use, you may have to add or remove the jumper for power selection:
  • If using a jack, the jumper must be set.
  • If using USB, the jumper must be off.
  • Plug in the power supply. The green LED (D53) close to the micro USB port should turn green, and the display should show the NVIDIA logo before booting begins.
  • You will want to install a jumper on J48 to power with the jack barrel
CLICK ME - Installation From Scratch Instructions for Linux (skip down to "Download and install the live *.iso" if installing Linux is needed and get back here just after the install)
Dependencies
None which aren't covered by this guide.
Update apt repository package references (ensure system will be up to date)
$ sudo apt update
Install git
$ sudo apt install -y git
Create base workspace directory
$ mkdir -p ~/workspace
Go to base workspace directory
$ cd ~/workspace
Download repository code
$ git clone https://github.com/abstractguy/TSO_project.git
Go to TSO_project's central unit software path
$ cd TSO_project/software/jetson
CLICK ME - Download and install the live *.iso of Ubuntu 18.04.5 LTS for x86_64 (from here https://unetbootin.github.io)
If running Linux already:
$ sudo -H bash install/install_unetbootin.sh
Otherwise if running Windows, download and install the live *.iso of Ubuntu 18.04.5 LTS for x86_64 from here: https://unetbootin.github.io

Update and reboot (redo skipped first steps if you're starting on a newly installed system)

Start with a fresh install of Ubuntu 18.04.5 LTS with automatic updates and proprietary drivers activated (do not activate secure boot through the USB install method as this can be done later)

Enable Hyper-V in the UEFI boot menu for virtual machine support when rebooting
Download Windows 10 Enterprise Edition for VirtualBox (https://developer.microsoft.com/en-us/windows/downloads/virtual-machines/)
Install VirtualBox 6.1.22 for running Windows 10 programs
$ cd ~/workspace/TSO_project/software/jetson && bash install/install_virtualbox.sh
Install the automatically downloaded extension pack by clicking on it
You can now use the Windows 10 Enterprise Edition to run Windows 10 applications from a Linux host, like Altium for PCB developement
Install Nvidia components for JetPack 4.4
$ sudo -H bash ~/workspace/TSO_project/software/jetson/install/install_jetpack_prerequisites.sh

After the prescribed reboot, review software/jetson/install/INSTALL_DOCKER.md and go through the entire procedure

Install Python3 development prerequisites

Install miniconda3
$ cd && bash ~/workspace/TSO_project/software/jetson/install/install_conda.sh
Install conda environment
$ cd ~/workspace/TSO_project/software/jetson && bash install/install_conda_environment.sh
CLICK ME - Flash uArm firmware
Flash the uARM with the custom firmware
$ cd ~/workspace/jetson && bash install/flash_uarm_custom.sh
Or flash the uARM with the old firmware
$ cd ~/workspace/jetson && bash install/flash_uarm.sh
If flashing the uARM with the old firmware, you must recalibrate (verify the correct tty port!)
When awaiting a D7 button press, place the pump directly on the table, the uARM facing the center of its X axis
When awaiting a D4 button press, place the pump directly on the table, the uARM aligned by 45 degrees (pi/4 rad) from the clockwise extremum
$ sudo /opt/conda/envs/school/bin/python3 -m pyuarm.tools.calibration.calibrate --port /dev/ttyUSB0
CLICK ME - Jetson Nano or AGX Xavier Devkit install instructions (JetPack-4.4)

If using the Nvidia Jetson AGX Xavier Devkit, sign in to install Nvidia's sdkmanager from https://developer.nvidia.com/nvsdk-manager

Else, if using the Nvidia Jetson Nano Devkit, flash the Micro-SD card and then plug the Micro-SD card in the device's slot

$ cd software/jetson && bash install/install_jetson_nano_sd_card.sh

Either follow the instructions on the monitor or type this below, after plugging in a mouse, a keyboard, a HDMI screen and the network connector type you have chosen

$ screen /dev/ttyACM0

If it can't SSH into the Jetson, you have skipped the above step; redo it and the install will resume after

Create workspace directory on the Jetson (from the x86_64)
$ ssh sam@192.168.55.1 'mkdir -p ~/workspace'
Prepare directories on the Jetson (from the x86_64)
$ scp -r ~/workspace/TSO_project/software/jetson sam@192.168.55.1:/home/sam/workspace
Install Jetson prerequisites (replace <JETSON_PASSWORD> with your Jetson user's password)
$ ssh -t sam@192.168.55.1 'cd ~/workspace/jetson && bash install/install_jetson.sh <JETSON_PASSWORD>'
CLICK ME - Docker install for Ubuntu 18.04 on Jetson (not necessary)

Make sure to have nvidia-docker installed. The image requires an NVIDIA Driver version >= 450. Build and run the docker image:

$ cd ~/workspace/jetson
$ docker build -t project:latest .
$ docker run --rm --gpus all -it -v /tmp/.X11-unix:/tmp/.X11-unix -e DISPLAY=unix$DISPLAY project:latest
CLICK ME - Inference

Description

The use of FastMOT as a custom multiple object tracker (here post-processed for single objects) implements:

  • YOLO detector
  • SSD detector
  • Deep SORT + OSNet ReID
  • KLT optical flow tracking
  • Camera motion compensation
  • Support Scaled-YOLOv4 models
  • DIoU-NMS for YOLO (+1% MOTA)
  • Docker container provided on Ubuntu 18.04

Deep learning models are usually the bottleneck in Deep SORT, making Deep SORT unusable for real-time applications. FastMOT significantly speeds up the entire system to run in real-time even on Jetson. It also provides enough flexibility to tune the speed-accuracy tradeoff without a lightweight model.

To achieve faster processing, FastMOT only runs the detector and feature extractor every N frames. Optical flow is used to fill in the gaps. YOLOv4 was trained on CrowdHuman (82% mAP@0.5) while SSD's are pretrained COCO models from TensorFlow. OSNet outperforms the original feature extractor in Deep SORT. FastMOT also re-identifies targets that moved out of frame and will keep the same IDs.

Both detector and feature extractor use the TensorRT backend and perform asynchronous inference. In addition, most algorithms, including Kalman filter, optical flow, and data association, are optimized using Numba.

Performance

Results on MOT20 train set

Detector Skip MOTA MOTP IDF1 IDS MT ML
N = 1 63.3% 72.8% 54.2% 5821 867 261
N = 5 61.4% 72.2% 55.7% 4517 778 302

FPS on MOT17 sequences

Sequence Density FPS
MOT17-13 5 - 30 38
MOT17-04 30 - 50 22
MOT17-03 50 - 80 15

Performance is evaluated with YOLOv4 using py-motmetrics. Note that neither YOLOv4 nor OSNet was trained or finetuned on the MOT20 dataset, so train set results should generalize well. FPS results are obtained on Jetson Xavier NX.

FastMOT has MOTA scores close to state-of-the-art trackers from the MOT Challenge. Tracking speed can reach up to 38 FPS depending on the number of objects. On a desktop CPU/GPU, FPS is expected to be much higher. More lightweight models can be used to achieve better tradeoff.

Uses vanilla COCO-pretrained weights to make predictions on images, but you can train your own YOLOv4. The table below displays the inference times when using images scaled to 608x608 as inputs. The taken YOLOv4 measurements show the inference time of this implementation on Nvidia Jetson AGX Xavier.

Backbone GPU FPS (max smoothed) mAP@0.5
YOLOv4-608 AGX Xavier 34 65.7
YOLOv4-mish-640 AGX Xavier 25 67.9
  • IoU (intersect over union) - average intersect over union of objects and detections for a certain threshold = 0.24

  • mAP (mean average precision) - mean value of average precisions for each class, where average precision is average value of 11 points on PR-curve for each possible threshold (each probability of detection) for the same class (Precision-Recall in terms of PascalVOC, where Precision=TP/(TP+FP) and Recall=TP/(TP+FN) ), page-11: http://homepages.inf.ed.ac.uk/ckiw/postscript/ijcv_voc09.pdf

mAP is default metric of precision in the PascalVOC competition, this is the same as AP50 metric in the MS COCO competition. In terms of Wiki, indicators Precision and Recall have a slightly different meaning than in the PascalVOC competition, but IoU always has the same meaning.

precision_recall_iou

YOLOv4x-mish-640

YOLOv4-608

The training results look like this

Visualize with tensorboard.

$ tensorboard --logdir=runs

CLICK ME - Pre-trained models

There are weights-file for different cfg-files (trained for MS COCO dataset):

FPS on RTX 2070 (R) and Tesla V100 (V):

Yolo v3 models

Yolo v2 models

More options can be configured in cfg/mot.json

  • Set resolution and frame_rate that corresponds to the source data or camera configuration (optional). They are required for image sequence, camera sources, and MOT Challenge evaluation. List all configurations for your USB/CSI camera:
    $ v4l2-ctl -d /dev/video0 --list-formats-ext
  • To change detector, modify detector_type. This can be either YOLO or SSD
  • To change classes, set class_ids under the correct detector. Default class is 1, which corresponds to person
  • To swap model, modify model under a detector. For SSD, you can choose from SSDInceptionV2, SSDMobileNetV1, or SSDMobileNetV2
  • Note that with SSD, the detector splits a frame into tiles and processes them in batches for the best accuracy. Change tiling_grid to [2, 2], [2, 1], or [1, 1] if a smaller batch size is preferred
  • If more accuracy is desired and processing power is not an issue, reduce detector_frame_skip. Similarly, increase detector_frame_skip to speed up tracking at the cost of accuracy. You may also want to change max_age such that max_age × detector_frame_skip ≈ 30
CLICK ME - Track custom classes

FastMOT supports multi-class tracking and can be easily extended to custom classes (e.g. vehicle). You need to train both YOLO and a ReID model on your object classes. Check Darknet for training YOLO and fast-reid for training ReID. After training, convert the model to ONNX format and place it in fastmot/models. To convert YOLO to ONNX, use tensorrt_demos to be compatible with the TensorRT YOLO plugins.

Add custom YOLOv3/v4

  1. Subclass YOLO like here: https://github.com/GeekAlexis/FastMOT/blob/4e946b85381ad807d5456f2ad57d1274d0e72f3d/fastmot/models/yolo.py#L94
    ENGINE_PATH: path to TensorRT engine (converted at runtime)
    MODEL_PATH: path to ONNX model
    NUM_CLASSES: total number of classes
    LETTERBOX: keep aspect ratio when resizing
               For YOLOv4-csp/YOLOv4x-mish, set to True
    NEW_COORDS: new_coords parameter for each yolo layer
                For YOLOv4-csp/YOLOv4x-mish, set to True
    INPUT_SHAPE: input size in the format "(channel, height, width)"
    LAYER_FACTORS: scale factors with respect to the input size for each yolo layer
                   For YOLOv4/YOLOv4-csp/YOLOv4x-mish, set to [8, 16, 32]
                   For YOLOv3, set to [32, 16, 8]
                   For YOLOv4-tiny/YOLOv3-tiny, set to [32, 16]
    SCALES: scale_x_y parameter for each yolo layer
            For YOLOv4-csp/YOLOv4x-mish, set to [2.0, 2.0, 2.0]
            For YOLOv4, set to [1.2, 1.1, 1.05]
            For YOLOv4-tiny, set to [1.05, 1.05]
            For YOLOv3, set to [1., 1., 1.]
            For YOLOv3-tiny, set to [1., 1.]
    ANCHORS: anchors grouped by each yolo layer
    
    Note that anchors may not follow the same order in the Darknet cfg file. You need to mask out the anchors for each yolo layer using the indices in mask in Darknet cfg. Unlike YOLOv4, the anchors are usually in reverse for YOLOv3 and tiny
  2. Change class labels here to your object classes
  3. Modify cfg/mot.json: set model in yolo_detector to the added Python class and set class_ids you want to detect. You may want to play with conf_thresh based on the accuracy of your model

Add custom ReID

  1. Subclass ReID like here: https://github.com/GeekAlexis/FastMOT/blob/aa707888e39d59540bb70799c7b97c58851662ee/fastmot/models/reid.py#L51
    ENGINE_PATH: path to TensorRT engine (converted at runtime)
    MODEL_PATH: path to ONNX model
    INPUT_SHAPE: input size in the format "(channel, height, width)"
    OUTPUT_LAYOUT: feature dimension output by the model (e.g. 512)
    METRIC: distance metric used to match features ('euclidean' or 'cosine')
    
  2. Modify cfg/mot.json: set model in feature_extractor to the added Python class. You may want to play with max_feat_cost and max_reid_cost - float values from 0 to 2, based on the accuracy of your model
CLICK ME - Last steps
Download VOC dataset for INT8 calibration

Only required if you want to use SSD (not in this case)

$ install/download_data.sh
Download models

This includes both pretrained OSNet, SSD, and custom YOLOv4 WEIGHTS/ONNX models

$ cd ~/workspace/jetson && bash install/download_models.sh
Convert yolov4x-mish-640 from Darknet *.weights to ONNX *.onnx
$ #cd ~/workspace/jetson && python3 utils/convert_DarkNet_to_ONNX.py --darknet-weights ./fastmot/models/yolov4.weights --onnx-weights ./fastmot/models/yolov4.onnx --cfg ./utils/cfg/yolov4.cfg --image-shape 608 608 --names ./utils/cfg/coco.names --batch-size 1 --add-plugins
$ cd ~/workspace/jetson && python3 utils/yolo_to_onnx.py --model fastmot/models/yolov4x-mish-640 --category_num 80
On your TV, open a terminal and run everything to convert yolov4x-mish-640 from ONNX *.onnx to TensorRT *.trt and run inference
$ cd ~/workspace/jetson && sudo python3 main.py --test-type nano
$ cd ~/workspace/jetson && sudo python3 main.py --test-type xavier
$ cd ~/workspace/TSO_project/software/jetson && sudo /opt/conda/envs/school/bin/python3 main.py --test-type x86_64

Multimedia testing usage

  • USB webcam:
    $ sudo python3 main.py --input_uri /dev/video0
  • MIPI CSI camera:
    $ sudo python3 main.py --input_uri csi://0
  • RTSP stream: On host:
    $ #ffmpeg -re -loop -1 -i /dev/video0 -c copy -f rtsp -rtsp_transport tcp rtsp://localhost:1337/live.sdp
    $ vlc v4l2:///dev/video0 --sout '#transcode {vcodec=h264,acodec=mp3,samplerate=44100}:std{access=http,mux=ffmpeg{mux=h264},dst=127.0.0.1:1337/live.sdp}'
    On device:
    $ #sudo python3 main.py --input_uri rtsp://<user>:<password>@<ip>:<port>/<path>
    $ sudo python3 main.py --input_uri rtsp://samuel@192.168.55.100:1337/live.sdp
  • HTTP stream:
    $ sudo python3 main.py --input_uri http://<user>:<password>@<ip>:<port>/<path>
  • Image sequence:
    $ sudo python3 main.py --input_uri img_%06d.jpg
  • Video file:
    $ sudo python3 main.py --input_uri video.mp4
  • Use --help for help and --output_uri to save output
  • To disable the GStreamer backend, set WITH_GSTREAMER = False here
  • Note that the first run will be slow due to Numba compilation

Other README.md in other directories

Credit

GeekAlexis/FastMOT

[FastMOT inference]

FastReID

[FastReID]

AlexeyAB/darknet

[Training YOLOv4 and stats]

jktjung-avt/tensorrt_demos

[Conversion functions]

ceccocats/tkDNN

[Performance graphics]

Camera Demonstration

[Camera Demonstration]

Convert webpages to markdown for viewing on Github

[HTML-to-Markdown]

STL to GIF

[STL to GIF]

Reference papers

[Yolov3 paper]

[Yolov4 paper]

[SPP paper]

[CSPNet paper]

[Deep SORT with Deep Association paper]

[FastReID]

[Omni-Scale Feature Learning for Person Re-Identification]

[Learning Generalisable Omni-Scale Representations for Person Re-Identification]

[TorchReID]

[KLT Tracking]

[Kalman Filtering]

About

Pick and place using a camera.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors