Skip to content

Commit 7f61888

Browse files
committed
chore(i18n): sync translations with latest source changes (chunk 8/8, 60 changes)
1 parent 0581d04 commit 7f61888

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

60 files changed

+19752
-0
lines changed

translations/pt-PT/lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb

Lines changed: 598 additions & 0 deletions
Large diffs are not rendered by default.

translations/pt-PT/lessons/4-ComputerVision/10-GANs/StyleTransfer_Keras.ipynb

Lines changed: 808 additions & 0 deletions
Large diffs are not rendered by default.

translations/pt-PT/lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb

Lines changed: 611 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 179 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,179 @@
1+
# Detecção de Objetos
2+
3+
Os modelos de classificação de imagens que abordámos até agora recebiam uma imagem e produziam um resultado categórico, como a classe 'número' num problema MNIST. No entanto, em muitos casos, não queremos apenas saber que uma imagem retrata objetos - queremos determinar a sua localização precisa. Este é exatamente o objetivo da **detecção de objetos**.
4+
5+
## [Questionário pré-aula](https://ff-quizzes.netlify.app/en/ai/quiz/21)
6+
7+
![Detecção de Objetos](../../../../../translated_images/pt-PT/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be.webp)
8+
9+
> Imagem do [site YOLO v2](https://pjreddie.com/darknet/yolov2/)
10+
11+
## Uma Abordagem Ingénua para Detecção de Objetos
12+
13+
Supondo que queremos encontrar um gato numa imagem, uma abordagem muito ingénua para detecção de objetos seria a seguinte:
14+
15+
1. Dividir a imagem em vários blocos.
16+
2. Executar a classificação de imagem em cada bloco.
17+
3. Os blocos que resultarem numa ativação suficientemente alta podem ser considerados como contendo o objeto em questão.
18+
19+
![Detecção Ingénua de Objetos](../../../../../translated_images/pt-PT/naive-detection.e7f1ba220ccd08c6.webp)
20+
21+
> *Imagem do [Caderno de Exercícios](ObjectDetection-TF.ipynb)*
22+
23+
No entanto, esta abordagem está longe de ser ideal, pois só permite ao algoritmo localizar a caixa delimitadora do objeto de forma muito imprecisa. Para uma localização mais precisa, precisamos de executar algum tipo de **regressão** para prever as coordenadas das caixas delimitadoras - e, para isso, necessitamos de conjuntos de dados específicos.
24+
25+
## Regressão para Detecção de Objetos
26+
27+
[Este artigo](https://towardsdatascience.com/object-detection-with-neural-networks-a4e2c46b4491) oferece uma excelente introdução à deteção de formas.
28+
29+
## Conjuntos de Dados para Detecção de Objetos
30+
31+
Poderá encontrar os seguintes conjuntos de dados para esta tarefa:
32+
33+
* [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/) - 20 classes
34+
* [COCO](http://cocodataset.org/#home) - Objetos Comuns em Contexto. 80 classes, caixas delimitadoras e máscaras de segmentação
35+
36+
![COCO](../../../../../translated_images/pt-PT/coco-examples.71bc60380fa6cceb.webp)
37+
38+
## Métricas de Detecção de Objetos
39+
40+
### Interseção sobre União
41+
42+
Enquanto na classificação de imagens é fácil medir o desempenho do algoritmo, na detecção de objetos precisamos de medir tanto a correção da classe como a precisão da localização da caixa delimitadora inferida. Para esta última, utilizamos a chamada **Interseção sobre União** (IoU), que mede o quão bem duas caixas (ou duas áreas arbitrárias) se sobrepõem.
43+
44+
![IoU](../../../../../translated_images/pt-PT/iou_equation.9a4751d40fff4e11.webp)
45+
46+
> *Figura 2 de [este excelente artigo sobre IoU](https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/)*
47+
48+
A ideia é simples - dividimos a área de interseção entre duas figuras pela área da sua união. Para duas áreas idênticas, o IoU seria 1, enquanto para áreas completamente disjuntas será 0. Caso contrário, variará entre 0 e 1. Normalmente, consideramos apenas as caixas delimitadoras para as quais o IoU está acima de um determinado valor.
49+
50+
### Precisão Média
51+
52+
Suponha que queremos medir o quão bem uma determinada classe de objetos $C$ é reconhecida. Para medir isso, utilizamos a métrica de **Precisão Média**, que é calculada da seguinte forma:
53+
54+
1. Consideramos a curva de Precisão-Recall que mostra a precisão dependendo de um valor de limiar de deteção (de 0 a 1).
55+
2. Dependendo do limiar, obteremos mais ou menos objetos detetados na imagem e diferentes valores de precisão e recall.
56+
3. A curva terá este aspeto:
57+
58+
<img src="https://github.com/shwars/NeuroWorkshop/raw/master/images/ObjDetectionPrecisionRecall.png"/>
59+
60+
> *Imagem de [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)*
61+
62+
A Precisão Média para uma classe $C$ é a área sob esta curva. Mais precisamente, o eixo Recall é normalmente dividido em 10 partes, e a Precisão é calculada como média em todos esses pontos:
63+
64+
$$
65+
AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10})
66+
$$
67+
68+
### AP e IoU
69+
70+
Consideramos apenas as deteções para as quais o IoU está acima de um determinado valor. Por exemplo, no conjunto de dados PASCAL VOC, normalmente $\mbox{IoU Threshold} = 0.5$ é assumido, enquanto no COCO o AP é medido para diferentes valores de $\mbox{IoU Threshold}$.
71+
72+
<img src="https://github.com/shwars/NeuroWorkshop/raw/master/images/ObjDetectionPrecisionRecallIoU.png"/>
73+
74+
> *Imagem de [NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)*
75+
76+
### Precisão Média Global - mAP
77+
78+
A principal métrica para Detecção de Objetos é chamada de **Precisão Média Global**, ou **mAP**. É o valor da Precisão Média, calculado como média entre todas as classes de objetos, e às vezes também sobre $\mbox{IoU Threshold}$. O processo de cálculo do **mAP** é descrito em mais detalhe
79+
[neste artigo](https://medium.com/@timothycarlen/understanding-the-map-evaluation-metric-for-object-detection-a07fe6962cf3)), e também [aqui com exemplos de código](https://gist.github.com/tarlen5/008809c3decf19313de216b9208f3734).
80+
81+
## Diferentes Abordagens para Detecção de Objetos
82+
83+
Existem duas grandes classes de algoritmos de detecção de objetos:
84+
85+
* **Redes de Proposta de Região** (R-CNN, Fast R-CNN, Faster R-CNN). A ideia principal é gerar **Regiões de Interesse** (ROI) e executar CNN sobre elas, procurando a ativação máxima. É um pouco semelhante à abordagem ingénua, com a exceção de que as ROIs são geradas de forma mais inteligente. Uma das principais desvantagens desses métodos é que são lentos, pois necessitam de várias passagens do classificador CNN sobre a imagem.
86+
* Métodos de **uma única passagem** (YOLO, SSD, RetinaNet). Nessas arquiteturas, projetamos a rede para prever tanto as classes como as ROIs numa única passagem.
87+
88+
### R-CNN: CNN Baseada em Região
89+
90+
[R-CNN](http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf) utiliza [Selective Search](http://www.huppelen.nl/publications/selectiveSearchDraft.pdf) para gerar uma estrutura hierárquica de regiões ROI, que são então passadas por extratores de características CNN e classificadores SVM para determinar a classe do objeto, e regressão linear para determinar as coordenadas da *caixa delimitadora*. [Artigo Oficial](https://arxiv.org/pdf/1506.01497v1.pdf)
91+
92+
![RCNN](../../../../../translated_images/pt-PT/rcnn1.cae407020dfb1d1f.webp)
93+
94+
> *Imagem de van de Sande et al. ICCV’11*
95+
96+
![RCNN-1](../../../../../translated_images/pt-PT/rcnn2.2d9530bb83516484.webp)
97+
98+
> *Imagens de [este artigo](https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e)*
99+
100+
### F-RCNN - Fast R-CNN
101+
102+
Esta abordagem é semelhante à R-CNN, mas as regiões são definidas após as camadas de convolução terem sido aplicadas.
103+
104+
![FRCNN](../../../../../translated_images/pt-PT/f-rcnn.3cda6d9bb4188875.webp)
105+
106+
> Imagem do [Artigo Oficial](https://www.cv-foundation.org/openaccess/content_iccv_2015/papers/Girshick_Fast_R-CNN_ICCV_2015_paper.pdf), [arXiv](https://arxiv.org/pdf/1504.08083.pdf), 2015
107+
108+
### Faster R-CNN
109+
110+
A ideia principal desta abordagem é usar uma rede neural para prever ROIs - a chamada *Rede de Proposta de Região*. [Artigo](https://arxiv.org/pdf/1506.01497.pdf), 2016
111+
112+
![FasterRCNN](../../../../../translated_images/pt-PT/faster-rcnn.8d46c099b87ef30a.webp)
113+
114+
> Imagem do [artigo oficial](https://arxiv.org/pdf/1506.01497.pdf)
115+
116+
### R-FCN: Rede Totalmente Convolucional Baseada em Região
117+
118+
Este algoritmo é ainda mais rápido que o Faster R-CNN. A ideia principal é a seguinte:
119+
120+
1. Extraímos características usando ResNet-101.
121+
1. As características são processadas por **Position-Sensitive Score Map**. Cada objeto das classes $C$ é dividido em regiões $k\times k$, e treinamos para prever partes dos objetos.
122+
1. Para cada parte das regiões $k\times k$, todas as redes votam pelas classes de objetos, e a classe de objeto com o voto máximo é selecionada.
123+
124+
![r-fcn image](../../../../../translated_images/pt-PT/r-fcn.13eb88158b99a3da.webp)
125+
126+
> Imagem do [artigo oficial](https://arxiv.org/abs/1605.06409)
127+
128+
### YOLO - You Only Look Once
129+
130+
YOLO é um algoritmo de uma única passagem em tempo real. A ideia principal é a seguinte:
131+
132+
* A imagem é dividida em regiões $S\times S$.
133+
* Para cada região, **CNN** prevê $n$ objetos possíveis, coordenadas da *caixa delimitadora* e *confiança*=*probabilidade* * IoU.
134+
135+
![YOLO](../../../../../translated_images/pt-PT/yolo.a2648ec82ee8bb4e.webp)
136+
137+
> Imagem do [artigo oficial](https://arxiv.org/abs/1506.02640)
138+
139+
### Outros Algoritmos
140+
141+
* RetinaNet: [artigo oficial](https://arxiv.org/abs/1708.02002)
142+
- [Implementação PyTorch em Torchvision](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html)
143+
- [Implementação Keras](https://github.com/fizyr/keras-retinanet)
144+
- [Detecção de Objetos com RetinaNet](https://keras.io/examples/vision/retinanet/) em exemplos Keras
145+
* SSD (Single Shot Detector): [artigo oficial](https://arxiv.org/abs/1512.02325)
146+
147+
## ✍️ Exercícios: Detecção de Objetos
148+
149+
Continue a sua aprendizagem no seguinte caderno:
150+
151+
[ObjectDetection.ipynb](ObjectDetection.ipynb)
152+
153+
## Conclusão
154+
155+
Nesta lição, fez uma rápida exploração de todas as várias formas de realizar detecção de objetos!
156+
157+
## 🚀 Desafio
158+
159+
Leia estes artigos e cadernos sobre YOLO e experimente por si mesmo:
160+
161+
* [Bom artigo](https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/) descrevendo YOLO
162+
* [Site oficial](https://pjreddie.com/darknet/yolo/)
163+
* YOLO: [Implementação Keras](https://github.com/experiencor/keras-yolo2), [caderno passo-a-passo](https://github.com/experiencor/basic-yolo-keras/blob/master/Yolo%20Step-by-Step.ipynb)
164+
* YOLO v2: [Implementação Keras](https://github.com/experiencor/keras-yolo2), [caderno passo-a-passo](https://github.com/experiencor/keras-yolo2/blob/master/Yolo%20Step-by-Step.ipynb)
165+
166+
## [Questionário pós-aula](https://ff-quizzes.netlify.app/en/ai/quiz/22)
167+
168+
## Revisão e Autoestudo
169+
170+
* [Detecção de Objetos](https://tjmachinelearning.com/lectures/1718/obj/) por Nikhil Sardana
171+
* [Uma boa comparação de algoritmos de detecção de objetos](https://lilianweng.github.io/lil-log/2018/12/27/object-detection-part-4.html)
172+
* [Revisão de Algoritmos de Aprendizagem Profunda para Detecção de Objetos](https://medium.com/comet-app/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852)
173+
* [Uma Introdução Passo-a-Passo aos Algoritmos Básicos de Detecção de Objetos](https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/)
174+
* [Implementação de Faster R-CNN em Python para Detecção de Objetos](https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/)
175+
176+
## [Tarefa: Detecção de Objetos](lab/README.md)
177+
178+
---
179+
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# Deteção de Cabeças usando o Hollywood Heads Dataset
2+
3+
Trabalho prático do [Currículo de IA para Iniciantes](https://github.com/microsoft/ai-for-beginners).
4+
5+
## Tarefa
6+
7+
Contar o número de pessoas num fluxo de vídeo de uma câmara de vigilância é uma tarefa importante que nos permite estimar o número de visitantes em lojas, as horas de maior movimento num restaurante, etc. Para resolver esta tarefa, precisamos de ser capazes de detetar cabeças humanas a partir de diferentes ângulos. Para treinar um modelo de deteção de objetos para identificar cabeças humanas, podemos usar o [Hollywood Heads Dataset](https://www.di.ens.fr/willow/research/headdetection/).
8+
9+
## O Conjunto de Dados
10+
11+
O [Hollywood Heads Dataset](https://www.di.ens.fr/willow/research/headdetection/release/HollywoodHeads.zip) contém 369.846 cabeças humanas anotadas em 224.740 frames de filmes de Hollywood. É fornecido no formato [https://host.robots.ox.ac.uk/pascal/VOC/](../../../../../../lessons/4-ComputerVision/11-ObjectDetection/lab/PASCAL VOC), onde para cada imagem existe também um ficheiro de descrição XML que se parece com isto:
12+
13+
```xml
14+
<annotation>
15+
<folder>HollywoodHeads</folder>
16+
<filename>mov_021_149390.jpeg</filename>
17+
<source>
18+
<database>HollywoodHeads 2015 Database</database>
19+
<annotation>HollywoodHeads 2015</annotation>
20+
<image>WILLOW</image>
21+
</source>
22+
<size>
23+
<width>608</width>
24+
<height>320</height>
25+
<depth>3</depth>
26+
</size>
27+
<segmented>0</segmented>
28+
<object>
29+
<name>head</name>
30+
<bndbox>
31+
<xmin>201</xmin>
32+
<ymin>1</ymin>
33+
<xmax>480</xmax>
34+
<ymax>263</ymax>
35+
</bndbox>
36+
<difficult>0</difficult>
37+
</object>
38+
<object>
39+
<name>head</name>
40+
<bndbox>
41+
<xmin>3</xmin>
42+
<ymin>4</ymin>
43+
<xmax>241</xmax>
44+
<ymax>285</ymax>
45+
</bndbox>
46+
<difficult>0</difficult>
47+
</object>
48+
</annotation>
49+
```
50+
51+
Neste conjunto de dados, existe apenas uma classe de objetos, `head`, e para cada cabeça, obtém-se as coordenadas da caixa delimitadora. Pode-se analisar os ficheiros XML usando bibliotecas Python ou usar [esta biblioteca](https://pypi.org/project/pascal-voc/) para lidar diretamente com o formato PASCAL VOC.
52+
53+
## Treinar a Deteção de Objetos
54+
55+
Pode treinar um modelo de deteção de objetos utilizando uma das seguintes abordagens:
56+
57+
* Usar o [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste) e a sua API Python para treinar programaticamente o modelo na cloud. O Custom Vision não consegue usar mais do que algumas centenas de imagens para treinar o modelo, por isso pode ser necessário limitar o conjunto de dados.
58+
* Usar o exemplo do [tutorial do Keras](https://keras.io/examples/vision/retinanet/) para treinar o modelo RetunaNet.
59+
* Usar o módulo integrado [torchvision.models.detection.RetinaNet](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) no torchvision.
60+
61+
## Conclusão
62+
63+
A deteção de objetos é uma tarefa frequentemente necessária na indústria. Embora existam alguns serviços que podem ser usados para realizar a deteção de objetos (como o [Azure Custom Vision](https://docs.microsoft.com/azure/cognitive-services/custom-vision-service/quickstarts/object-detection?tabs=visual-studio&WT.mc_id=academic-77998-cacaste)), é importante compreender como funciona a deteção de objetos e ser capaz de treinar os seus próprios modelos.
64+
65+
**Aviso Legal**:
66+
Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, tenha em atenção que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autoritária. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes da utilização desta tradução.

0 commit comments

Comments
 (0)