早前收到 Towards Data Science 的 Newsletter,其中一篇文章吸引到我的眼球 Image segmentation: change the color of your car! Step-by-step guide。簡單地說就是利用 Image segmentation 這個技術去訓練一個模型找出圖片上的汽車並標記不同部份(mask),達至可以使用這個 mask 去更換車的顏色。

看起來挺有趣的。今天用兩個小時去複製他的結果,結果也並不錯。

首次要試驗這個 Image segmentation 我們需要做兩件事:

  • 準備訓練圖片 (Training Set)
  • 安裝 Intelec 這個軟件

準備訓練圖片 (Training Set)

作者非常好人,已經將標注 (Annotate) 好的圖片放到 Kaggle 。如果我們要自己標注的話,200 張圖看來也要花 1–2 個小時才能完成。懶惰的我直接下載大約 450MB 的 Dataset 就好了。

值得注意是圖片包含幾個標籤 :

  • 背景
  • 車身
  • 輪胎 / 車轆
  • 車燈
  • 窗 (包括擋風玻璃)

安裝 Intelec AI

其實我從來也沒聽過這個 Intelec AI,所以姑且也試試看。Intelec AI 看來是一個挺新的 Project,並沒有很多人在關注。不要緊,我們做做白老鼠吧。如果你是用 Linux 的話,直接用他們的 Docker 就差不多可以把 Intelec AI 跑起來。按他們的網頁說明,如果想用 GPU 加速訓練的話就要安裝 NVIDIA 的 NVIDIA Container Toolkit。

git clone https://github.com/intelec-ai/intelecai-installation.git

Git clone 後直接執行 ./start_server.sh

看起來好像是成功。不過,其實我遇到一個問題。他的 docker swarm 好像設定得不太好,詳細我也沒有深究,反正有 docker-compose.yml 這個檔案我們也可以直接用 docker compose 來執行。

docker-compose up

還好之前 Docker 也浸過一段時間,弄一弄就可以成功過關,直接去 http://localhost:7700 就看到這個畫面

上載訓練圖片

按照指示,把從 Kaggle 下載得來的 archive.zip 上載到 Intelec。

然後,最重要是把這個文件 Extract 出來。再跑到 Trainings 的頁面,用這些圖片去訓練一個模型。模型類別我們選 Semantic image segmenter

然後就開始訓練了。

我的電腦有 GPU,所以 3–4 分鐘就把整個訓練都跑完了。沒有 GPU 的話,等個 10 分鐘還是 0%。對了,用 GPU 的話記得在 /etc/docker/daemon.json 加上這一行

"default-runtime":"nvidia"

才會用上 GPU 去訓練。閒著無聊我們可以去看這個 Intelec 究竟在幹什麼

docker service logs -f intelecai_intelec-backend

嗯,是去 pytorch 那邊下載一個已經訓練好的模型 (resnet18) 來用。好的,又知道多一點了。訓練完就可以 Deploy model,然後就用自己的圖片作測試。我跑到公司樓下 (觀塘) 拍了幾張照片,看看能不能把車的不同位置認出來。

模型估計得出這部 Tesla 的 Mask

這張略嫌邊沿不夠好,頭燈也沒有標示出來。

這張邊沿比較貼近真車,尾燈也能比較準確地標記出來。

利用身邊的事物來學習人工智能可以使學習變得更加有趣,更可以激發同學的創意及思維。老師可以把教程當成 STEM 課堂活動,更和同學一起互動,討論這項技術的用途和發展。如果需要更全面的人工智能課程教材,只需填寫以下表格,我們會直接發到閣下的郵箱。


Comments are closed.