Skip to content

Commit fea04fe

Browse files
committed
chore(i18n): sync translations with latest source changes (chunk 8/8, 60 changes)
1 parent 59764fe commit fea04fe

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

+19724
-0
lines changed

translations/zh-TW/lessons/4-ComputerVision/10-GANs/StyleTransfer.ipynb

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

translations/zh-TW/lessons/4-ComputerVision/10-GANs/StyleTransfer_Keras.ipynb

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

translations/zh-TW/lessons/4-ComputerVision/11-ObjectDetection/ObjectDetection.ipynb

Lines changed: 613 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+
# 物件偵測
2+
3+
我們之前處理的影像分類模型,通常是輸入一張圖片並產生一個分類結果,例如在 MNIST 問題中得到「數字」這個類別。然而,在許多情況下,我們不僅僅想知道圖片中有物件存在,我們還希望能夠確定它們的精確位置。這正是**物件偵測**的目的。
4+
5+
## [課前測驗](https://ff-quizzes.netlify.app/en/ai/quiz/21)
6+
7+
![物件偵測](../../../../../translated_images/zh-TW/Screen_Shot_2016-11-17_at_11.14.54_AM.b4bb3769353287be.webp)
8+
9+
> 圖片來源:[YOLO v2 網站](https://pjreddie.com/darknet/yolov2/)
10+
11+
## 一個簡單的物件偵測方法
12+
13+
假設我們想在一張圖片中找到一隻貓,一個非常簡單的物件偵測方法可能如下:
14+
15+
1. 將圖片分割成多個小區塊。
16+
2. 對每個區塊進行影像分類。
17+
3. 對於分類結果有足夠高信心的區塊,可以認為包含目標物件。
18+
19+
![簡單物件偵測](../../../../../translated_images/zh-TW/naive-detection.e7f1ba220ccd08c6.webp)
20+
21+
> *圖片來源:[練習筆記本](ObjectDetection-TF.ipynb)*
22+
23+
然而,這種方法並不理想,因為它只能非常粗略地定位物件的邊界框。為了更精確地定位,我們需要進行某種**回歸**來預測邊界框的座標,而這需要特定的數據集。
24+
25+
## 用回歸進行物件偵測
26+
27+
[這篇部落格文章](https://towardsdatascience.com/object-detection-with-neural-networks-a4e2c46b4491)提供了一個非常好的入門指南,介紹如何偵測形狀。
28+
29+
## 物件偵測的數據集
30+
31+
在進行物件偵測時,你可能會遇到以下數據集:
32+
33+
* [PASCAL VOC](http://host.robots.ox.ac.uk/pascal/VOC/) - 包含 20 個類別
34+
* [COCO](http://cocodataset.org/#home) - 常見物件的上下文。包含 80 個類別、邊界框和分割遮罩
35+
36+
![COCO](../../../../../translated_images/zh-TW/coco-examples.71bc60380fa6cceb.webp)
37+
38+
## 物件偵測的評估指標
39+
40+
### 交集比聯集 (Intersection over Union, IoU)
41+
42+
在影像分類中,衡量算法表現相對簡單;但在物件偵測中,我們需要同時衡量類別的正確性以及推測邊界框位置的精確性。對於後者,我們使用所謂的**交集比聯集** (IoU),它衡量兩個框(或任意兩個區域)的重疊程度。
43+
44+
![IoU](../../../../../translated_images/zh-TW/iou_equation.9a4751d40fff4e11.webp)
45+
46+
> *圖片來源:[這篇優秀的 IoU 部落格文章](https://pyimagesearch.com/2016/11/07/intersection-over-union-iou-for-object-detection/)*
47+
48+
概念很簡單——將兩個圖形的交集面積除以它們的聯集面積。對於完全相同的區域,IoU 值為 1;而對於完全不相交的區域,IoU 值為 0。其他情況下,IoU 值介於 0 到 1 之間。我們通常只考慮 IoU 超過某個值的邊界框。
49+
50+
### 平均精度 (Average Precision, AP)
51+
52+
假設我們想衡量某個類別 $C$ 的物件被識別的效果。為了衡量這一點,我們使用**平均精度**指標,其計算方式如下:
53+
54+
1. 考慮精度-召回曲線,顯示檢測閾值(從 0 到 1)對準確性的影響。
55+
2. 根據閾值,我們會在圖片中檢測到更多或更少的物件,並得到不同的精度和召回值。
56+
3. 曲線看起來如下:
57+
58+
<img src="https://github.com/shwars/NeuroWorkshop/raw/master/images/ObjDetectionPrecisionRecall.png"/>
59+
60+
> *圖片來源:[NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)*
61+
62+
給定類別 $C$ 的平均精度是該曲線下的面積。更精確地說,召回軸通常分為 10 部分,精度在所有這些點上取平均值:
63+
64+
$$
65+
AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10})
66+
$$
67+
68+
### AP 和 IoU
69+
70+
我們只考慮那些 IoU 超過某個值的檢測。例如,在 PASCAL VOC 數據集中,通常假設 $\mbox{IoU Threshold} = 0.5$,而在 COCO 中,AP 是針對不同的 $\mbox{IoU Threshold}$ 值進行測量的。
71+
72+
<img src="https://github.com/shwars/NeuroWorkshop/raw/master/images/ObjDetectionPrecisionRecallIoU.png"/>
73+
74+
> *圖片來源:[NeuroWorkshop](http://github.com/shwars/NeuroWorkshop)*
75+
76+
### 平均平均精度 - mAP
77+
78+
物件偵測的主要指標稱為**平均平均精度** (Mean Average Precision, mAP)。它是所有物件類別的平均精度,有時也包括不同的 $\mbox{IoU Threshold}$。更詳細的 mAP 計算過程可以參考
79+
[這篇部落格文章](https://medium.com/@timothycarlen/understanding-the-map-evaluation-metric-for-object-detection-a07fe6962cf3),以及[這裡的程式碼範例](https://gist.github.com/tarlen5/008809c3decf19313de216b9208f3734)
80+
81+
## 不同的物件偵測方法
82+
83+
物件偵測算法主要分為兩大類:
84+
85+
* **區域提案網路** (Region Proposal Networks)(如 R-CNN、Fast R-CNN、Faster R-CNN)。主要思想是生成**感興趣區域** (ROI),並對其進行 CNN 分析以尋找最大激活值。這與簡單方法有些相似,但 ROI 是以更聰明的方式生成的。這類方法的主要缺點是速度較慢,因為需要多次 CNN 分類器的運行。
86+
* **一次通過** (One-pass) 方法(如 YOLO、SSD、RetinaNet)。這些架構設計成一次性預測類別和 ROI。
87+
88+
### R-CNN: 基於區域的 CNN
89+
90+
[R-CNN](http://islab.ulsan.ac.kr/files/announcement/513/rcnn_pami.pdf) 使用[選擇性搜索](http://www.huppelen.nl/publications/selectiveSearchDraft.pdf)生成 ROI 區域的層次結構,然後通過 CNN 特徵提取器和 SVM 分類器來確定物件類別,並通過線性回歸確定*邊界框*座標。[官方論文](https://arxiv.org/pdf/1506.01497v1.pdf)
91+
92+
![RCNN](../../../../../translated_images/zh-TW/rcnn1.cae407020dfb1d1f.webp)
93+
94+
> *圖片來源:van de Sande et al. ICCV’11*
95+
96+
![RCNN-1](../../../../../translated_images/zh-TW/rcnn2.2d9530bb83516484.webp)
97+
98+
> *圖片來源:[這篇部落格](https://towardsdatascience.com/r-cnn-fast-r-cnn-faster-r-cnn-yolo-object-detection-algorithms-36d53571365e)*
99+
100+
### F-RCNN - 快速 R-CNN
101+
102+
這種方法與 R-CNN 類似,但區域是在卷積層應用後定義的。
103+
104+
![FRCNN](../../../../../translated_images/zh-TW/f-rcnn.3cda6d9bb4188875.webp)
105+
106+
> 圖片來源:[官方論文](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+
這種方法的主要思想是使用神經網路來預測 ROI,即所謂的*區域提案網路* (Region Proposal Network)。[論文](https://arxiv.org/pdf/1506.01497.pdf),2016
111+
112+
![FasterRCNN](../../../../../translated_images/zh-TW/faster-rcnn.8d46c099b87ef30a.webp)
113+
114+
> 圖片來源:[官方論文](https://arxiv.org/pdf/1506.01497.pdf)
115+
116+
### R-FCN: 基於區域的全卷積網路
117+
118+
這種算法比 Faster R-CNN 更快。主要思想如下:
119+
120+
1. 使用 ResNet-101 提取特徵。
121+
2. 特徵通過**位置敏感分數圖** (Position-Sensitive Score Map) 處理。每個類別 $C$ 的物件被分成 $k\times k$ 區域,我們訓練模型來預測物件的部分。
122+
3. 對於 $k\times k$ 區域中的每個部分,所有網路對物件類別進行投票,選擇投票最多的物件類別。
123+
124+
![r-fcn 圖片](../../../../../translated_images/zh-TW/r-fcn.13eb88158b99a3da.webp)
125+
126+
> 圖片來源:[官方論文](https://arxiv.org/abs/1605.06409)
127+
128+
### YOLO - You Only Look Once
129+
130+
YOLO 是一種即時的一次通過算法。主要思想如下:
131+
132+
* 將圖片分成 $S\times S$ 區域。
133+
* 對每個區域,**CNN** 預測 $n$ 個可能的物件、*邊界框*座標以及*信心值*=*概率* * IoU。
134+
135+
![YOLO](../../../../../translated_images/zh-TW/yolo.a2648ec82ee8bb4e.webp)
136+
137+
> 圖片來源:[官方論文](https://arxiv.org/abs/1506.02640)
138+
139+
### 其他算法
140+
141+
* RetinaNet: [官方論文](https://arxiv.org/abs/1708.02002)
142+
- [PyTorch 實現](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html)
143+
- [Keras 實現](https://github.com/fizyr/keras-retinanet)
144+
- [RetinaNet 物件偵測](https://keras.io/examples/vision/retinanet/) 在 Keras 範例中
145+
* SSD (單次檢測器): [官方論文](https://arxiv.org/abs/1512.02325)
146+
147+
## ✍️ 練習:物件偵測
148+
149+
繼續學習以下筆記本:
150+
151+
[ObjectDetection.ipynb](ObjectDetection.ipynb)
152+
153+
## 結論
154+
155+
在這節課中,你快速瀏覽了各種物件偵測方法!
156+
157+
## 🚀 挑戰
158+
159+
閱讀以下文章和筆記本,並嘗試使用 YOLO:
160+
161+
* [優秀的部落格文章](https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/) 描述 YOLO
162+
* [官方網站](https://pjreddie.com/darknet/yolo/)
163+
* YOLO: [Keras 實現](https://github.com/experiencor/keras-yolo2)[逐步筆記本](https://github.com/experiencor/basic-yolo-keras/blob/master/Yolo%20Step-by-Step.ipynb)
164+
* YOLO v2: [Keras 實現](https://github.com/experiencor/keras-yolo2)[逐步筆記本](https://github.com/experiencor/keras-yolo2/blob/master/Yolo%20Step-by-Step.ipynb)
165+
166+
## [課後測驗](https://ff-quizzes.netlify.app/en/ai/quiz/22)
167+
168+
## 回顧與自學
169+
170+
* [物件偵測](https://tjmachinelearning.com/lectures/1718/obj/) 作者:Nikhil Sardana
171+
* [物件偵測算法的良好比較](https://lilianweng.github.io/lil-log/2018/12/27/object-detection-part-4.html)
172+
* [深度學習物件偵測算法回顧](https://medium.com/comet-app/review-of-deep-learning-algorithms-for-object-detection-c1f3d437b852)
173+
* [物件偵測算法的逐步介紹](https://www.analyticsvidhya.com/blog/2018/10/a-step-by-step-introduction-to-the-basic-object-detection-algorithms-part-1/)
174+
* [Python 中 Faster R-CNN 的物件偵測實現](https://www.analyticsvidhya.com/blog/2018/11/implementation-faster-r-cnn-python-object-detection/)
175+
176+
## [作業:物件偵測](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+
# 使用 Hollywood Heads 資料集進行頭部檢測
2+
3+
來自 [AI for Beginners Curriculum](https://github.com/microsoft/ai-for-beginners) 的實驗作業。
4+
5+
## 任務
6+
7+
在監控攝影機的影片流中計算人數是一項重要的任務,這可以幫助我們估算商店的訪客數量、餐廳的繁忙時段等。為了解決這個任務,我們需要能夠從不同角度檢測出人類的頭部。為了訓練能夠檢測人類頭部的物件檢測模型,我們可以使用 [Hollywood Heads 資料集](https://www.di.ens.fr/willow/research/headdetection/)
8+
9+
## 資料集
10+
11+
[Hollywood Heads 資料集](https://www.di.ens.fr/willow/research/headdetection/release/HollywoodHeads.zip) 包含 369,846 個人類頭部的標註,這些標註來自 224,740 幅好萊塢電影的影格。該資料集以 [PASCAL VOC](https://host.robots.ox.ac.uk/pascal/VOC/) 格式提供,其中每張圖片都有一個對應的 XML 描述檔案,格式如下:
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+
在這個資料集中,只有一種類別的物件 `head`,對於每個頭部,您可以獲取其邊界框的座標。您可以使用 Python 的相關函式庫來解析 XML,或者使用 [這個函式庫](https://pypi.org/project/pascal-voc/) 直接處理 PASCAL VOC 格式。
52+
53+
## 訓練物件檢測模型
54+
55+
您可以使用以下方法之一來訓練物件檢測模型:
56+
57+
* 使用 [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) 和其 Python API,在雲端以程式化方式訓練模型。Custom Vision 無法使用超過幾百張圖片來訓練模型,因此您可能需要限制資料集的大小。
58+
* 使用 [Keras 教學範例](https://keras.io/examples/vision/retinanet/) 來訓練 RetunaNet 模型。
59+
* 使用 [torchvision.models.detection.RetinaNet](https://pytorch.org/vision/stable/_modules/torchvision/models/detection/retinanet.html) 中的內建模組進行訓練。
60+
61+
## 重點
62+
63+
物件檢測是業界中經常需要的任務。雖然有一些服務可以用來執行物件檢測(例如 [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)),但了解物件檢測的運作原理並能夠訓練自己的模型同樣重要。
64+
65+
**免責聲明**
66+
本文件使用 AI 翻譯服務 [Co-op Translator](https://github.com/Azure/co-op-translator) 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而引起的任何誤解或錯誤解釋概不負責。
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# 分割
2+
3+
我們之前學過物件偵測,它可以透過預測物件的*邊界框*來定位影像中的物件。然而,對於某些任務,我們不僅需要邊界框,還需要更精確的物件定位。這項任務被稱為**分割**
4+
5+
## [課前測驗](https://ff-quizzes.netlify.app/en/ai/quiz/23)
6+
7+
分割可以被視為**像素分類**,即對影像中的**每個**像素進行分類,並預測其所屬的類別(*背景*也是其中一個類別)。主要有兩種分割算法:
8+
9+
* **語義分割**僅告訴像素的類別,並不區分同一類別中的不同物件。
10+
* **實例分割**將類別分成不同的實例。
11+
12+
例如,在實例分割中,這些羊是不同的物件;但在語義分割中,所有的羊都被表示為同一類別。
13+
14+
<img src="../../../../../translated_images/zh-TW/instance_vs_semantic.eee9812bebf8cd45.webp" width="50%">
15+
16+
> 圖片來源:[這篇部落格文章](https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50)
17+
18+
有許多不同的神經網路架構可用於分割,但它們的結構都相似。某種程度上,它類似於你之前學過的自編碼器,但我們的目標不是解構原始影像,而是解構一個**遮罩**。因此,分割網路包含以下部分:
19+
20+
* **編碼器**:從輸入影像中提取特徵。
21+
* **解碼器**:將這些特徵轉換為**遮罩影像**,其大小與通道數與類別數相對應。
22+
23+
<img src="../../../../../translated_images/zh-TW/segm.92442f2cb42ff4fa.webp" width="80%">
24+
25+
> 圖片來源:[這篇出版物](https://arxiv.org/pdf/2001.05566.pdf)
26+
27+
我們特別需要提到分割中使用的損失函數。在使用傳統自編碼器時,我們需要測量兩個影像之間的相似性,可以使用均方誤差(MSE)來完成。在分割中,目標遮罩影像中的每個像素代表類別編號(在第三維度上進行獨熱編碼),因此我們需要使用特定於分類的損失函數——交叉熵損失,並對所有像素進行平均。如果遮罩是二元的,則使用**二元交叉熵損失**(BCE)。
28+
29+
> ✅ 獨熱編碼是一種將類別標籤編碼為向量的方法,其向量長度等於類別數。可以參考[這篇文章](https://datagy.io/sklearn-one-hot-encode/)了解這項技術。
30+
31+
## 醫學影像中的分割
32+
33+
在本課中,我們將通過訓練網路來識別醫學影像中的人類痣(也稱為痣),以實現分割。我們將使用<a href="https://www.fc.up.pt/addi/ph2%20database.html">PH<sup>2</sup>資料庫</a>的皮膚鏡影像作為影像來源。該資料集包含200張影像,分為三類:典型痣、不典型痣和黑色素瘤。所有影像也包含相應的**遮罩**,用於勾勒痣的輪廓。
34+
35+
> ✅ 這項技術特別適合這類醫學影像,但你能想到其他現實世界中的應用嗎?
36+
37+
<img alt="navi" src="../../../../../translated_images/zh-TW/navi.2f20b727910110ea.webp"/>
38+
39+
> 圖片來源:PH<sup>2</sup>資料庫
40+
41+
我們將訓練一個模型,將任何痣從背景中分割出來。
42+
43+
## ✍️ 練習:語義分割
44+
45+
打開以下筆記本,了解不同的語義分割架構,練習使用它們,並觀察它們的實際效果。
46+
47+
* [語義分割 Pytorch](SemanticSegmentationPytorch.ipynb)
48+
* [語義分割 TensorFlow](SemanticSegmentationTF.ipynb)
49+
50+
## [課後測驗](https://ff-quizzes.netlify.app/en/ai/quiz/24)
51+
52+
## 結論
53+
54+
分割是一種非常強大的影像分類技術,超越了邊界框,實現了像素級的分類。它在醫學影像等領域有著廣泛的應用。
55+
56+
## 🚀 挑戰
57+
58+
人體分割只是我們可以對人物影像進行的常見任務之一。其他重要任務包括**骨架偵測****姿勢偵測**。試試[OpenPose](https://github.com/CMU-Perceptual-Computing-Lab/openpose)庫,看看姿勢偵測的應用。
59+
60+
## 回顧與自學
61+
62+
這篇[維基百科文章](https://wikipedia.org/wiki/Image_segmentation)提供了該技術各種應用的良好概述。自行學習實例分割和全景分割在該領域的子領域。
63+
64+
## [作業](lab/README.md)
65+
66+
在本次實驗中,使用 [Segmentation Full Body MADS Dataset](https://www.kaggle.com/datasets/tapakah68/segmentation-full-body-mads-dataset) 資料集,嘗試進行**人體分割**
67+
68+
---
69+

0 commit comments

Comments
 (0)