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.

DETR

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.

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

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.

Configuração

Ver dataset HSC.

Faster RCNN

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.

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

YOLOv5

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

Configuração

Ver hsc.yml e documentação da YOLOv5.