2018年10月17日 星期三

YOLO 自動框出相片裡的人/動物/生活用品

yolo3 測試結果: 街道圖/動物圖/餐桌圖 今天介紹的這個神奇好物, 看圖就知道了。 我偷懶把三張圖擠在一起。 底層是繁忙的街道圖; 左上是森林裡幾隻吃素的 (絕對不包含韓國瑜); 右上是巴黎鐵塔餐廳的一張餐桌。 神奇的 YOLO 技術 把圖裡的人/動物/物件都標示出來了, 而且, 在 cpu-only 的電腦上, 每張圖只花幾秒鐘!

關於 R-CNN、 Fast R-CNN、 Faster R-CNN、 YOLO、 SSD, 請見 這篇; 小格不太談理論 (因為我沒研究 ^_^), 只介紹好玩的玩具。 我從 原作者的 repo 把程式碼 clone 過來 我自己的 repo 並小改了一下。

  1. 下載我包的 docker: docker pull ckhung/keras-yolo3:18B 這裡面包含上面的 github repo。 如果程式碼有更新, 可能只會更新 github 而不會更新 docker image。 這個 docker 其實也很簡單, 從 Dockerfile 可以看到: 它的 dependency 很少。 等待下載時, 可以繼續往下做。
  2. 假設以 ~/yolo3/ 為工作目錄。 請在那底下建立 images 跟 out 兩個目錄。 抓一些圖片放在 ~/yolo3/images/ 底下。
  3. 抓回權重矩陣: wget https://pjreddie.com/media/files/yolov3.weights -O ~/yolo3/yolov3.weights
  4. 啟動 docker: docker run -it -v ~/yolo3:/ext --name yolo3 ckhung/keras-yolo3:18B
  5. 在 docker 裡面, 轉換權重矩陣的格式: cd /keras-yolo3 ; python3 convert.py yolov3.cfg /ext/yolov3.weights /ext/yolo.h5 當然, 這只需要做一次。
  6. 在 docker 裡面測試: time python3 yolo_image.py --model_path /ext/yolo.h5 --outdir /ext/out/ /ext/images/*.jpg 於是在 /ext/out/ 底下會產生加註標記的 jpg 圖檔及 json 文字標記檔。

python3 yolo_image.py ... 必須在 /keras-yolo3 子目錄裡執行, 因為它用到其他程式碼。 權重矩陣放在 host 上, 不要放到 guest 裡面, 才不會因為砍掉 guest 而跟著消失。

這組權重矩陣認得 80 種東西, 詳見 coco_classes.txt。 我的電腦沒有 GPU、 暫時就不研究處理影片的程式了。 來欣賞一段別人製作的可愛煩人浣熊的影片吧:

沒有留言:

張貼留言