cvat-ai / cvat

Annotate better with CVAT, the industry-leading data engine for machine learning. Used and trusted by teams at any scale, for data of any scale.
https://cvat.ai
MIT License
12.2k stars 2.95k forks source link

Select all unlabeled pixels #1478

Open yanmu2017 opened 4 years ago

yanmu2017 commented 4 years ago

Thanks for the very nice tool for annotation.

While I am labeling using polygon for segmentation, I am wondering if there exists a feature to "select all unlabelled pixels" in an image. From my experience, it will reduce my clicking for about 40%.

For example, assume I am labeling an image with a cat and a dog in a field of grass. So there are only three classes in this image: cat, dog and grass. After labeling the cat and dog, all the remaining unlabelled pixels belong to grass. It would be very helpful if I can select all pixels in the image that have not been labelled to any other classes. With this feature it would be very easy to label the class 'grass'.

Dogs_Cats_Kittens

The above feature can be extended to select all unlabelled pixels in a chosen area, instead of only from the whole image. For example, if part of an image has only cat, dog and grass, as in the previous example. It would be helpful if I can choose that area with grass, cat and dog and select all unlabelled pixels and label them as grass.

forest

Does such feature already exist? Otherwise does it make sense to add it?

zhiltsov-max commented 4 years ago

Hi, thanks for an interesting idea! You're right that there is no such a feature.

While there is no fully-featured support for masks, you can try to improve your workflow by:

As long as you are exporting in Mask format, you will obtain labelmap.txt file, in which then you can just rename "background" class to "grass". If you're exporting in COCO format, then occluded areas will be dropped from segmentation field of backward objects. Again, then you can rename corresponding class in categories.

yanmu2017 commented 4 years ago

Thanks for the reply and tips.

I have already been using the first tip to leave all grass pixels as labelled, but that works only for the whole image.

The second tip is interesting for the case when I only want apply to part of an image. I have tested it with Mask Zip format and found for overlapped labelled areas, the objects labelled earlier are occluded. Thus if I label the background grass class first, I can label other objects on top of it. (A related question here is that it seems I cannot change the order of the list of labelled objects. This could be useful to choose which objects to be occluded eventually.)

Even though the above tips can solve the problem, it would be really nice to have this feature if its implementation is not that difficult. That will lead to a cleaner solution and does not need any post-processing of labels.

zhiltsov-max commented 4 years ago

A related question here is that it seems I cannot change the order of the list of labelled objects.

You can enable z_order for a task to do this.