PTT評價

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

看板C_Chat標題[創作] 用深度學習幫分類&整理CG作者
zmcx16
(zmcx16)
時間推噓19 推: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的方式搜尋資料庫, 並瀏覽符合搜尋結果的圖片。 這算是最終想做到的方案, 現在網路上也有不少圖庫網站是提供這種方式讓使用者找圖跟瀏覽圖片, 不過這等於要把整套系統都做出來, 包含資料庫, 檔案瀏覽器, 看圖軟體三大功能都實作才行, 要是之後檔案有動到也有資料庫遷移的問題, 個人目前還沒有那麼偉大的夢想想去自己做這一套系統出來, 所以就先不考慮了。

--

※ PTT 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.137.1.54 (臺灣)
PTT 網址

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

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

DraperyFalls10/29 22:13實作推個

Leo12345710/29 22:14推Pytorch(?

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

有空可以來搞一下, 想說改改config就能跑了, 完全沒想到可以做notebook XD

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

有想過搭配lbpcascade_animeface 動漫人臉識別做前處理, 後來看直接套模型acc也有 96%, 現在有再想真的有必要往這方向GO嗎XD

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

推成服務網站資源不知道要花多少錢, 光是使用者要把一堆圖片上傳到網站伺服器本身就 不太現實了..., 除非可以結合雲端硬碟之類的, 目前是沒有這種想法啦..., 我自己是花 4000買張GTX 1060就拿來跑了。

ihero10/29 22:27

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

※ 編輯: zmcx16 (223.137.1.54 臺灣), 10/29/2021 22:43:57

inte629l10/29 22:49推實作

jerygood020810/29 22:58

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

qazzqaz10/29 23:51推個

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

Ikaros111010/30 00:00推實作

Ishtarasuka10/30 01:23推個

Psytoolkid10/30 01:44

u5b89040210/30 02:16

kumasame1410/30 11:09

LucasChen10/30 20:48