一網打盡“小黃圖”!手把手教你造一隻AI鑑黃神器(內附程式碼及資料集)
大資料文摘出品
作者:蔣寶尚
鑑黃師是一個因為“掃黃打非”的需要而設立的特殊崗位。
在網際網路色情內容暴增的情況下其在淨化網路的任務中扮演著非常重要的角色。
然而長期面對大量色情內容的刺激使這類工作者往往要承受心理、生理的雙重壓力。
機器學習和深度學習發展到了今天,造出的AI已經可以在下棋方面狂虐人類。設計個識別不雅圖片的演算法也不難實現。
GitHub 上開源了一款鑑定不雅內容的js庫NSFW JS,你可以根據他的教程,搭建屬於你自己的鑑黃客戶端,甚至都不需要讓檔案離開使用者的電腦。
NSFW:不適合在工作場合出現的內容(英語:Not Safe/Suitable For Work,縮寫:NSFW)是一個網路用語,多指裸露、暴力、色情或冒犯等不適宜公眾場合的內容。在給出含有上述內容的超連結旁標註 NSFW,用於警告觀看者。
貢獻者的背景非常複雜,例如Gant Laborde是Infinite Red的首席技術戰略家,Jamon Holmgren是Infinite Red的聯合創始人。Frank von Hoven III是Infinite Red的軟體工程師,Sean Nam和Gilbert Emerson則都是計算機專業的學生。
懶得動手的小夥伴,作者也給出了網頁版的AI,只需要把圖片上傳到網頁,只需幾秒就能出來識別結果。
先給出github專案地址和網頁地址:
網頁地址:
專案地址:
開啟網頁是這樣的☟
輸入圖片後的表現是這樣的☟
嗯,演算法還算準確,兩個人物露了這麼多的肉,還能準確識別這不屬於不雅內容。
注意這五個標籤的意思是:繪畫(Drawing):無害的藝術,或藝術繪畫。變態(Hentai):色情藝術,不適合大多數工作環境下觀看。中立(Neutral):一般,無害的內容。色情(Porn):不雅的內容和行為,通常涉及生殖器。性感(Sexy):不合時宜的挑釁內容。
那我們再來一張,升級一下難度☟
不錯不錯,竟然能識別出來裸體的思考者不屬於不雅內容,可以說厲害極了。
那....再來一張☟
色情藝術和繪畫藝術幾乎五五開,這讓人有點摸不著頭腦了!
資料
資料
準確率如此優秀的模型,怎麼可能少了優質的資料做支撐。
根據專案github的介紹,這個演算法的訓練來自一位名叫Alexander Kim的資料科學家貢獻的資料集。
資料集地址:
資料集一共將內容分為5類,分別是:hentai、sexy、neutral、drawings、porn,代表的含義和上文介紹的一樣。
除此之外,還有每個指令碼的作用也做了解釋,使用者可以做到心中有數!
這些資料集可以用來訓練影像分類器,使用CNN做出來的分類器,分辨上述的5種影像準確度可以達到91%。
資料集中,一共有227995張圖片。其中,hentai類別中有45228張;sexy類別19554張;neutral有20960張、drawings有25732張;porn類別最多,有116521張。而這些圖片,都以txt格式的形式儲存圖片的網頁連結,以drawings類別為例:
注意:注意有少數圖片的網址已經失效
另外,這個資料集的github專案,也對執行環境和以及執行方式做了介紹,需要的小夥伴可以去github地址檢視:
如何使用
如何使用
根據網站給出的部落格文章,只有三個步驟:1.獲取程式碼;2.在客戶端載入模型;3.對影像進行分類。
部落格主要展示的是node風格的用法,首先引入NSFW JS,當然,需要事先獲取ensorflowJS。
然後在 JS 檔案中匯入 Node 模組:
// Load files from the server to the client!
const model = await nsfwjs.load('/model/')
// or just use require('nsfwjs')
然後在客戶端載入模型,這個“模型”是用來評價函式的。模型的檔案可以下載,而且這些檔案是 4MB 大小的分片,便於在客戶端進行快取。在示例中,作者將它們放在 public/model/ 資料夾中。
載入模型的路徑要注意,如果你的目錄也和作者一樣,可以☟
// 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 個分類結果,按照機率的大小進行排序!例如:
所有機率的加起來等於1 。在使用的過程中,你可以標記關注機率超過 0.6分類,或者僅關注機率值最高的那個。
另外,模型可以會出現一定機率的誤報,原因可能是標記的資料存在偏差,隨著對資料的校正,誤報會逐漸減少,當然,這是一個漸進的過程。但是對於不雅內容,出現識別誤差要比漏報好很多。
因為是開源的,模型一直在改進,你也可以加入演算法改進的佇列當中去喲~
最後,作者建議在做一些專案的過程中要開啟你的想象力,正如下面的幻燈片說說的那樣☟
"Machine Learning does things a human can do ;trained with a lot of time and a lot of examples."
相關報導:
https://github.com/infinitered/nsfwjs
https://shift.infinite.red/avoid-nightmares-nsfw-js-ab7b176978b1
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31562039/viewspace-2641437/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一網打盡非同步神器CompletableFuture非同步
- 一文教你如何處理不平衡資料集(附程式碼)
- 手把手教你在Python中實現文字分類(附程式碼、資料集)Python文字分類
- 一個22萬張NSFW圖片的鑑黃資料集?我有個大膽的想法……
- 機器學習博士手把手教你入門LSTM(附程式碼資料)機器學習
- “假聲音”也來了,手把手教你造一隻柯南的蝴蝶結變聲器
- 一網打盡2013最常用的NoSQL資料庫SQL資料庫
- 手把手教你生成一幅好看的AI圖片AI
- Apache Hudi核心概念一網打盡Apache
- "探索未來智慧:AI技術一網打盡!"(推薦收藏)AI
- 手把手教你入門Hadoop(附程式碼&資源)Hadoop
- 一網打盡列舉操作 .net core
- 深入SQLite,一網打盡“危險操作”SQLite
- 手把手教你搭建一個 Elasticsearch 叢集Elasticsearch
- 無需一行程式碼就能搞定機器學習的開源神器——手把手教你配置使用行程機器學習
- 手把手教你使用easyexcel匯出資料【附帶原始碼】Excel原始碼
- rocketmq-spring : 實戰與原始碼解析一網打盡MQSpring原始碼
- 透徹,分散式事務一網打盡分散式
- Python-OpenCV —— 基本操作一網打盡PythonOpenCV
- Spring IOC知識點一網打盡!Spring
- 手把手:教你用Scrapy建立你自己的資料集(附視訊)
- GoFakeIt—造資料神器Go
- 上班時間請勿開啟,158萬張鑑黃圖片資料集來嘍~
- 一網打盡當下NoSQL型別、適用場景及使用公司SQL型別
- 手把手教你從有限的資料樣本中發掘價值(附程式碼)
- 手把手教你用Python進行迴歸(附程式碼、學習資料)Python
- 手把手教你做一個簡單的VB資料庫程式資料庫
- Java集合總結【面試題+腦圖】,將知識點一網打盡!Java面試題
- 伺服器防火牆設定一網打盡伺服器防火牆
- 一網打盡JVM垃圾回收知識體系JVM
- UCI資料集詳解及其資料處理(附148個資料集及處理程式碼)
- 網際網路產品運營知識一網打盡
- 手把手:AlphaGo有啥了不起,我也能教你做一個(附Python程式碼)GoPython
- 把JavaScript標準庫之陣列一網打盡JavaScript陣列
- Base64 編碼知識,一文打盡!
- 手把手教你用Docker部署一個MongoDB叢集DockerMongoDB
- 資料包分析-抓到一隻蒼蠅
- 手把手教你造一個基於React的markdown編輯器React