一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)

大資料文摘發表於2019-04-15

一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)

大資料文摘出品

作者:蔣寶尚

鑑黃師是一個因為“掃黃打非”的需要而設立的特殊崗位。

在網際網路色情內容暴增的情況下其在淨化網路的任務中扮演著非常重要的角色。

然而長期面對大量色情內容的刺激使這類工作者往往要承受心理、生理的雙重壓力。

機器學習和深度學習發展到了今天,造出的AI已經可以在下棋方面狂虐人類。設計個識別不雅圖片的演算法也不難實現。

GitHub 上開源了一款鑑定不雅內容的js庫NSFW JS,你可以根據他的教程,搭建屬於你自己的鑑黃客戶端,甚至都不需要讓檔案離開使用者的電腦。

NSFW:不適合在工作場合出現的內容(英語:Not Safe/Suitable For Work,縮寫:NSFW)是一個網路用語,多指裸露、暴力、色情或冒犯等不適宜公眾場合的內容。在給出含有上述內容的超連結旁標註 NSFW,用於警告觀看者。

一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)

貢獻者的背景非常複雜,例如Gant Laborde是Infinite Red的首席技術戰略家,Jamon Holmgren是Infinite Red的聯合創始人。Frank von Hoven III是Infinite Red的軟體工程師,Sean Nam和Gilbert Emerson則都是計算機專業的學生。

懶得動手的小夥伴,作者也給出了網頁版的AI,只需要把圖片上傳到網頁,只需幾秒就能出來識別結果。

先給出github專案地址和網頁地址:

網頁地址:

https://nsfwjs.com/

專案地址:

https://github.com/infinitered/nsfwjs

開啟網頁是這樣的☟

一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)

輸入圖片後的表現是這樣的☟

一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)

嗯,演算法還算準確,兩個人物露了這麼多的肉,還能準確識別這不屬於不雅內容。

注意這五個標籤的意思是:繪畫(Drawing):無害的藝術,或藝術繪畫。變態(Hentai):色情藝術,不適合大多數工作環境下觀看。中立(Neutral):一般,無害的內容。色情(Porn):不雅的內容和行為,通常涉及生殖器。性感(Sexy):不合時宜的挑釁內容。

那我們再來一張,升級一下難度☟

一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)

不錯不錯,竟然能識別出來裸體的思考者不屬於不雅內容,可以說厲害極了。

那....再來一張☟

一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)

色情藝術和繪畫藝術幾乎五五開,這讓人有點摸不著頭腦了!

資料

準確率如此優秀的模型,怎麼可能少了優質的資料做支撐。

根據專案github的介紹,這個演算法的訓練來自一位名叫Alexander Kim的資料科學家貢獻的資料集。

資料集地址:

https://github.com/alexkimxyz/nsfw_data_scraper

資料集一共將內容分為5類,分別是:hentai、sexy、neutral、drawings、porn,代表的含義和上文介紹的一樣。

一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)

除此之外,還有每個指令碼的作用也做了解釋,使用者可以做到心中有數!

一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)

這些資料集可以用來訓練影像分類器,使用CNN做出來的分類器,分辨上述的5種影像準確度可以達到91%。

一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)

資料集中,一共有227995張圖片。其中,hentai類別中有45228張;sexy類別19554張;neutral有20960張、drawings有25732張;porn類別最多,有116521張。而這些圖片,都以txt格式的形式儲存圖片的網頁連結,以drawings類別為例:


一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)


注意:注意有少數圖片的網址已經失效

另外,這個資料集的github專案,也對執行環境和以及執行方式做了介紹,需要的小夥伴可以去github地址檢視:

https://github.com/alexkimxyz/nsfw_data_scraper

如何使用

根據網站給出的部落格文章,只有三個步驟:1.獲取程式碼;2.在客戶端載入模型;3.對影像進行分類。

部落格主要展示的是node風格的用法,首先引入NSFW JS,當然,需要事先獲取ensorflowJS。

一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)

然後在 JS 檔案中匯入 Node 模組:

// Load files from the server to the client!
const model = await nsfwjs.load('/model/')

// or just use require('nsfwjs')

然後在客戶端載入模型,這個“模型”是用來評價函式的。模型的檔案可以下載,而且這些檔案是 4MB 大小的分片,便於在客戶端進行快取。在示例中,作者將它們放在 public/model/ 資料夾中。

一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)

載入模型的路徑要注意,如果你的目錄也和作者一樣,可以☟

// Load files from the server to the client!
const model = await nsfwjs.load('/model/')

現在,模型已經在客戶端的記憶體當中了,接下來做的是對頁面上的影像元素進行分類。

// Gimme that image
const img = document.getElementById('questionable_img')

// Classify the image
const predictions = await model.classify(img)
// Share results
console.log('Predictions: ', predictions)

預測在預設情況下將返回 5 個分類結果,按照概率的大小進行排序!例如:

一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)

所有概率的加起來等於1 。在使用的過程中,你可以標記關注概率超過 0.6分類,或者僅關注概率值最高的那個。

另外,模型可以會出現一定概率的誤報,原因可能是標記的資料存在偏差,隨著對資料的校正,誤報會逐漸減少,當然,這是一個漸進的過程。但是對於不雅內容,出現識別誤差要比漏報好很多。

因為是開源的,模型一直在改進,你也可以加入演算法改進的佇列當中去喲~

最後,作者建議在做一些專案的過程中要開啟你的想象力,正如下面的幻燈片說說的那樣☟

"Machine Learning does things a human can do ;trained with a lot of time and a lot of examples."

一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)


相關報導:

https://github.com/infinitered/nsfwjs

https://shift.infinite.red/avoid-nightmares-nsfw-js-ab7b176978b1

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31562039/viewspace-2641437/,如需轉載,請註明出處,否則將追究法律責任。

相關文章