跳到主要內容

「魚兒魚兒水中游」,有辦法辨識魚缸中魚的種類、數量的變化,甚至是活動力嗎?

經由 alex.lee 提問 ‧ 11 天前

電腦視覺

最近在搞魚菜共生,想用"聰明"的方法來觀察魚缸中魚兒的數量變化(有沒有死魚),再與水質狀況(如含氧量)做關聯,想用深度學習與影像辨識來解決這問題,甚至進一步分析出魚的個別及群體活動力,不知各位大大有沒有相關的經驗或作法可供參考呢?

回答 11

經由 SeanKai Pa 回答 ‧ 11 天前

我們試過自架伺服器由遠端進行控制串流影像鏡頭,再將攝取到的動態影像轉成靜態圖檔,作為深度學習的辨識資料,對了, Tensorflow的 Object Detection API 有訓練好的類神經網路模組,可以用來提高辨識魚隻的準確度喔~

經由 omnixri 回答 ‧ 11 天前

這個問題可從幾個方向來看,數值型(水溫,含氧, PH...)感測器的變化來預測水質(時序)變化,影像型感測器對個別魚隻進行辨識及追蹤,亦或結合兩種來預測合適魚群生活環境或存活率.

首先要收集數據(不論數值或影像甚至聲音),再來標註資料如魚隻位置,大小,編號等, 再建立魚隻運動軌跡,以利後續進行訓練及評測正確率.

從數值型來解可能從LSTM之類的方式以過去數值來推論未來數值, 假設十分鐘(或更短)取一次數值,則可用最最六次數值來推估十分鐘後狀態或者一小時後結果,方便預警飼主或啟動自動調整水質設備.

從影像型來看分成物件辨識及物件追蹤來看,後者通常不須用到深度學習以傳統電腦視覺解法即可,但若要更精準的軌跡預測亦可使用LSTM之類的作法.就物件辨識來看則要看影像來源類型,包括攝影機(一般網路攝影機,深度影像攝影機),取像視角(正前視.前俯視,正上視...),影像解析度(魚隻成像大小),取像間隔等, 如此才能取得正確待訓練及分析的樣本影像,接下來就可用YOLO之類的物件偵測方式對每張影像做分析找出魚隻個別位置及大小.

不過因魚是自由在魚缸中游動,所以同一隻魚成像大小及清晰度會有所不同, 加上魚隻會有前後遮蔽甚至長相幾乎一樣,所以若以單張影像辨別特定魚隻位置就會容易誤判,此時則需以加入時序輔助定位及追蹤,最後就可依不同魚隻運動軌跡來分析是否活動力不足或過於旺盛.當然魚也是會睡覺的, 分析運動軌跡時還要注意是在那個時間.

以上是小弟粗淺看法,還請多多指教.

經由 laisan86 回答 ‧ 10 天前

關於透過影像來辨認魚的部分,由於我對於魚類不熟,所以恕我對這部分保留

不過從感測器在水質管理上的應用,這我倒是剛巧有點實作:2018漁客松

從感測器的數據,其實已經有不少數據可以分析!原因:常態分佈,針對收集歷史資料,透過rnn這類比較適合具有序列性質的神經網路運算,是有辦法評估魚的健康狀況跟活力!

至於影像的辨識部分,可能的話先用Faster R-CNN這一類簡單的演算法來試試!說不定真能發現什麼

經由 Dou Wang 回答 ‧ 9 天前

已有不少人做過相關研究,例如有人用Tensorflow的物件偵測技術來辨識水族箱中不同魚隻的種類,而且佛心的提供開源資料給大家使用:

https://github.com/kwea123/fish_detection

辨識成果影片:https://www.youtube.com/watch?v=KkJQ6qUoEPk

 

經由 omnixri 評論 ‧ 9 天前

很棒的研究成果,他主要用到 fasterrcnninceptionv2coco的模型,值得參考。

經由 chuckmails 評論 ‧ 9 天前

這個方法我有試過了,想得到初步測試可以使用,但由於他的圖片來源是open data set 裡面的圖片是網路上蒐集的魚隻圖片,雖然有兩萬多張,但會跟自己魚缸的圖片差非常多喔XD,辨識率大概只有六成,還是建議自行蒐集自己的圖片訓練。

經由 omnixri 評論 ‧ 9 天前

