要入門機(jī)器學(xué)習(xí),一個(gè)自己感興趣又有豐富數(shù)據(jù)的領(lǐng)域再好不過(guò)了。
今天我們就來(lái)學(xué)習(xí)用Keras構(gòu)建模型,識(shí)別NSFW圖片,俗稱造個(gè)鑒黃AI。
資源來(lái)自一名印度小哥Praneeth Bedapudi,涉及圖像分類和目標(biāo)檢測(cè)兩個(gè)科目。他在GitHub上最新發(fā)布了NudeNet項(xiàng)目,包含代碼和兩個(gè)預(yù)訓(xùn)練模型:負(fù)責(zé)識(shí)別露不露的圖像分類模型和負(fù)責(zé)找出關(guān)鍵部位(以便打碼)的目標(biāo)檢測(cè)模型。
圖像分類模型很簡(jiǎn)單,能區(qū)分兩個(gè)類別:nude和safe,也就是露和不露,堪比經(jīng)典的hotdog/not hotdog。
目標(biāo)檢測(cè)模型則能檢測(cè)6個(gè)類別:不分性別的腹部、臀部,和區(qū)分了性別的不可描述部位。
資源鏈接全在文末,我們先來(lái)學(xué)習(xí)一番。
圖像分類從數(shù)據(jù)集開始
構(gòu)建一個(gè)圖像二分類模型,需要數(shù)據(jù)集當(dāng)然也要包含兩類圖像。所以,第一項(xiàng)任務(wù)就是分別搜集露的圖片(nude)和不露的圖片(safe)。
不安全的nude圖片來(lái)自三處:
一是用RipMe從website scrolller下載,這些圖片來(lái)自Reddit論壇的各種NSFW板塊;
圖片來(lái)源:https://scrolller.com/nsfw(打開請(qǐng)慎重)
下載工具:https://github.com/RipMeApp/ripme
二是P站的縮略圖。引入這些縮略圖是為了平衡圖片質(zhì)量——上邊的的Reddit圖片質(zhì)量太高了,而一個(gè)鑒黃AI,在現(xiàn)實(shí)中遇到的圖片大多是渣品質(zhì),這就需要分辨率很低的縮略圖來(lái)平衡。
三是之前廣為流傳的同類數(shù)據(jù)集,來(lái)自alexkimxyz。
原數(shù)據(jù)集的5個(gè)類別,被映射到現(xiàn)在的兩類之中。hentai和porn屬于nude,而drawings、neutral和sexy屬于safe。
搜集好數(shù)據(jù)之后,進(jìn)行標(biāo)準(zhǔn)化和去重:
#Resizingandremovingduplicatesmogrify-geometryx320*fdupes-rdN./
最終得到的不安全圖片1,78,601張P站圖片、1,21,644張Reddit圖片和1,30,266張前輩數(shù)據(jù)集圖片。
安全的圖片則有三個(gè)來(lái)源,一是alexkimxyz數(shù)據(jù)集中的普通圖片;二是Facebook資料;三是Reddit論壇上那些老少皆宜的板塊。
為什么已經(jīng)有了現(xiàn)成的數(shù)據(jù)集,還需要去后兩個(gè)來(lái)源抓取呢?
因?yàn)樾「绨l(fā)現(xiàn),前輩收集的安全圖片,有很多根本就不包含人。用這樣的數(shù)據(jù)訓(xùn)練,模型很可能學(xué)到錯(cuò)誤的特征,沒(méi)學(xué)會(huì)判斷“露不露”,直接變成了一個(gè)“有沒(méi)有人”分類器。
最終得到的安全圖片中,有68,948張來(lái)自Facebook資料、98,359張來(lái)自前輩數(shù)據(jù)集、55,137張來(lái)自Reddit。
數(shù)據(jù)收集完畢,接下來(lái)要進(jìn)行數(shù)據(jù)增強(qiáng)。這里用的是Augmentor和Keras自帶的fit_generator。
Augmentor地址:https://github.com/mdbloice/Augmentor
使用的代碼如下:
#Randomrotation,flips,zoom,distortion,contrast,skewandbrightnesspipeline.rotate(probability=0.2,max_left_rotation=20,max_right_rotation=20)pipeline.flip_left_right(probability=0.4)pipeline.flip_top_bottom(probability=0.8)pipeline.zoom(probability=0.2,min_factor=1.1,max_factor=1.5)pipeline.random_distortion(probability=0.2,grid_width=4,grid_height=4,magnitude=8)pipeline.random_brightness(probability=0.2,min_factor=0.5,max_factor=3)pipeline.random_color(probability=0.2,min_factor=0.5,max_factor=3)pipeline.random_contrast(probability=0.2,min_factor=0.5,max_factor=3)pipeline.skew(probability=0.2,magnitude=0.4)
訓(xùn)練與評(píng)估
小哥為這個(gè)任務(wù)選擇了谷歌出品的Xception模型,直接從Keras使用,輸入256x256尺寸的圖片,批次大小設(shè)為32。
而訓(xùn)練的設(shè)備,是從vast.ai租來(lái)的云服務(wù)器,帶一塊GTX 1080Ti顯卡。
Keras提供的圖像分類模型有個(gè)問(wèn)題:不帶正則化。所以,還要用下面的代碼,為每一層加上正則化(dropout或L2)。
#Forl2forlayerinmodel.layers:layer.W_regularizer=l2(..)#OrfordropoutadddropoutbetweenthefullyconnectedlayersandredefinethemodelusingfunctionalAPI.
使用SGD with momentum訓(xùn)練,模型可以在alexkimxyz數(shù)據(jù)集上收斂到0.9347的準(zhǔn)確率。
訓(xùn)練完成后,他選擇了Towards Data Science之前構(gòu)建的一個(gè)測(cè)試集來(lái)測(cè)試模型性能。
測(cè)試集:https://drive.google.com/drive/folders/18SY4oyZgTD_dh8-dc0wmsl1GvMsA7woY
測(cè)試成績(jī)?nèi)缦拢?/p>
目標(biāo)檢測(cè)還是從數(shù)據(jù)集開始
訓(xùn)練目標(biāo)檢測(cè)模型需要的數(shù)據(jù)集,和圖片分類可不一樣。分類只需要圖片和類別,而目標(biāo)檢測(cè)需要的,是用邊界框標(biāo)注了某樣?xùn)|西位置的圖片。
因此,上邊講過(guò)的數(shù)據(jù)集不能用了,新科目的數(shù)據(jù)集來(lái)自Jae Jin的團(tuán)隊(duì),包含5789張圖片,各種標(biāo)注的分布如下:
其實(shí)也就是模型能檢測(cè)出的六類目標(biāo)。
數(shù)據(jù)集沒(méi)有公開,作者在這里:https://github.com/Kadantte
有了數(shù)據(jù),還是要做一些圖像增強(qiáng)工作,隨機(jī)加入一些模糊、翻轉(zhuǎn)。使用的工具是albumentations:
https://github.com/albu/albumentations
訓(xùn)練與評(píng)估
這里的檢測(cè)模型,選擇的是FAIR推出的RetinaNet,它使用焦點(diǎn)損失(交叉熵?fù)p失的一種變體)來(lái)增強(qiáng)一階目標(biāo)檢測(cè)的性能。
檢測(cè)模型的基干使用了ResNet-101,在測(cè)試集上的成績(jī)?nèi)缦拢?/p>
除了用來(lái)指出某個(gè)部位究竟出現(xiàn)在了圖中什么位置之外,這個(gè)模型其實(shí)還可以當(dāng)成分類器來(lái)用:
如果在圖中檢測(cè)到了BUTTOCKS_EXPOSED、*_GENETALIA_EXPOSED、F_BREAST_EXPOSED這四類,就可以判定圖片NSFW,如果沒(méi)有,這張圖就是安全的。
所以,也可以用分類器的測(cè)試集來(lái)檢測(cè)這個(gè)模型的性能。
得到的成績(jī),比純粹的分類器好不少:
當(dāng)然,目標(biāo)檢測(cè)更適合實(shí)現(xiàn)的功能,是打碼。比如說(shuō)見(jiàn)到一張NSFW圖片,它就可以根據(jù)檢測(cè)到的關(guān)鍵部位,自動(dòng)遮擋:
預(yù)訓(xùn)練模型怎么用?
如果你想先用預(yù)訓(xùn)練模型看看效果,可以按照下面的安裝指南來(lái):
安裝:
pipinstallnudenetorpipinstallgit+https://github.com/bedapudi6788/NudeNet
使用分類器:
fromnudenetimportNudeClassifier
-
AI
+關(guān)注
關(guān)注
87文章
30896瀏覽量
269087 -
開源
+關(guān)注
關(guān)注
3文章
3349瀏覽量
42500
原文標(biāo)題:開源鑒黃AI新鮮出爐:代碼+預(yù)訓(xùn)練模型,還附手把手入門教
文章出處:【微信號(hào):worldofai,微信公眾號(hào):worldofai】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論