Detecção de Objetos - edgebr/huawei-smart-cities-wiki GitHub Wiki
TensorFlow Object Detection API
A API de Detecção de Objetos do Tensorflow dispõe de vários modelos pré-treinados, como efficientdet
e ssd_mobilenet_v2_fpnlite
.
- Utilizamos a versão TF2, cujo passo-a-passo de instalação encontra-se aqui.
- Os modelos pré-treinados encontram-se aqui.
- Nosso script de treinamento: ai/training/tfod/main.py
- CLI para treinamento:
python main.py
Configuração
tfod/config.py
...
TRAIN_IMAGES_DIR = "../data/raw/Images/"
TRAIN_ANNOTS_DIR = "../data/raw/Annotations/"
ANNOTATION_PATTERN = "xywh" # YOLO format
HAS_TEST_FOLDER = False
TEST_IMAGES_DIR = TRAIN_IMAGES_DIR
TEST_ANNOTS_DIR = TRAIN_ANNOTS_DIR
LABELMAP_PATH = "labelmap.pbtxt"
...
PRETRAINED_MODEL = "models/ssd_mobilenet_v2_fpnlite_320x320_coco17_tpu-8"
CONFIG_PATH = os.path.join(PRETRAINED_MODEL, "pipeline.config")
CKPT_PATH = os.path.join(PRETRAINED_MODEL, "checkpoint")
SUMMARY_PATH = f"{PRETRAINED_MODEL}/results"
...
Por favor, cheque config.py
por mais configurações de ajuste fino.
labelmap.pbtxt
item {
id: 1
name: 'person'
}
item {
id: 2
name: 'gun'
}
item {
id: 3
name: 'helmet'
}
params.txt
0.01;0.5
Podemos alterar learning_rate
e confidence_threshold
online, isso é, enquanto treinamos.
DETR
DETR (DEtection TRansformer) trata a detecção de objetos como um problema de predição de uma coleção (fixa) de objetos.
Diferentemente dos métodos tradicionais de detecção de objetos, não há âncoras ou filtragem das caixas delimitadoras via supressão não-máxima. DETR implementa uma arquitetura transformer tradicional no vetor de características resultante de uma CNN. A saída, por fim, é o conjunto de predições.
- Repositório: https://github.com/facebookresearch/detr/
- Modelo pré-treinado: https://dl.fbaipublicfiles.com/detr/detr-r50-e632da11.pth
- Nosso script de treinamento: ai/training/detr/main.py
- CLI -- treinamento do zero:
python main.py --dataset_file hsc --coco_path ../data/yolo --epochs 300 --lr=1e-4 --batch_size=1 --num_workers=4 --output_dir="outputs" --num_queries 30
- CLI -- ajuste fino:
python main.py --dataset_file hsc --coco_path ../data/yolo --epochs 300 --lr=1e-4 --batch_size=1 --num_workers=4 --output_dir="outputs" --resume="detr-r50-e632da11.pth
Configuração
datasets/__init__.py
def build_dataset(image_set, args):
...
if args.dataset_file == 'hsc':
return build_hsc(image_set, args)
...
datasets/coco.py
def build_hsc(image_set, args):
...
return dataset
...
CenterNet
A detecção de objetos com CenterNet modela um objeto como um ponto único -- o centro de sua caixa delimitadora. As outras propriedades, como o tamanho do objeto, são então regredidas diretamente dos atributos da imagem na localização de seu centro.
- Repositório: https://github.com/xingyizhou/CenterNet
- Script de treinamento: ai/training/CenterNet/src/main.py
- CLI:
python main.py ctdet --exp_id hsc --dataset hsc --batch_size 1 --lr 1.25e-4 --gpus 0 --debug 5 --val_intervals 1 --center_thresh 0.5 --scores_thresh 0.5
Configuração
Ver dataset HSC.
Faster RCNN
Faster RCNN faz da categoria de detectores de dois estágios, cuja detecção de objetos acontece após uma fase de sugestão de regiões. É uma arquitetura que sucede R-CNN e Fast RCNN, cujas melhorias na performance são oriundas da evolução na sugestão das regiões de interesse.
- Repositório: TODO -- implementada aqui via https://pytorch.org/tutorials/intermediate/torchvision_tutorial.html.
- CLI:
python train.py --dataset hsc --bs 2 --epochs 1
Configuração
Ver scripts em ai/training/frcnn.
YOLO
Os modelos da família YOLO (You Only Look Once) são parte da categoria de detectores de um único estágio. Isso é, a detecção e classificação dos objetos é realizada em apenas uma "passada" pela rede. Outros detectores populares, também de único estágio, são SSD (usamos com TF OD) e RetinaNet.
Dentre os modelos YOLO, nós avaliamos dois: YOLOv4 e YOLOv5. O primeiro se mostrou trabalhoso para conseguirmos convergência, logo decidimos tentar o segundo, a YOLOv5. Apesar de não ser implementada pelos autores originais, tal versão se mostrou equivalente à anterior no COCO val2017. Seus diferenciais, no entanto, foram permitir uma resolução de entrada maior, dispor de diferentes tamanhos de arquiteturas, bem como prover um arcabouço de scripts à implantação do modelo, como a exportação para ONNX.
YOLOv4
- Repositório: https://github.com/Tianxiaomo/pytorch-YOLOv4
YOLOv5
-- Fonte: https://github.com/ultralytics/yolov5/issues/280#issuecomment-1001850116
- Repositório: https://github.com/ultralytics/yolov5
- CLI:
- Treinamento:
python train.py --img 384 --batch 8 --epochs 100 --data ../data/hsc.yaml --weights yolov5x.pt --project hsc --name v1_yolov5x
- Treinamento: