| | |
| | | # Yolo-v3 and Yolo-v2 for Windows and Linux |
| | | ### (neural network for object detection) |
| | | ### (neural network for object detection) - Tensor Cores can be used on [Linux](https://github.com/AlexeyAB/darknet#how-to-compile-on-linux) and [Windows](https://github.com/AlexeyAB/darknet#how-to-compile-on-windows) |
| | | |
| | | [](https://circleci.com/gh/AlexeyAB/darknet) |
| | | |
| | |
| | | |  |  mAP (AP50) https://pjreddie.com/media/files/papers/YOLOv3.pdf | |
| | | |---|---| |
| | | |
| | | * YOLOv3-spp (is not indicated) better than YOLOv3 - mAP = 60.6%, FPS = 20: https://pjreddie.com/darknet/yolo/ |
| | | * Yolo v3 source chart for the RetinaNet on MS COCO got from Table 1 (e): https://arxiv.org/pdf/1708.02002.pdf |
| | | * Yolo v2 on Pascal VOC 2007: https://hsto.org/files/a24/21e/068/a2421e0689fb43f08584de9d44c2215f.jpg |
| | | * Yolo v2 on Pascal VOC 2012 (comp4): https://hsto.org/files/3a6/fdf/b53/3a6fdfb533f34cee9b52bdd9bb0b19d9.jpg |
| | |
| | | * **GPU with CC >= 3.0**: https://en.wikipedia.org/wiki/CUDA#GPUs_supported |
| | | |
| | | ##### Pre-trained models for different cfg-files can be downloaded from (smaller -> faster & lower quality): |
| | | * `yolov3-spp.cfg` (240 MB COCO **Yolo v3**) - requires 4 GB GPU-RAM: https://pjreddie.com/media/files/yolov3-spp.weights |
| | | * `yolov3.cfg` (236 MB COCO **Yolo v3**) - requires 4 GB GPU-RAM: https://pjreddie.com/media/files/yolov3.weights |
| | | * `yolov3-tiny.cfg` (34 MB COCO **Yolo v3 tiny**) - requires 1 GB GPU-RAM: https://pjreddie.com/media/files/yolov3-tiny.weights |
| | | * `yolov2.cfg` (194 MB COCO Yolo v2) - requires 4 GB GPU-RAM: https://pjreddie.com/media/files/yolov2.weights |
| | |
| | | * `DEBUG=1` to bould debug version of Yolo |
| | | * `OPENMP=1` to build with OpenMP support to accelerate Yolo by using multi-core CPU |
| | | * `LIBSO=1` to build a library `darknet.so` and binary runable file `uselib` that uses this library. Or you can try to run so `LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./uselib test.mp4` How to use this SO-library from your own code - you can look at C++ example: https://github.com/AlexeyAB/darknet/blob/master/src/yolo_console_dll.cpp |
| | | |
| | | or use in such a way: `LD_LIBRARY_PATH=./:$LD_LIBRARY_PATH ./uselib data/coco.names cfg/yolov3.cfg yolov3.weights test.mp4` |
| | | |
| | | ### How to compile on Windows: |
| | | |
| | |
| | | It will create `.txt`-file for each `.jpg`-image-file - in the same directory and with the same name, but with `.txt`-extension, and put to file: object number and object coordinates on this image, for each object in new line: `<object-class> <x> <y> <width> <height>` |
| | | |
| | | Where: |
| | | * `<object-class>` - integer number of object from `0` to `(classes-1)` |
| | | * `<object-class>` - integer object number from `0` to `(classes-1)` |
| | | * `<x> <y> <width> <height>` - float values relative to width and height of image, it can be equal from (0.0 to 1.0] |
| | | * for example: `<x> = <absolute_x> / <image_width>` or `<height> = <absolute_height> / <image_height>` |
| | | * atention: `<x> <y>` - are center of rectangle (are not top-left corner) |
| | |
| | | |
| | | **Note:** If you changed width= or height= in your cfg-file, then new width and height must be divisible by 32. |
| | | |
| | | **Note:** After training use such command for detection: `darknet.exe detector test data/obj.data yolo-obj.cfg yolo-obj_8000.weights` |
| | | |
| | | **Note:** if error `Out of memory` occurs then in `.cfg`-file you should increase `subdivisions=16`, 32 or 64: [link](https://github.com/AlexeyAB/darknet/blob/0039fd26786ab5f71d5af725fc18b3f521e7acfd/cfg/yolov3.cfg#L4) |
| | | |
| | | ### How to train tiny-yolo (to detect your custom objects): |
| | | |
| | | Do all the same steps as for the full yolo model as described above. With the exception of: |
| | |
| | | |
| | | * check that each object are mandatory labeled in your dataset - no one object in your data set should not be without label. In the most training issues - there are wrong labels in your dataset (got labels by using some conversion script, marked with a third-party tool, ...). Always check your dataset by using: https://github.com/AlexeyAB/Yolo_mark |
| | | |
| | | * desirable that your training dataset include images with objects at diffrent: scales, rotations, lightings, from different sides, on different backgrounds - you should preferably have 2000 images for each class or more |
| | | * desirable that your training dataset include images with objects at diffrent: scales, rotations, lightings, from different sides, on different backgrounds - you should preferably have 2000 different images for each class or more, and you should train `2000*classes` iterations or more |
| | | |
| | | * desirable that your training dataset include images with non-labeled objects that you do not want to detect - negative samples without bounded box (empty `.txt` files) - use as many images of negative samples as there are images with objects |
| | | |
| | | * for training with a large number of objects in each image, add the parameter `max=200` or higher value in the last layer [region] in your cfg-file |
| | | * for training with a large number of objects in each image, add the parameter `max=200` or higher value in the last `[yolo]`-layer or `[region]`-layer in your cfg-file (the global maximum number of objects that can be detected by YoloV3 is `0,0615234375*(width*height)` where are width and height are parameters from `[net]` section in cfg-file) |
| | | |
| | | * for training for small objects - set `layers = -1, 11` instead of https://github.com/AlexeyAB/darknet/blob/6390a5a2ab61a0bdf6f1a9a6b4a739c16b36e0d7/cfg/yolov3.cfg#L720 |
| | | and set `stride=4` instead of https://github.com/AlexeyAB/darknet/blob/6390a5a2ab61a0bdf6f1a9a6b4a739c16b36e0d7/cfg/yolov3.cfg#L717 |
| | | |
| | | * If you train the model to distinguish Left and Right objects as separate classes (left/right hand, left/right-turn on road signs, ...) then for disabling flip data augmentation - add `flip=0` here: https://github.com/AlexeyAB/darknet/blob/3d2d0a7c98dbc8923d9ff705b81ff4f7940ea6ff/cfg/yolov3.cfg#L17 |
| | | |
| | | * General rule - your training dataset should include such a set of relative sizes of objects that you want to detect: |
| | | |
| | | * `train_network_width * train_obj_width / train_image_width ~= detection_network_width * detection_obj_width / detection_image_width` |
| | |
| | | 2. To use Yolo as DLL-file in your C++ console application - open in MSVS2015 file `build\darknet\yolo_console_dll.sln`, set **x64** and **Release**, and do the: Build -> Build yolo_console_dll |
| | | |
| | | * you can run your console application from Windows Explorer `build\darknet\x64\yolo_console_dll.exe` |
| | | **use this command**: `yolo_console_dll.exe data/coco.names yolov3.cfg yolov3.weights test.mp4` |
| | | |
| | | * or you can run from MSVS2015 (before this - you should copy 2 files `yolo-voc.cfg` and `yolo-voc.weights` to the directory `build\darknet\` ) |
| | | * after launching your console application and entering the image file name - you will see info for each object: |
| | | `<obj_id> <left_x> <top_y> <width> <height> <probability>` |