/yoso

You Only Show Once

Primary LanguagePythonDo What The F*ck You Want To Public LicenseWTFPL

You Only Show Once

YOSO is a GUI application providing a means of creating training data set for YOLO, a state-of-the-art, real-time object detection system. It can be useful for other computer vision systems, because I believe that YOLO's label file format is quite a good and flexible choice.

Requirements

YOSO is written in Python 3 with the PyQt5 application framework. If you have Python 3 and PyQt5 (and subsequently Qt5 itself) installed, you can run YOSO by simply executing python3 yoso.py. Alternatively you can install YOSO with the pip package manager (which can be called pip3 for Python 3).

Data Directory Structure

YOSO should be pointed to a data directory having this structure:

data
|\_ classes
|   \_ "0 - roy.jpg"
|   \_ "1 - poli.jpg"
|   \_ ...
|\_ images
|   |\_ poli
|   |   \_ poli-001.jpg
|   |   \_ ...
|   |   \_ poli-009.jpg
|   |   \_ ...
|   |\_ roy
|   |   \_ roy-1.jpg
|   |   \_ ...
|   |   \_ roy-99.jpg
|   |   \_ ...
|   \_ ...
 \_ labels
    |\_ poli
    |   \_ poli-001.jpg.txt
    |   \_ ...
    |   \_ poli-009.jpg.txt
    |   \_ ...
    |\_ roy
    |   \_ roy-1.jpg.txt
    |   \_ ...
    |   \_ roy-99.jpg.txt
    |   \_ ...
     \_ ...

data/classes must contain JPEG files describing object classes in format: <class number> - <short description>.jpg

data/images has arbitrary structure and contains JPEG or PNG images (*.jpg, or *.jpeg, *.png). This is a training set of hundreds or thousands of images.

data/labels is managed by YOSO and has the same structure as data/images. All missed subdirectories will be created automatically. Note that label files create by YOSO have different naming scheme, so you might have to update Darknet sources.

Controls

  • To add a bounding box select a region with the mouse pointer. Newly added bounding box will have object class currently selected in the list on the right.
  • To delete a bounding box double click on it.
  • To change object class drag an item from the list on the right and drop it into existing bounding box.

Whenever a bounding box is added, deleted or changed, the result is automatically saved.

Screenshots

screenshots/yoso-roy-1.png

Video

https://www.youtube.com/watch?v=upPbaXq8wm0