[創作] 用深度學習幫分類&整理CG

看板 C_Chat
作者 zmcx16 (zmcx16)
時間 2021-10-29 22:00:38
留言 20則留言 (19推 0噓 1→)

註: 這個程式因為根據顯卡不同要安裝的函式庫也不相同, 所以並沒有編成可執行檔提供 使用, 需要會架設python環境才有辦法使用這工具。 Github: https://github.com/zmcx16/ReclassifyAnimeCG 部落格文章(文長): https://blog.zmcx16.moe/2021/10/reclassifyanimecg-cg.html 會想寫這個工具的主要原因是, 我有追蹤一些繪師並且用下載器去追蹤下載那些繪師的作 品, 不過基本上繪師畫的圖通常就是幾天放個一張, 或是一次推出的CG圖庫都是複合的動 漫畫主題, 然後下載器下載又不可能自動幫我分類這些圖片, 導致這些圖片就越來越雜 亂, 每個資料夾都混雜複數個主題&角色, 每個資料夾的名稱又沒有特定的主題性, 讓我 自己事後很難找圖不說, 連看都懶得看了...。 後來就想到現在深度學習分類圖片已經很 強了, 那我乾脆來寫個工具輔助我整理圖庫吧!! 這個工具目前沒有特別為動漫CG分類做特別設計, 目前功能就是單純套用目前流行的影像 分類模型, 然後整合一些檔案比對跟複製的功能, 方便用來整理CG, 使用的方法如下: -------- 1. 設置config.yaml 設定想整理的圖庫位置(predict_data_path), 以及先手動整理好一小部分的資料當訓練 資料(train_data_path), 還有預定之後模型分類完存放圖庫的位置 (output_data_path), 還有設定想訓練/使用的深度學習模型。 2. 執行preprocess.py preprocess.py會生成 train.txt, test.txt, index.txt 到 label_path 位置。 train.txt儲存訓練資料的每張圖片的位置, 以及對應的資料夾名稱(類別); test.txt則 是根據config.yaml裡的train_ratio來決定要從training_data裡拿多少資料做為 testing data, 如果今天是想測試模型好壞或調參數會設定到, 如果是單純想使用來整理 圖片不調參數, 就直接設定成1.0; index.txt則是記錄每個類別index對應的資料夾名稱 。 3. 執行train.py train.py會開始訓練模型, 並把訓練好的模型存在train_model_path位置 4. 執行predict.py 如果config.yaml設定use_test_txt = true, predict.py會使用之前preprocess.py生成 的testing data來做分類預測, 並計算這次分類的準確率, 可以根據分類好壞來調整模型 跟參數改善模型; 如果use_test_txt = false, predict.py會遍歷predict_data_path位 置的所有圖檔, 並針對這些圖檔做分類預測, 以及根據預測結果儲存到output_data_path 。 5. 如果是調整或訓練模型到步驟4就結束了, 而如果是要整理圖庫的話, 手動確認分類結 果, 把分類錯誤的部分砍掉, 之後把剩餘正確(部分)的分類結果複製到training_data內 。 6. 跳回步驟2, 反覆做到個人滿意分類結果為止。 -------- Config的部分可以設定自動過濾重複的檔案, 以及複製分類結果可以選擇要直接複製檔案 或製作Symbolic link, 前者的話就變成多copy一整份整理好的檔案, 後者的話就是整理 的結果都用符號連結儲存, 就幾乎不會為了複製分類結果佔磁碟空間(如果要製作 Symbolic link, 建議之後看圖使用FastStone Image Viewer, 不然直接用windows圖片檢 視器開啟圖片會直接導到檔案的原始位置, 而不是link所在的位置, 觀看下一張圖片時就 不會照著link的資料夾位置跑)。 目前我要分類的CG有20237張, 裡面有多少分類我也不知道, 我只想分類我感興趣的作品 跟角色, 剩下的就丟到其他資料夾, 第一輪我只手動分類了100多張CG, 大概有20個分 類; 跑完當然效果不怎樣, 這20幾個分類有不少分類對的, 可是不屬於這20幾個分類的項 目卻也通通被丟到這裡面。 不過這結果也很正常, 畢竟分類器是基於提供的訓練資料訓 練出來的。 再來我就把分類對的保留下來, 並且再擴充其他我感興趣的分類(作品_角色), 第一輪這 樣下來我分類好的CG已經有2000多張, 57個分類; 再來就繼續再跑一次訓練模型, 因為 已經分類好的資料更多了, 所以跑完後模型更強, 第二輪跑完並重新整理後, 已經分類好 8506張, 142個分類; 扣除掉其他類別的話, 分類器(resnext50_32x4d)的準確率已達到 96.06%, 分類器已經能幾乎辨識所有看得懂的作品角色, 而看不懂的部分就是我需要再擴 充類別, 或是不感興趣歸類到其他類別就好。 我目前估計只要再跑1~2輪, 就能把我想要的CG分類完, 其他不感興趣的部分就歸其他就 好。 另外我分類結果是直接製作Symbolic link不是複製檔案, 8500張CG只佔16MB硬碟空 間, 缺點就是如果未來我要搬移原始檔案的位置, 那我就必須寫程式批次修改所有link 檔案。 https://i.imgur.com/pzwAwKF.png
以我來說, 這個工具就是幫助我大幅減少人工整理圖庫的時間, 讓我可以比較爽快的找圖 看圖, 還有藉由可以多次rerun改善模型的方式, 不用一定要把某類一次分類完, 大幅降 低精神污染的危險, 個人還算蠻滿意這次的成果, 再來要做的就是盡量提高模型的準確 率, 減少需要人工過濾分類好的圖庫的時間~。 P.S. 理想上真的要整理圖庫, 不應該去動到原始檔案的資料, 而是建立一個資料庫, 對 每一個圖檔都建立tag標籤, 之後可以用tag的方式搜尋資料庫, 並瀏覽符合搜尋結果的圖 片。 這算是最終想做到的方案, 現在網路上也有不少圖庫網站是提供這種方式讓使用者 找圖跟瀏覽圖片, 不過這等於要把整套系統都做出來, 包含資料庫, 檔案瀏覽器, 看圖軟 體三大功能都實作才行, 要是之後檔案有動到也有資料庫遷移的問題, 個人目前還沒有那 麼偉大的夢想想去自己做這一套系統出來, 所以就先不考慮了。 -- 有空可以來搞一下, 想說改改config就能跑了, 完全沒想到可以做notebook XD 有想過搭配lbpcascade_animeface 動漫人臉識別做前處理, 後來看直接套模型acc也有 96%, 現在有再想真的有必要往這方向GO嗎XD 推成服務網站資源不知道要花多少錢, 光是使用者要把一堆圖片上傳到網站伺服器本身就 不太現實了..., 除非可以結合雲端硬碟之類的, 目前是沒有這種想法啦..., 我自己是花 4000買張GTX 1060就拿來跑了。
※ 批踢踢實業坊(ptt.cc), 來自: 223.137.1.54 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1635516042.A.4D8.html

oGsMvP: 推 剛開始會分類 後來就懶了XD 10/29 22:08

zseineo: 推 樓上ID好懷念XDD 10/29 22:08

DraperyFalls: 實作推個 10/29 22:13

Leo123457: 推Pytorch(? 10/29 22:14

longlyeagle: 要不要放個ipython-notebook範本 加點示範圖? 10/29 22:21

harryron9: 前面接一個yolo抓人臉? 但我覺得不會比較好就是 10/29 22:23

naya7415963: 這個如果出成服務會想訂閱,超需要... 10/29 22:24

ihero: 推 10/29 22:27

ihero: 一直希望有這東西 10/29 22:27

inte629l: 推實作 10/29 22:49

jerygood0208: 推 10/29 22:58

wk415937: 推,而且還是MIT License :) 10/29 23:02

qazzqaz: 推個 10/29 23:51

atbhao05: 趕快跟大家推不然別人以為我看不懂 10/29 23:53

Ikaros1110: 推實作 10/30 00:00

Ishtarasuka: 推個 10/30 01:23

Psytoolkid: 推 10/30 01:44

u5b890402: 推 10/30 02:16

kumasame14: 推 10/30 11:09

LucasChen: 推 10/30 20:48

您可能感興趣