本站AI自動判斷提供您所需要的app下載:點我下載安裝,你懂的APP
夏乙 假裝發自 凹非寺
量子位 出品 | 公眾號 QbitAI
要入門機器學習,一個自己感興趣又有豐富數據的領域再好不過了。
今天我們就來學習用Keras構建模型,識別NSFW圖片,俗稱造個鑒黃AI。
資源來自一名印度小哥Praneeth Bedapudi,涉及圖像分類和目標檢測兩個科目。他在GitHub上最新發布了NudeNet項目,包含代碼和兩個預訓練模型:負責識別露不露的圖像分類模型和負責找出關鍵部位(以便打碼)的目標檢測模型。
圖像分類模型很簡單,能區分兩個類別:nude和safe,也就是露和不露,堪比經典的hotdog/not hotdog。
目標檢測模型則能檢測6個類別:不分性別的腹部、臀部,和區分了性別的不可描述部位。
資源鏈接全在文末,我們先來學習一番。
圖像分類
從數據集開始
構建一個圖像二分類模型,需要數據集當然也要包含兩類圖像。所以,第一項任務就是分別搜集露的圖片(nude)和不露的圖片(safe)。
不安全的nude圖片來自三處:
一是用RipMe從website scrolller下載,這些圖片來自Reddit論壇的各種NSFW板塊;
圖片來源:
https://scrolller.com/nsfw(打開請慎重)
下載工具:
https://github.com/RipMeApp/ripme
二是P站的縮略圖。引入這些縮略圖是為了平衡圖片質量——上邊的的Reddit圖片質量太高了,而一個鑒黃AI,在現實中遇到的圖片大多是渣品質,這就需要分辨率很低的縮略圖來平衡。
三是之前廣為流傳的同類數據集,來自alexkimxyz。
原數據集的5個類別,被映射到現在的兩類之中。hentai和porn屬于nude,而drawings、neutral和sexy屬于safe。
搜集好數據之后,進行標準化和去重:
# Resizing and removing duplicates mogrify -geometry x320 * fdupes -rdN ./
最終得到的不安全圖片1,78,601張P站圖片、1,21,644張Reddit圖片和1,30,266張前輩數據集圖片。
安全的圖片則有三個來源,一是alexkimxyz數據集中的普通圖片;二是Facebook資料;三是Reddit論壇上那些老少皆宜的板塊。
為什么已經有了現成的數據集,還需要去后兩個來源抓取呢?
因為小哥發現,前輩收集的安全圖片,有很多根本就不包含人。用這樣的數據訓練,模型很可能學到錯誤的特征,沒學會判斷“露不露”,直接變成了一個“有沒有人”分類器。
最終得到的安全圖片中,有68,948張來自Facebook資料、98,359張來自前輩數據集、55,137張來自Reddit。
數據收集完畢,接下來要進行數據增強。這里用的是Augmentor和Keras自帶的fit_generator。
Augmentor地址:
https://github.com/mdbloice/Augmentor
使用的代碼如下:
# Random rotation, flips, zoom, distortion, contrast, skew and brightness pipeline.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)
訓練與評估
小哥為這個任務選擇了谷歌出品的Xception模型,直接從Keras使用,輸入256x256尺寸的圖片,批次大小設為32。
而訓練的設備,是從vast.ai租來的云服務器,帶一塊GTX 1080Ti顯卡。
Keras提供的圖像分類模型有個問題:不帶正則化。所以,還要用下面的代碼,為每一層加上正則化(dropout或L2)。
# For l2 for layer in model.layers: layer.W_regularizer = l2(..) # Or for dropout add dropout between the fully connected layers and redefine the model using functional API.
使用SGD with momentum訓練,模型可以在alexkimxyz數據集上收斂到0.9347的準確率。
訓練完成后,他選擇了Towards Data Science之前構建的一個測試集來測試模型性能。
測試集:
https://drive.google.com/drive/folders/18SY4oyZgTD_dh8-dc0wmsl1GvMsA7woY
測試成績如下:
目標檢測
還是從數據集開始
訓練目標檢測模型需要的數據集,和圖片分類可不一樣。分類只需要圖片和類別,而目標檢測需要的,是用邊界框標注了某樣東西位置的圖片。
因此,上邊講過的數據集不能用了,新科目的數據集來自Jae Jin的團隊,包含5789張圖片,各種標注的分布如下:
其實也就是模型能檢測出的六類目標。
數據集沒有公開,作者在這里:
https://github.com/Kadantte
有了數據,還是要做一些圖像增強工作,隨機加入一些模糊、翻轉。使用的工具是albumentations:
https://github.com/albu/albumentations
訓練與評估
這里的檢測模型,選擇的是FAIR推出的RetinaNet,它使用焦點損失(交叉熵損失的一種變體)來增強一階目標檢測的性能。
檢測模型的基干使用了ResNet-101,在測試集上的成績如下:
除了用來指出某個部位究竟出現在了圖中什么位置之外,這個模型其實還可以當成分類器來用:
如果在圖中檢測到了BUTTOCKS_EXPOSED、*_GENETALIA_EXPOSED、F_BREAST_EXPOSED這四類,就可以判定圖片NSFW,如果沒有,這張圖就是安全的。
所以,也可以用分類器的測試集來檢測這個模型的性能。
得到的成績,比純粹的分類器好不少:
當然,目標檢測更適合實現的功能,是打碼。比如說見到一張NSFW圖片,它就可以根據檢測到的關鍵部位,自動遮擋:
預訓練模型怎么用?
如果你想先用預訓練模型看看效果,可以按照下面的安裝指南來:
安裝:
pip install nudenet or pip install git+https://github.com/bedapudi6788/NudeNet
使用分類器:
from nudenet import NudeClassifier classifier = NudeClassifier('classifier_checkpoint_path') classifier.classify('path_to_nude_image') # {'path_to_nude_image': {'safe': 5.8822202e-08, 'nude': 1.0}}
使用目標檢測器:
from nudenet import NudeDetector detector = NudeDetector('detector_checkpoint_path') # Performing detection detector.detect('path_to_nude_image') # [{'box': [352, 688, 550, 858], 'score': 0.9603578, 'label': 'BELLY'}, {'box': [507, 896, 586, 1055], 'score': 0.94103414, 'label': 'F_GENITALIA'}, {'box': [221, 467, 552, 650], 'score': 0.8011624, 'label': 'F_BREAST'}, {'box': [359, 464, 543, 626], 'score': 0.6324697, 'label': 'F_BREAST'}] # Censoring an image detector.censor('path_to_nude_image', out_path='censored_image_path', visualize=False)
傳送門
GitHub:
https://github.com/bedapudi6788/NudeNet
教程原文 - 圖像分類篇:
https://medium.com/@praneethbedapudi/nudenet-an-ensemble-of-neural-nets-for-nudity-detection-and-censoring-d9f3da721e3?sk=e19cdcc610e63b16274dd659050ea955
教程原文 - 目標檢測篇:
https://medium.com/@praneethbedapudi/nudenet-an-ensemble-of-neural-nets-for-nudity-detection-and-censoring-c8fcefa6cc92?sk=f0a4786bf005cd4b7e89cf625f109af0
另外,你可能更關心數據集……小哥在Reddit論壇上對網友說,他收集的數據集大約有37GB大,還沒有找到地方上傳,但“絕對會共享出來”,到時候會在這里更新鏈接:
https://www.reddit.com/r/MachineLearning/comments/b78j1q/p_nudity_detection_and_censoring_in_images_with/
量子位之前介紹過一些數據集(和模型),先用它們練手也行:
和他們一起加油吧~
— 完 —
誠摯招聘
量子位正在招募編輯/記者,工作地點在北京中關村。期待有才氣、有熱情的同學加入我們!相關細節,請在量子位公眾號(QbitAI)對話界面,回復“招聘”兩個字。
量子位 QbitAI · 頭條號簽約作者
?'?' ? 追蹤AI技術和產品新動態
在Rose Kalemba14歲時被一伙小混混殘忍地性侵后,她被侮辱的視頻還被傳上了著名的“P站”,并被社交媒體瘋傳。
幾乎沒有人譴責襲擊她的混混,沒有人譴責上傳或轉發視頻的人,p站無視她的哀求任由視頻賺取著超高的點擊率。
同學都罵她是個蕩婦,家長說她會勾引子自己的兒子犯罪。她的世界被毀了兩次。
十年前,Rose從一名受害者,被迫變成了一個大型性狂歡的主角,而這樣令人絕望的“色情復仇”,十年間在全世界內卻沒有任何好轉的跡象。
無人在乎的受害者當那噩夢發生在Rose身上時,她只有14歲,顫抖著坐在美國某家醫院的病床上。剛剛來做過筆錄的警察態度冰冷,主治醫生也帶著見怪不怪的表情離開了病房。
留在她身邊只有一位中年護士,她特意停下來對Rose說:“我為發生在你身上的事感到很難過”頓了一下,她聲音顫抖著繼續說到:“我的女兒也被強奸了。”
10年后,BBC用41種語言報道了Rose的事
Rose回憶,這名護士是除了父親和奶奶外唯一真心相信她的人。“她的女兒遭遇不測時,也許也像我一樣小。她相信我”
對于Rose來說,這名陌生人的善意是她多年里活下去的唯一希望,因為發生在她身上的事令人實在無法再對這世界抱有任何期待。
這個世界上有近50萬的人目睹了她被性侵的過程,卻沒人替她說話。
Rose的父親在最近接受采訪
Rose在俄亥俄州的一個小鎮長大,那里的人們常喜歡在睡前出去散步,呼吸一下新鮮空氣。2009年那個夏天的的傍晚,Rose就是這樣走在街上,恣意地享受著寧靜。
但在她散步路上的角落里突然竄出一個男子,對方用刀子頂著她,把她逼到了一輛小汽車上。
副駕駛也是個男子,兩人大概也就十八九歲,都是當地白人。Rose驚訝自己以前還和他們打過照面。
她恐懼中被帶到了鎮外的一座房子里,在那里她被綁架了12個小時,被三個人反復性侵,并一直有另一個人用攝像機記錄著全程。
他們先是狠狠地打她,用刀刺破了她的左腿,這樣她也不好逃跑。她的頭一直在流血,在不斷地被侮辱中多次昏迷,又被打醒,衣服上全是血跡。
她迷糊中記得其中一個男人掏出筆記本電腦,告訴她上面的視頻都是他們的“作品”。他們專門襲擊女性并拖來性侵,然后把視頻傳到P站賺點擊。
后來Rose回憶,那些不堪入目的視頻里,受害者絕大多數是有色人種,襲擊者似乎是白人至上主義,想要使用襲擊的方式構建某種權力結構。
她不敢想那些受害者們都怎么樣了,因為這幫混混開始威脅要殺了她。求生的本能讓她強撐著意識。
她和犯人對話,承諾自己絕不會報警,只要肯放了她。
也許是這幫人認為一個14歲的女孩先不起什么風浪,他們把她扔在離家還有半小時路的地方,一溜煙跑了。
等到進入家門時,Rose的身體已經到了極限,她的一大家子人正在準備吃午飯。渾身是血的女孩哭著告訴他們昨天發生的恐怖經歷。
父親當即報警,奶奶一直在安慰Rose。但其他家人只認為“這是你大晚上自己跑出去活該。”
Rose的煉獄,到從性侵自己的惡魔手里逃出來時,只是個開始而已。
Rose和父親
最令Rose驚訝的是當她一身是傷報警后,那個警察居然問她:“你是不是自愿和他們發生關系的?”
“我的一切遭遇在他人眼里看來就像是一個玩high了的夜晚嗎?”在報案的第二天,痛苦的女孩自殺未遂。
她在家休整了很長時間,幾個月后,她上網時發現同學們都在轉發一個鏈接,她的名字在鏈接的tag里。
當她點進去時,她又一次墜入了地獄。
色情復仇:利用別人的痛苦作樂性侵犯把她被虐待的視頻發到了P站,一段接一段,包括她當時失去意識時,他們繼續侮辱她的畫面。
她的悲慘經歷在這個網站上,和那些取悅人們的影片放在一起,被標上了“少女被打耳光哭泣”“少女被XX”“昏迷的少女被XX”等可以吸引人眼球的標題,其中一個小片段就有40萬的觀看量。
類似的色情復仇視頻下,出現了這樣的評論
Rose被摧毀了。憤怒之外是更多恐懼和創傷。她不想告訴家人,畢竟他們中的大多數都為她恥辱,不想和她扯上關系。
但獨自承受的痛苦比她想象中的殘酷多了,視頻被傳開的第二天開始,學校里每個人都開始對她指指點點。一些孩子霸凌這個無助的受害者,罵她是biao子,蕩婦。
她的同學說她是在自找的,同學的家長說她會引誘自己的孩子學壞。仿佛她才是傷害別人的人。
漸漸地,品學兼優的Rose一邊開始逃學,一邊想辦法和P站取得聯系,讓他們撤下視頻。
Rose的父親
2009年半年的時間里,她給P站的郵箱發送過數次郵件,懇求或者幾乎是乞求他們把視頻撤下來。“我是個未成年人,這是我被性侵的視頻,請你們把它刪掉吧。”
六個月,0回復,視頻還在瘋傳。從p站流到更多大大小小的色情網站。
Rose的生活已經被完全摧毀,鎮子里的每個人幾乎都看過她被侮辱的視頻,她不敢出門,怕被人罵,更怕被襲擊者再次攻擊。
類似的視頻下也有無助的受害者要求撤下視頻
幾個月后,Rose開始接受心理咨詢,她終于向心理醫生透露了襲擊者的身份。心理醫生遵守保密條例,但同時有責任向警方報案。
檢方最終逮捕并判決了三名襲擊者,但沒有一個人被判強奸罪。他們只背負了“對未成年人實施犯罪行為”這項輕罪,還獲得了緩刑。
Rose和她的家人沒有精力,也沒有財力去爭取更嚴厲的判決。
這令Rose更加恐慌,后面的每一天她只想死。對一切感到麻木,寸步不離房間。如果有人在身邊,她會想:他們是否看過這些視頻了?他們對我被強奸的事感到滿意嗎?
她再也不照鏡子,在黑暗中洗漱洗澡,被當做色情錄像上傳給她的傷害太大了。她也知道,如果還想要開始新生活,那她必須想辦法把視頻刪掉。
她終于有了主意,如果P站毫不在意受害者的想法,那么他們至少怕被告到傾家蕩產。她冒充律師注冊了一個郵箱地址,向P站發出了一封威脅采取法律措施的嚴厲警告信。
猜猜發生了什么?裝聾作啞一年多的P站,在48小時內就將Rose相關的所有視頻都刪掉了。原來不是看不見,就是不想管。
但還有很多小網站,他們沒有法律制約,不怕被告,受害者無能為力。Rose的視頻至今仍沒有完全被撤下。
每個色情網站都在吸血無論如何,攻克P站讓Rose緩過來了一些。這些年她開始嘗試用文字表達自己,在博客上,她記錄了近幾年的遭遇,有一篇文章火了起來。
很多女性和一些男性回復了她的帖子,他們都是和她類似的“色情復仇”的受害者。
色情復仇的定義是:未經當事人允許傳播的帶有性意味的影像
而P站面對Rose的指責聲明:那只是2009年的情況,那時候我們還沒被收購。現在我們嚴厲打擊非法內容,有業界最嚴格的保障措施。
的確,P站目前是同類網站中使用最先進方法審核上傳內容的網站,但真實的效果和決心卻一言難盡。
Rose的評論里,人們傾訴著自己的遭遇,從2009到2019年,在這樣的事情不斷發生。
2019年,Pornhub還被告到刪除了一個名為Girls Do porns的頻道,該頻道被22名女性起訴強迫拍攝視頻和未授權上傳,而該頻道的所有者被控非法性交易
英國廣播公司采訪了一位給Rose發郵件傾訴的女性。她被性侵的視頻在一個黃網上保留了多年,盡管她給公司發了很多封郵件,還在視頻下面留言懇求,但都沒有用。
P站等很多網站的視頻可以隨意下載,這段視頻也從一個網站下載,再上傳到另一個網站。BBC采訪到了最初上傳的網站,網站負責人還在裝傻,說完全不知道此事。
BBC立馬放出視頻圖片證據后,熟悉的事情出現了。不到48小時,視頻被刪得干干凈凈。
這就是絕大部分色情網站對于色情復仇視頻的態度,到了迫不得已的時候才會刪除。非法的網站如此,合法的網站也如此。
根據P站的數據,2019年其網站訪問量為420億次,比前年增加85億次,日均訪問量約為1.15億次,每秒1200次搜索。幾乎成為了一個超越色情服務的社交網站。
但在網站上,“少女在熟睡時被性侵”“醉酒的少女被睡”“狠狠虐待青少年”“復仇色情”等類似的標題仍然隨手就能搜到,teenager是非常受歡迎的標簽。
P站對此的態度是:言論自由,我們得尊重所有形式性幻想的表達。
那么問題來了,尊重所有性幻想,那他們敢放孌童的視頻嗎?不敢。因為法律嚴格禁止,抓到就要吃牢飯。
但針對青少年甚至與成年人的色情復仇視頻,法律沒有非常嚴格的規定。既然如此,網站當然選擇繼續吃灰色領域的福利。
一名色情報復的受害者說,色情網站非常清楚的知道他們的平臺上有令人不安的、非自愿的內容。他們知道一些人無法區分性幻想,角色扮演表演、偽造制作場景,還是真正的虐待。但仍知其不可為而為之。
Rose提到,她知道除了美國,還有很多地方的人們經受著色情復仇的打擊。在中日韓,中東和南亞甚至更頻繁,更肆無忌憚地發生著這樣的事情。
韓國女性抗議法律對偷拍視頻的無視
同樣,替受害者發聲的人寥寥無幾,甚至有很多看客或用戶因為這些色情復仇的視頻被刪,或者網站被端而惋惜。更有甚者四處“求資源”,送資源。舉報的人反而會被罵的狗血淋頭。
這是Rose最近收到的留言
利用痛苦或隱私賺錢,吸著受害者的血,這是每個色情網站都存在的現象。而相關的法律仍沒有被完善。
2015年以來,英格蘭和威爾士已將“色情復仇”行為列為刑事犯罪。“未經他人同意,以造成羞辱或困擾為目的,分享他人性資料的,最高可判處兩年監禁。不過,迄今為止,并沒有任何一個視頻平臺被追究責任。
“我的生活不是你的黃片”這是近幾年反復色情復仇的人們打出的口號。
一個受傷的人不該被反復傷害,而在這場網絡的狂歡中,至少不要再去傳播此類視頻,至少,不要再罵受害者是活該,不自重。
沒有人希望成為受害者,我們也都不應該成為加害者。
今年Rose就25歲了,她的生活逐漸走上正軌。她有幫助她走出陰影的男朋友,有可愛的狗狗。
她重新開始照鏡子,過有規律的生活,她知道自己仍在被性侵,被色情報復的“無期徒刑”中煎熬,但她不想沉默了。
她說:“對付強奸犯最有力的武器就是不再沉默。”