一般公開資料集(如ImageNet, Coco...)不一定符合自己需求, 為了提高正確率,自行標註和重新訓練幾乎是免不了的. 不過利用這些訓練好的權重值再作Transfer Learning會節省不少訓練時間.

經由 jiajheng.yeh 回答 ‧ 9 天前

不管運用甚麼觀測方法,可能還是要先確認什麼水質因素是影響魚群健康狀況的關鍵因素,進而才能知道要監控什麼吧?

經由 laisan86 評論 ‧ 9 天前

沒錯! 這就是為什麼AI在養殖上會有幫助的關係, 不同種的魚蝦對於水值的耐受力不同、喜好的環境如溫度...等也不同, 所以一般的做法, 就是針對某一種魚蝦, 先挑選合適的基因品種, 然後實驗看看是否可以繁殖成功, 當繁殖成功後分成不同區域, 再把不同區域中的環境、養殖條件改變, 看魚蝦的生長狀況、活力會如何變化. 這種方式就可以把收集來的數據提供給系統, 再由系統來進行自動化控制. 接著透過AI的話, 由於像是RNN這類的神經網路系統非常適合處理具有順序性數據的, 因而可以方便預測魚蝦的產量, 如此一來就能夠量化養殖的規模

經由 ivy.wang 回答 ‧ 9 天前

如果要容易觀測應該還是盡量不要放石頭、珊瑚等裝飾性的東西,畫面乾淨應該會比較便於辨識魚體。

經由 omnixri 評論 ‧ 9 天前

一般很難限制真實世界來遷就電腦視覺辨識,比較好的做法可以搭配背影移除法來去除不會動的內容,針對會移動的物件,再進行分析,這樣會提升不少準確率。另外也可加入更多樣態的樣本(如背影複雜度、影像模糊度等)一起訓練,這樣也有機會提升辨識率。

經由 warehouse 回答 ‧ 9 天前

以前看過國外有人實況讓魚玩神奇寶貝,他將魚缸畫面切割成起個區域後,每幾秒去捕捉牠位於哪個區塊並執行該區塊的遊戲動作。

將魚缸切塊監控應該可以便於監控活動量。將監控魚缸的畫面分割成幾塊後定時照下照片,加上辨識功能後可以計算每一格的魚體數量,以此就可以觀察出魚的活動量。另外,使用這個方法的數據擷取量可能可以少掉不少。

經由 omnixri 評論 ‧ 9 天前

若不針對魚隻各別個體的活動度來辨識時,而以總體活動量來看時,您提的方式也是一項不錯的解法,就像傳統電腦視覺中的運動偵測(Motion Detection)的做法,不需動到深度學習就能有不錯的結果。

經由 linda.lin 回答 ‧ 9 天前

有找到一篇文章說明一般養殖魚對水質的檢測指標有以下幾項:水的色度、水溫、酸鹼度、硬度、含氧量、氨氮含量、亞硝酸鹽含量、硝酸鹽含量。

文章連結: https://kknews.cc/zh-tw/pet/4qr2rpq.html

另外,魚的生病現象也有相關文章,也提供參考 https://kknews.cc/zh-tw/health/vg8qza.html

經由 weihsuan 回答 ‧ 9 天前

唉…想起以前曾經在我手中翻肚的魚兒們QQ

好奇魚的胃口跟牠的健康狀態有沒有直接關係?
如果有關,是不是就可以透過魚飼料重量的變化量去掌握魚的健康狀態

但是飼料本身跟魚吃進多少感覺很難去偵測

而且似乎只能反應魚群的整體狀態~

畢竟魚飼料是魚群一起吃掉的XD

經由 Bella 回答 ‧ 5 天前

魚兒生病有些可依據的狀況來分析. 

1) 什麼類型的魚. ( 金魚缸) (海水缸) (有沒有水草...) (....不同的缸)

有些魚的共通疾病: 白點/ 紅線 / 爛尾...等這個是可以透過視覺來分辨, 但如果單以活動力來看有些不足. 

我個人也很期待能完成這種程式來預測呢. 

經由 laisan86 回答 ‧ 5 天前

好喔!不過,這得要比較高解析、高速的攝影機嗎?因為有的魚身上的病變,會不會很難看的到?

或者,可以挑選一些比較大型的魚先?

經由 Bella 評論 ‧ 4 天前

只是討論囉 , 建議可以先從金魚開始, 再找出金魚常患的病的特徵歸納. 至少...金魚是日本人最愛的魚類首選, 這個或許可以商品化唷 :)

需登入才能回答問題