摘要:在本文中,我將用裸體檢測(cè)問題來展示訓(xùn)練現(xiàn)代版的卷積神經(jīng)網(wǎng)絡(luò)模型與過去的研究有何區(qū)別。論文在年代中期發(fā)表,它反映了計(jì)算機(jī)視覺研究者們?cè)谑褂镁矸e神經(jīng)網(wǎng)絡(luò)之前所做的典型工作。
著名人工智能公司Clarifai近日推出了識(shí)別成人內(nèi)容的模型和API NSFW,該模型能夠很準(zhǔn)確地識(shí)別含有裸體和半裸的圖片和視頻,在Clarifai的這篇博文中,作者用裸體檢測(cè)問題來展示訓(xùn)練現(xiàn)代版的卷積神經(jīng)網(wǎng)絡(luò)模型 (convnets) 與過去的研究有何區(qū)別。
上周,我們?cè)贑larifai上正式公布了 Not Safe for Work (NSFW) 成人內(nèi)容識(shí)別模型。本周,我們一位數(shù)據(jù)科學(xué)家將帶你探索計(jì)算機(jī)是如何學(xué)會(huì)分辨裸體人物的。
警告聲明:本文內(nèi)含有用于科研用途的裸體圖片。如果你未滿十八周歲或者不宜瀏覽裸體圖片,請(qǐng)立即停止閱讀。
過去二十年里,裸體圖片的自動(dòng)檢測(cè)一直是計(jì)算機(jī)視覺領(lǐng)域的焦點(diǎn)問題,由于其豐富的研究歷史和明確的目標(biāo),該問題是了解整個(gè)領(lǐng)域發(fā)展變化的極好例子。在本文中,我將用裸體檢測(cè)問題來展示訓(xùn)練現(xiàn)代版的卷積神經(jīng)網(wǎng)絡(luò)模型 (convnets) 與過去的研究有何區(qū)別。
警告:本文內(nèi)含有未打碼的裸體圖片,敬請(qǐng)注意!
早在1996年:
此領(lǐng)域的一項(xiàng)開創(chuàng)性工作是Fleck等人完成的一個(gè)項(xiàng)目,戲稱為“尋找裸體人”。論文在90年代中期發(fā)表,它反映了計(jì)算機(jī)視覺研究者們?cè)谑褂镁矸e神經(jīng)網(wǎng)絡(luò)之前所做的典型工作。在論文的第二段,他們概括了這種技術(shù):
算法:?
— 首先,篩選出含有大量膚色區(qū)域的圖片;?
— 其次,在這些區(qū)域內(nèi)尋找長(zhǎng)條狀區(qū)域,按照人體結(jié)構(gòu)的信息用專用組合器把它們組合成可能的肢體部位,并且連接這些肢體部位。
皮膚檢測(cè)是通過對(duì)色彩空間過濾來實(shí)現(xiàn),組合皮膚區(qū)域是通過對(duì)人體建模來實(shí)現(xiàn),它將人體建模成“由相鄰圓柱體組合而成的物體,每個(gè)獨(dú)立部分的幾何形狀和各個(gè)部分之間的比例都符合人體骨架”(論文第二節(jié))。為了更好地理解實(shí)現(xiàn)這類算法的工程技術(shù),我們來看論文的圖1,作者展示了一部分他們?nèi)藶闃?gòu)造的組合規(guī)則:
圖1. 左圖:組合規(guī)則(箭頭)說明了如何合并簡(jiǎn)單的組合(如軀干)形成復(fù)雜的組合(如四肢和身體的連接)。這些規(guī)則受限于它們?cè)?維空間的相對(duì)位置,這是由于它們?cè)?維空間有特定的組合分布。虛線表示了還未實(shí)現(xiàn)的組合規(guī)則。中圖:組合器拒絕將大腿和脊椎(虛線表示的是盆骨)組合在一起,因?yàn)槿绻嗽谶@種姿勢(shì)下大腿會(huì)遮蓋軀干,使得軀干不容易被檢測(cè)到。右圖:這個(gè)臀部連接也被拒絕了。髖骨連接的限制阻止了人的大腿如此擺放。
論文中提到“在138張無限制裸體照片的測(cè)試集上,準(zhǔn)確率達(dá)到了60%,召回率達(dá)到52%”。他們還給出了一些真陽性和假陽性的圖片例子,并標(biāo)明算法檢測(cè)到的相關(guān)特征:
圖3. 成功檢測(cè)出裸體人物的典型圖片。皮膚過濾器的輸出結(jié)果如圖所示,脊椎用紅線表示,肢體連接用藍(lán)線表示,肢體與軀干連接用綠線表示。
圖6. 錯(cuò)誤地識(shí)別出裸體人物的典型對(duì)照?qǐng)D片。這些圖片含有與皮膚色彩接近的材料(動(dòng)物皮膚、木材、面包、褪色的墻面)和容易誤判為脊椎或者腰帶的結(jié)構(gòu)。組合器經(jīng)常將平行線組合搞混。
人工構(gòu)造特征的一個(gè)主要問題是特征的復(fù)雜性受到了研究院的耐心和想象力的限制。在下一節(jié)里,我們將會(huì)看到如何訓(xùn)練卷積神經(jīng)網(wǎng)絡(luò)來完成同樣的任務(wù),更精細(xì)地表征相同的數(shù)據(jù)集。
到了2014年:
深度學(xué)習(xí)研究員不再發(fā)明各種規(guī)則來表征輸入的數(shù)據(jù),而是設(shè)計(jì)網(wǎng)絡(luò)模型結(jié)構(gòu)和數(shù)據(jù)集,使得人工智能系統(tǒng)能從數(shù)據(jù)中直接學(xué)到表征的方法。然而,由于深度學(xué)習(xí)研究員并沒有明確指定網(wǎng)絡(luò)模型該如何處理給定的數(shù)據(jù)集,新的問題就產(chǎn)生了:我們?nèi)绾卫斫饩矸e神經(jīng)網(wǎng)絡(luò)的行為?
理解卷積神經(jīng)網(wǎng)絡(luò)模型的操作就需要解釋各層網(wǎng)絡(luò)的特征行為。我們將在本文的余下篇幅中介紹一個(gè)NSFW模型的早期版本,從模型頂層反推到原始輸入的像素空間。這樣能使我們明白原始輸入的什么模式能夠?qū)е绿卣骺臻g的某種特定激活(即為何一張圖片被標(biāo)記為“NSFW”)。
遮擋靈敏度
下圖是我們?cè)诮?jīng)過裁剪的Lena Soderberg圖像上使用NSFW模型,用64×64的平滑窗口,3像素移窗處理而成。
我們把每個(gè)窗口覆蓋的像素點(diǎn)傳入卷積模型,計(jì)算每個(gè)像素點(diǎn)的平均“NSFW”得分,得到左側(cè)的熱度圖。當(dāng)卷積模型發(fā)現(xiàn)某一塊裁剪的區(qū)域都屬于皮膚,它就預(yù)測(cè)為“NSFW”,在圖片中Lena身上相應(yīng)的位置顯示出一大片紅色區(qū)域。生成右側(cè)的熱度圖時(shí),我們故意遮擋一部分原始圖片,輸出1減去平均“NSFW”得分之后的差值(即“SFW”得分)。當(dāng)NSFW得分較高的區(qū)域被遮擋時(shí),“SFW”得分隨之上升,我們?cè)跓岫葓D中看到了顏色更紅的區(qū)域。下圖的兩個(gè)圖片例子分別表示在上述兩種實(shí)驗(yàn)中傳入卷積模型的兩類圖片示例:
這些遮擋實(shí)驗(yàn)的一個(gè)優(yōu)點(diǎn)就是當(dāng)分類器完全是一個(gè)黑盒的情況下照樣能夠進(jìn)行實(shí)驗(yàn)。下面是調(diào)用我們接口復(fù)現(xiàn)上述結(jié)果的代碼片段:
# NSFW occlusion experimentfrom StringIO import StringIOimport matplotlib.pyplot as pltimport numpy as npfrom PIL import Image, ImageDrawimport requestsimport scipy.sparse as spfrom clarifai.client import ClarifaiApi
CLARIFAI_APP_ID = "..."CLARIFAI_APP_SECRET = "..."clarifai = ClarifaiApi(app_id=CLARIFAI_APP_ID,
? ? ? ? ? ? ? ? ? ? ? ?app_secret=CLARIFAI_APP_SECRET,
? ? ? ? ? ? ? ? ? ? ? ?base_url="https://api.clarifai.com")def batch_request(imgs, bboxes):
? """use the API to tag a batch of occulded images"""
? assert len(bboxes) < 128
? #convert to image bytes
? stringios = [] ?for img in imgs:
? ? stringio = StringIO()
? ? img.save(stringio, format="JPEG")
? ? stringios.append(stringio) ?#call api and parse response
? output = []
? response = clarifai.tag_images(stringios, model="nsfw-v1.0") ?for result,bbox in zip(response["results"], bboxes):
? ? nsfw_idx = result["result"]["tag"]["classes"].index("sfw")
? ? nsfw_score = result["result"]["tag"]["probs"][nsfw_idx]
? ? output.append((nsfw_score, bbox)) ?return outputdef build_bboxes(img, boxsize=72, stride=25):
? """Generate all the bboxes used in the experiment"""
? width = boxsize
? height = boxsize
? bboxes = [] ?for top in range(0, img.size[1], stride): ? ?for left in range(0, img.size[0], stride):
? ? ? bboxes.append((left, top, left+width, top+height)) ?return bboxesdef draw_occulsions(img, bboxes):
? """Overlay bboxes on the test image"""
? images = [] ?for bbox in bboxes:
? ? img2 = img.copy()
? ? draw = ImageDraw.Draw(img2)
? ? draw.rectangle(bbox, fill=True)
? ? images.append(img2) ?return imagesdef alpha_composite(img, heatmap):
? """Blend a PIL image and a numpy array corresponding to a heatmap in a nice way"""
? if img.mode == "RBG":
? ? img.putalpha(100)
? cmap = plt.get_cmap("jet")
? rgba_img = cmap(heatmap)
? rgba_img[:,:,:][:] = 0.7 #alpha overlay
? rgba_img = Image.fromarray(np.uint8(cmap(heatmap)*255)) ?return Image.blend(img, rgba_img, 0.8)def get_nsfw_occlude_mask(img, boxsize=64, stride=25):
? """generate bboxes and occluded images, call the API, blend the results together"""
? bboxes = build_bboxes(img, boxsize=boxsize, stride=stride) ?print "api calls needed:{}".format(len(bboxes))
? scored_bboxes = []
? batch_size = 125
? for i in range(0, len(bboxes), batch_size):
? ? bbox_batch = bboxes[i:i + batch_size]
? ? occluded_images = draw_occulsions(img, bbox_batch)
? ? results = batch_request(occluded_images, bbox_batch)
? ? scored_bboxes.extend(results)
? heatmap = np.zeros(img.size)
? sparse_masks = [] ?for idx, (nsfw_score, bbox) in enumerate(scored_bboxes):
? ? mask = np.zeros(img.size)
? ? mask[bbox[0]:bbox[2], bbox[1]:bbox[3]] = nsfw_score?
? ? Asp = sp.csr_matrix(mask)
? ? sparse_masks.append(Asp)
? ? heatmap = heatmap + (mask - heatmap)/(idx+1) ? ?
? return alpha_composite(img, 80*np.transpose(heatmap)), np.stack(sparse_masks)#Download full Lena imager = requests.get("https://clarifai-img.s3.amazonaws.com/blog/len_full.jpeg")
stringio = StringIO(r.content)
img = Image.open(stringio, "r")
img.putalpha(1000)#set boxsize and stride (warning! a low stride will lead to thousands of API calls)boxsize= 64stride= 48blended, masks = get_nsfw_occlude_mask(img, boxsize=boxsize, stride=stride)#vizblended.show()
盡管這類實(shí)驗(yàn)以非常直接的方式呈現(xiàn)了分類器的輸出結(jié)果,但缺點(diǎn)是輸出的結(jié)果很模糊。這使得我們不能完全深入了解模型的工作狀態(tài)以及發(fā)現(xiàn)訓(xùn)練過程中的錯(cuò)誤。
去卷積網(wǎng)絡(luò)模型
當(dāng)我們用指定數(shù)據(jù)集訓(xùn)練得到一個(gè)模型后,往往希望給出一張圖片和某個(gè)類別,然后想從模型中得到諸如“我們?cè)撊绾胃淖冞@張圖片使其看起來更像是屬于那個(gè)類別的”之類的答案。針對(duì)這類問題,我們使用去卷積網(wǎng)絡(luò)模型(deconvnet),Zeiler和Fergus014年論文的第二節(jié):
下圖展示的是我們用去卷積模型對(duì)Lena照片的處理結(jié)果,顯示了我們?cè)撊绾涡揎桳ena圖片使其更像一張色情圖片(作者注:這類使用的去卷積模型需要傳入一張正方形的圖片 —— 我們將Lena的完整圖片填補(bǔ)成合適的尺寸):
Barbara 是Lena的G級(jí)(無限制級(jí))版本。根據(jù)我們的去卷積模型,我們給她加上紅唇后看起來更像PG級(jí)(可能不適宜兒童)圖片。
這張圖片是Ursula Andress 在電影《007之諾博士》中飾演Honey Rider的劇照,2003年被英國調(diào)查評(píng)選為“銀幕上100個(gè)性感瞬間”的第一位:
上述實(shí)驗(yàn)的一個(gè)顯著特點(diǎn)就是卷積模型學(xué)習(xí)到了紅唇和肚臍是“NSFW”得分的指標(biāo)。這似乎意味著我們“SFW”訓(xùn)練數(shù)據(jù)集中所包含的紅唇和肚臍圖片還不夠。如果我們只是用準(zhǔn)確率/召回率和ROC曲線(如下所示 – 測(cè)試集大小為428,271)來評(píng)價(jià)我們的模型,我們永遠(yuǎn)也無法發(fā)現(xiàn)這個(gè)問題,因?yàn)槲覀兊臏y(cè)試數(shù)據(jù)集有著同樣的缺陷。這里就是訓(xùn)練基于規(guī)則的分類器與現(xiàn)代人工智能研究的本質(zhì)差別之一。相對(duì)于重新人工構(gòu)造特征,我們重新設(shè)計(jì)訓(xùn)練數(shù)據(jù)集直到挖掘出更優(yōu)質(zhì)的特征。
最后,我們機(jī)智地在確定是色情圖片的數(shù)據(jù)集上運(yùn)行去卷積模型,確保模型學(xué)到的特征真的和明顯的nsfw所對(duì)應(yīng):
這里,我們能清楚地看到卷積模型正確地學(xué)到了男女生殖器等器官 —— 我們模型應(yīng)該標(biāo)識(shí)的部位。而且,模型發(fā)現(xiàn)的特征遠(yuǎn)比研究員人工構(gòu)造的特征更細(xì)化和復(fù)雜,有助于我們理解使用卷積模型識(shí)別NSFW圖片的主要提升點(diǎn)。
來源:http://blog.clarifai.com/what-convolutional-neural-networks-see-at-when-they-see-nudity/#.Vy3EN4RcSkr
原文標(biāo)題:WHAT CONVOLUTIONAL NEURAL NETWORKS LOOK AT WHEN THEY SEE NUDITY?
作者:Ryan Compton?
譯者:趙屹華 審校:劉翔宇?
歡迎加入本站公開興趣群商業(yè)智能與數(shù)據(jù)分析群
興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價(jià)值的辦法,實(shí)際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉庫,數(shù)據(jù)挖掘工具,報(bào)表系統(tǒng)等全方位知識(shí)
QQ群:81035754
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/4336.html
摘要:以攻擊模型為例,介紹生成攻擊樣本的基本原理。總結(jié)本章介紹了對(duì)抗樣本的基本原理,并以最簡(jiǎn)單的梯度下降算法演示了生成對(duì)抗樣本的基本過程,大家可能會(huì)因?yàn)樗男嗜绱说投∠笊羁獭?對(duì)抗樣本是機(jī)器學(xué)習(xí)模型的一個(gè)有趣現(xiàn)象,攻擊者通過在源數(shù)據(jù)上增加人類難以通過感官辨識(shí)到的細(xì)微改變,但是卻可以讓機(jī)器學(xué)習(xí)模型接受并做出錯(cuò)誤的分類決定。一個(gè)典型的場(chǎng)景。概述對(duì)抗樣本是機(jī)器學(xué)習(xí)模型的一個(gè)有趣現(xiàn)象,攻擊者通過在源數(shù)...
摘要:在計(jì)算機(jī)視覺領(lǐng)域,對(duì)卷積神經(jīng)網(wǎng)絡(luò)簡(jiǎn)稱為的研究和應(yīng)用都取得了顯著的成果。文章討論了在卷積神經(jīng)網(wǎng)絡(luò)中,該如何調(diào)整超參數(shù)以及可視化卷積層。卷積神經(jīng)網(wǎng)絡(luò)可以完成這項(xiàng)任務(wù)。 在深度學(xué)習(xí)中,有許多不同的深度網(wǎng)絡(luò)結(jié)構(gòu),包括卷積神經(jīng)網(wǎng)絡(luò)(CNN或convnet)、長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)和生成對(duì)抗網(wǎng)絡(luò)(GAN)等。在計(jì)算機(jī)視覺領(lǐng)域,對(duì)卷積神經(jīng)網(wǎng)絡(luò)(簡(jiǎn)稱為CNN)的研究和應(yīng)用都取得了顯著的成果。CNN網(wǎng)絡(luò)最...
摘要:而在卷積神經(jīng)網(wǎng)絡(luò)中,這兩個(gè)神經(jīng)元可以共用一套參數(shù),用來做同一件事情。卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)卷積神經(jīng)網(wǎng)絡(luò)的基本結(jié)構(gòu)如圖所示從右到左,輸入一張圖片卷積層池化層卷積層池化層展開全連接神經(jīng)網(wǎng)絡(luò)輸出。最近幾天陸續(xù)補(bǔ)充了一些線性回歸部分內(nèi)容,這節(jié)繼續(xù)機(jī)器學(xué)習(xí)基礎(chǔ)部分,這節(jié)主要對(duì)CNN的基礎(chǔ)進(jìn)行整理,僅限于基礎(chǔ)原理的了解,更復(fù)雜的內(nèi)容和實(shí)踐放在以后再進(jìn)行總結(jié)。卷積神經(jīng)網(wǎng)絡(luò)的基本原理 前面對(duì)全連接神經(jīng)網(wǎng)絡(luò)...
摘要:而使用某些特定的表示方法更容易從實(shí)例中學(xué)習(xí)任務(wù)例如,人臉識(shí)別或面部表情識(shí)別。維基百科關(guān)于深度學(xué)習(xí)的應(yīng)用,網(wǎng)上有非常多的出色案例,伯樂在線在本文摘錄個(gè)。 深度學(xué)習(xí)是機(jī)器學(xué)習(xí)中一種基于對(duì)數(shù)據(jù)進(jìn)行表征學(xué)習(xí)的方法。觀測(cè)值(例如一幅圖像)可以使用多種方式來表示,如每個(gè)像素強(qiáng)度值的向量,或者更抽象地表示成一系列邊、特定形狀的區(qū)域等。而使用某些特定的表示方法更容易從實(shí)例中學(xué)習(xí)任務(wù)(例如,人臉識(shí)別或面部表情...
摘要:而加快推動(dòng)這一趨勢(shì)的,正是卷積神經(jīng)網(wǎng)絡(luò)得以雄起的大功臣。卷積神經(jīng)網(wǎng)絡(luò)面臨的挑戰(zhàn)對(duì)的深深的質(zhì)疑是有原因的。據(jù)此,也斷言卷積神經(jīng)網(wǎng)絡(luò)注定是沒有前途的神經(jīng)膠囊的提出在批判不足的同時(shí),已然備好了解決方案,這就是我們即將討論的膠囊神經(jīng)網(wǎng)絡(luò),簡(jiǎn)稱。 本文作者 張玉宏2012年于電子科技大學(xué)獲計(jì)算機(jī)專業(yè)博士學(xué)位,2009~2011年美國西北大學(xué)聯(lián)合培養(yǎng)博士,現(xiàn)執(zhí)教于河南工業(yè)大學(xué),電子科技大學(xué)博士后。中國計(jì)...
閱讀 3441·2021-11-15 11:39
閱讀 1599·2021-09-22 10:02
閱讀 1333·2021-08-27 16:24
閱讀 3620·2019-08-30 15:52
閱讀 3452·2019-08-29 16:20
閱讀 850·2019-08-28 18:12
閱讀 580·2019-08-26 18:27
閱讀 745·2019-08-26 13:32