autoAnnoter: Its a tool to auto annotate data using a exisiting model
- partition_dataset.py
- txt_to_xml.py
- xml_to_txt.py
- xml_neg_annotation.py
- find_oneClass_from_xml.py
- vis_xml.py
- vis_txt.py
- create_yolo.py
- yolo_to_kitti.py
- yolo_to_json.py
- split_data.py
Augument your annotation files (Object detection) PASCAL VOC (XML) or YOLO (TXT)
We can auto annotate any class on our data using new OWL-ViT model.
No need of any pre-trained or any custom model to auto-annotate.
OWL-ViT is an open-vocabulary object detector. It means that it can detect objects in images based on free-text queries without the need to fine-tune the model on labeled datasets.
Show
-
(12-06-2023) Grounding DINO 🦕 auto annotate any class
-
(01-06-2023) YOLO-NAS Auto Annotation
- Auto Annotate using YOLO-NAS Model
-
(25-04-2023): We can remove any classes from auto annotation. So that we can create new set of dataset using existing model. Example:
- If we need to create a people detection model. We can create new dataset from existing COCO model.
- If I need to create a dataset to train a model to detect helmet, shoe and person. But I can't annotate big dataset. But I have a model to detect Helmet, Person and other classes as well. But I can use this new feature (Remove Classes from Auto Annotation) only annotate Helmet and Person. This will reduce 2/3 of my work. After this I only need to annotate Shoe.
-
(24-04-2023): Added visualization tool and fixed issue with XML to TXT conversion.
- xml_to_txt.py (Updated)
- Fixed issue with, when unexpected format of xml annotation came, position of xmax and ymin maybe change, now it can handle any bounding box format.
- Added XML and TXT annotation visualization tool
- vis_xml.py : to visulise xml (Pascal VOC) annotation format
- vis_txt.py : to visulise txt (YOLO) annotation format
- xml_to_txt.py (Updated)
-
(03-02-2023) YOLOv8 Auto Annotation
- Auto Annotate using YOLOv8 Model
-
(02-11-2022) Added tools to this repository, that can help you to setup your Dataset for the Training.
- partition_dataset.py : Partition your Dataset (XML & TXT & Images) into Train and Test in ratio
- txt_to_xml.py : Convert your TXT Annotation files into XML Format
- xml_to_txt.py : Convert your XML Annotation files into TXT Format
- xml_neg_annotation.py : Annoatate your Negative Dataset
- find_oneClass_from_xml.py : To filter your PASCAL VOC annotaion XML file based on class name
git clone https://github.com/naseemap47/autoAnnoter.git
Recommended:
conda create -n auto python=3.9 -y
conda activate auto
conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=11.3 -c pytorch -y
pip install -r requirements.txt
cd autoAnnoter/
pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 torchaudio==0.12.1 --extra-index-url https://download.pytorch.org/whl/cu113
pip install -r requirements.txt
Grounding DINO is text to detection model. So we need to give text prompt that correspond to respective class.
OWL-ViT is an open-vocabulary object detector. It means that it can detect objects in images based on free-text queries without the need to fine-tune the model on labeled datasets..
To do this, we needs to create prompt.json
JSON keys should be text prompt to Grounding DINO model.
But the values for the each keys should be class names for that detection.
Here I need to train one custom model that can predict high quality cap and low quality cap.
So for this I give my Grounding DINO/OWL-ViT text prompt as red cap and yellow caps, to annotate my high quality cap and low quality cap classes.
I give this example to show you that, some times we need to give Grounding DINO/OWL-ViT text prompt as more elaborate way, like my example.
{
"red caps": "high quality cap",
"yellow caps": "low quality cap"
}
Args
-i
, --dataset
: path to dataset/dir
-p
, --prompt
: path to prompt.json
-bt
, --box_thld
: bounding box Threshold
To auto-annotate OWL-ViT model, we need to give text prompt that correspond to respective class.
Example:
python3 owlvit.py --dataset images/ --prompt prompt.json
Args
-i
, --dataset
: path to dataset/dir
-p
, --prompt
: path to prompt.json
-bt
, --box_thld
: Box Threshold
-tt
, --txt_thld
: text threshold
To auto-annotate Grounding DINO model, we need to give text prompt that correspond to respective class.
Example:
python3 dino.py --dataset images/ --prompt prompt.json
Args
-x
, --xml
: to annotate in XML format
-t
, --txt
: to annotate in (.txt) format
-i
, --dataset
: path to dataset/dir
-c
, --classes
: path to classes.txt
-m
, --model
: path to ONNX model
-s
, --size
: Size of image used to train the model
-conf
, --confidence
: Model detection Confidence (0<confidence<1)
-r
, --remove
: List of classes need to remove
-k
, --keep
: List of classes need to keep
To .xml
python3 autoAnnot.py --xml --dataset images/ --classes classes.txt \
--model models/model.onnx --size 224 --confidence 0.75
To .txt
python3 autoAnnot.py --txt --dataset images/ --classes classes.txt \
--model models/model.onnx --size 224 --confidence 0.75
To Remove classes from auto-annotation
python3 autoAnnot.py --txt --dataset images/ --classes classes.txt \
--model models/model.onnx --size 224 --confidence 0.75 \
--remove 'person' 'car
To Keep classes from auto-annotation
python3 autoAnnot.py --txt --dataset images/ --classes classes.txt \
--model models/model.onnx --size 224 --confidence 0.75 \
--keep 'person' 'car
Args
-i
, --dataset
: path to dataset/dir
-mt
, --model_type
: Choose YOLO Model "YOLOv7 or YOLOv8"
-m
, --model
: path to best.pt (YOLO) model
-conf
, --confidence
: Model detection Confidence (0<confidence<1)
-r
, --remove
: List of classes need to remove
-k
, --keep
: List of classes need to keep
for YOLO-NAS Model
-t
, --type
: Choose YOLO-NAS model type
example: yolo_nas_s
, yolo_nas_m
, yolo_nas_l
-n
, --num
: number of classes that model trained on
python3 autoAnotYolo.py --dataset dataset/images --model_type yolov7 \
--model runs/train/weights/best.pt --confidence 0.8
- To Remove classes from auto-annotation
python3 autoAnotYolo.py --dataset dataset/images --model_type yolov7 \
--model runs/train/weights/best.pt --confidence 0.8 \
--remove 'bus'
- To Keep classes from auto-annotation
python3 autoAnotYolo.py --dataset dataset/images --model_type yolov7 \
--model runs/train/weights/best.pt --confidence 0.8 \
--keep 'bus'
python3 autoAnotYolo.py --dataset dataset/images --model_type yolov8 \
--model runs/train/weights/best.pt --confidence 0.8
- To Remove classes from auto-annotation
python3 autoAnotYolo.py --dataset dataset/images --model_type yolov8 \
--model runs/train/weights/best.pt --confidence 0.8 \
--remove 'elephant' 'cat' 'bear'
- To Keep classes from auto-annotation
python3 autoAnotYolo.py --dataset dataset/images --model_type yolov8 \
--model runs/train/weights/best.pt --confidence 0.8 \
--keep 'cat'
python3 autoAnotYolo.py --dataset dataset/images --model_type yolonas \
--model runs/train/weights/best.pt --type yolo_nas_s \
--num 8 --confidence 0.8
python3 autoAnotYolo.py --dataset dataset/images --model_type yolonas \
--model coco --type yolo_nas_s \
--confidence 0.8
- To Remove classes from auto-annotation
python3 autoAnotYolo.py --dataset dataset/images --model_type yolonas \
--model runs/train/weights/best.pt --type yolo_nas_s \
--num 80 --confidence 0.8 \
--remove 'car'
- To Keep classes from auto-annotation
python3 autoAnotYolo.py --dataset dataset/images --model_type yolonas \
--model runs/train/weights/best.pt --type yolo_nas_s \
--num 32 --confidence 0.8 \
--keep 'car'