開發(fā)一款負(fù)體驗的AI產(chǎn)品,我體會到了什么?
我認(rèn)為這個社會發(fā)展地很快,但對于小孩以及青少年的保護(hù)也越來越弱了。因此,我覺得社會有必要也有義務(wù)去設(shè)立一些規(guī)則使小朋友盡可能少受到不良信息的傷害。我覺得小事先從我做起,我先來開發(fā)一款屏蔽黃圖的瀏覽器擴(kuò)展產(chǎn)品。
當(dāng)大家看到這個標(biāo)題時可能會問:什么是負(fù)體驗的產(chǎn)品?
其實很簡單:就是用了這款產(chǎn)品,在某些場景下你可能得到不良的體驗。大家心里可能會有100個問號,那你開發(fā)這款產(chǎn)品出來干嘛?
答案也很簡單,我覺得開發(fā)這款產(chǎn)品是一件非常有必要的事情。
今年我大部分的時間都花在研究人工智能和寫書上,在快要到10月份的時候,我大學(xué)畢業(yè)時立下的“一年開發(fā)一個產(chǎn)品”目標(biāo)還沒開始實現(xiàn),我覺得不能再這樣拖下去了,于是開始構(gòu)思今年要做什么。
我認(rèn)為獨立完成一個項目是一個很好的學(xué)習(xí)機會,而且我不愿意錯過人工智能這個浪潮,所以我決定今年的產(chǎn)品是跟人工智能有關(guān)的。在10月的時候我開始去學(xué)習(xí)深度學(xué)習(xí)相關(guān)內(nèi)容,在這里要推薦一本非常不錯的書籍,名叫《Python深度學(xué)習(xí)》,它是Keras之父的最新之作,深入淺出地介紹了深度學(xué)習(xí)的相關(guān)知識和工程。
從10月份到現(xiàn)在,雖然我的知識還是只有半桶水,但我深深覺得,深度學(xué)習(xí)比前端開發(fā)和手機開發(fā)有趣多了,如果5年前已有相關(guān)知識的話,我現(xiàn)在應(yīng)該不是一名交互設(shè)計師了……
Python深度學(xué)習(xí)
我究竟要做什么產(chǎn)品?
這個問題困擾了我好幾天。
我希望這款產(chǎn)品開發(fā)成本不是很高而且是有意義的;目前Google已經(jīng)開源了Tensorflow.JS,它可以讓開發(fā)者在瀏覽器上進(jìn)行深度學(xué)習(xí)的運算和開發(fā),基于這三個原因我把目標(biāo)鎖定在開發(fā)一款瀏覽器擴(kuò)展上(因為我認(rèn)為從零開發(fā)一款手機AI應(yīng)用不太實際,而且沒有人會因為AI兩個字而去使用你的產(chǎn)品)。
目前Tensorflow.JS已經(jīng)逐漸完善,并且提供了人臉識別、肢體識別等API,但精度不是很高,而且每個用戶的電腦前置攝像頭拍攝效果很差,所以我想象不出這些API對我來說有什么用;在某天和別人聊到鑒黃技術(shù)的時候,我靈機一動并確定了這個產(chǎn)品要做什么:我要做一款A(yù)I鑒黃瀏覽器擴(kuò)展,它能屏蔽掉網(wǎng)頁上的黃圖。
現(xiàn)在大家應(yīng)該知道這為什么是一款負(fù)體驗的產(chǎn)品了,因為它很可能會讓某些用戶在瀏覽網(wǎng)頁過程中產(chǎn)生負(fù)面體驗:黃圖被屏蔽了。
為什么我要做這款產(chǎn)品?
回想過去,我們以前獲取信息是很不方便的,沒有相關(guān)途徑可能都不知道怎么去找張黃圖(我認(rèn)為這對于一個處于青春期的青少年來說是件非常正常而且能夠理解的事情),我猜這對大部分青年的成長也是有好處的。但是現(xiàn)在的社會太開放了,而且很容易就能找到想找的內(nèi)容。
先不說各種網(wǎng)絡(luò)暴力充斥著這個社會,更重要的是有些不法分子會利用黃色、暴力內(nèi)容以及青少年的沖動和好奇心理去毒害青少年的思想。
例如:通過一個含有黃圖的小廣告引導(dǎo)用戶去瀏覽黃色、暴力、賭博等非法網(wǎng)站,一些無知的青少年可能因為一時沖動而沾染上不良的嗜好,比如黃賭毒等。而父母親也很難發(fā)現(xiàn)自家小孩發(fā)生的變化(畢竟現(xiàn)在的小朋友每個人都有一臺手機,偷偷看個黃色網(wǎng)站父母是很難發(fā)現(xiàn)的),最后的結(jié)局就是覆水難收。
我認(rèn)為:這個社會是發(fā)展得很快,但對于小孩以及青少年的保護(hù)也越來越弱了。
因此,我覺得社會有必要而且有義務(wù)去設(shè)立一些規(guī)則使小朋友盡可能少受到不良信息的傷害,所以我覺得小事先從我做起,我先來開發(fā)一款屏蔽黃圖的瀏覽器擴(kuò)展產(chǎn)品。(深度學(xué)習(xí)+鑒黃+客戶端開發(fā)可以說是天作之合,既然我們不能從源頭鏟除相關(guān)的產(chǎn)業(yè),那我們就從離小朋友最近的屏幕進(jìn)行屏蔽。當(dāng)AI鑒黃引擎識別到網(wǎng)頁內(nèi)容有黃色圖片時,瀏覽器可以第一時間將此屏蔽。)
整個項目開發(fā)時間大概花了兩周左右,期間最花時間的是如何提高整個擴(kuò)展的性能。由于圖片識別需要一定的時間,為了盡可能降低整個圖像識別時間,提升用戶瀏覽網(wǎng)頁的體驗,我在整個項目中考慮了以下方案:
- 為了解決圖片因為跨域而無法識別這個問題,我在前期使用了Canvas重繪img元素這個方案,但重繪每張圖會多帶來500ms,后面優(yōu)化時改用了XHR方式將圖片轉(zhuǎn)換為Base64格式進(jìn)行識別,前期準(zhǔn)備時間降至10ms。
- 由于各種正常途徑都無法將識別模型放在本地,用戶在清除完緩存的情況下打開瀏覽器都需要從服務(wù)器重新獲取模型數(shù)據(jù)(Inception V3模型約為90M,MobileNet模型約為9M,最后采用了后者),這樣不僅增加了服務(wù)器成本,同時用戶的體驗會大大降低。在經(jīng)歷了多次嘗試后,我通過一些小聰明成功地將本地模型路徑轉(zhuǎn)換為URL,用戶安裝擴(kuò)展后可以立即使用,這里使下載模型的時間成本降至為0。
- 由于網(wǎng)頁是單線程的,這意味著網(wǎng)頁加載和圖片識別不能同時進(jìn)行。在這里我嘗試了Web Worker的方案,它能夠在瀏覽器內(nèi)多線程運行其他程序。很可惜的是,Tensorflow.JS涉及到DOM操作,導(dǎo)致在Web Worker內(nèi)Tensorflow無法使用,整個網(wǎng)頁瀏覽體驗無法繼續(xù)提升。
- 每張圖片的識別需要90ms左右,一個包含了上百張圖的大型網(wǎng)站可能要識別很久時間,為了解決這個問題,我會在未來的迭代中考慮將圖片打包成Batch進(jìn)行識別(由于現(xiàn)在還沒學(xué)會……),聽說這個方案能使32張圖片的識別時間降至幾百毫秒。
在深度學(xué)習(xí)方面我采用遷移學(xué)習(xí)的方式對MobileNet上層結(jié)構(gòu)進(jìn)行重寫,當(dāng)我把項目快做完的時候才發(fā)現(xiàn)鑒黃沒有想象中那么簡單,原來這是一個困擾計算機科學(xué)家十幾年的難題Orz!
在這里我總結(jié)一下項目里遇到的坑:
- 我在12.17號前上Tumblr爬了數(shù)萬張照片,并辛辛苦苦將數(shù)千張圖分門別類。但要進(jìn)行分類?是根據(jù)實體還是動作進(jìn)行分類?項目前期我采用了后者方案,當(dāng)時我天真的認(rèn)為動作是抽象的,搞定體位動作識別就應(yīng)該沒問題了,最后識別出來的效果非常差,有些時候模型會把一只可愛小狗識別成黃圖,為了提高整體的準(zhǔn)確率我后續(xù)很苦逼地把圖片按照實體重新進(jìn)行分類,效果有所提升。
- 由于第一次生成的模型識別效果太差,我反思了一下有可能是照片太花哨的緣故導(dǎo)致機器不能識別重點,所以我又辛辛苦苦地將所有照片的重點內(nèi)容給裁剪出來,最后識別效果大幅度提升。
- 在項目的最后期間,我找到了雅虎提供的NSFW開源模型(NSFW, Not Safe For Work),它的準(zhǔn)確度比我的模型高很多,可惜的是在模型轉(zhuǎn)換為JavaScript版本時由于API缺失導(dǎo)致模型轉(zhuǎn)換失敗。
- 項目前期我曾考慮過先把網(wǎng)頁的全部圖片識別完再呈現(xiàn)給用戶,但由于性能問題會嚴(yán)重影響到整個的網(wǎng)頁瀏覽體驗,所以我最終還是放棄了該想法,策略改為優(yōu)先顯示圖片,識別到黃圖時將之模糊。
在整個項目做完后,我認(rèn)為這個項目的最終結(jié)果是很不完美的。除了我個人能力有限以外,我認(rèn)為更多是現(xiàn)有條件不足而導(dǎo)致的,例如Tensorflow不能在Web Worker內(nèi)運行,導(dǎo)致不能脫離主線程,在多線程內(nèi)進(jìn)行識別圖片。
還有就是整個模型的識別效果真的差強人意,我反思了一下為什么效果這么差,我認(rèn)為有以下幾個原因:
- 人類更多是通過經(jīng)驗和語義進(jìn)行思考的(人類可以通過衣著打扮、裸露程度、姿勢動作、場景氛圍、表情等方式判斷這張圖是否包含色情內(nèi)容),而機器只能根據(jù)經(jīng)驗進(jìn)行識別(經(jīng)驗就是指你喂給機器的圖片)。
- 關(guān)于色情和情色,這是非常不一樣的。我認(rèn)為人類在這里的判斷多是主觀判斷,這對于機器來說就更難了。
- 圖片分類可以認(rèn)為是整個黃圖鑒別框架的設(shè)計,稍微把握不慎可能產(chǎn)生巨大的影響。
舉例:
- 全裸不一定是黃圖,如果機器把全裸的嬰兒照片或者世界藝術(shù)作品當(dāng)做色情圖片就會很尷尬了,因此在設(shè)計分類時需要找到一些正常的分類來做訓(xùn)練對抗。
- 如果每個分類都是單獨的器官,會不會對整張圖片的識別帶來影響?這影響是很明顯的,因為色情更多是氛圍,一個器官無法撐起整個色情氛圍,但采用器官分類這個方案能很大程度上提高某些圖片的識別準(zhǔn)確度,但對于范圍更廣的色情圖片來說作用不是很大。
- 如果每個分類都是不同的動作,會不會對整張圖片的識別帶來影響?這個影響會更大。因為動作是抽象的,而畫面里的人物特點都不一樣,導(dǎo)致機器看不懂圖里的固定特征究竟是什么,最終得出來的模型效果會非常差。
- 雅虎的NSFW模型會把圖片分成Safe和Not Safe兩個維度,如果按照雅虎的NSFW模式來設(shè)計分類的話,在沒有海量圖片的情況下最終的效果是一定最差的。
- 數(shù)據(jù)量小的情況下應(yīng)該會降低分類的作用。
雖然產(chǎn)品的最終效果不怎么樣,但我覺得這個項目還是很有意義的,起碼我能學(xué)到很多新的知識,如果這個項目能延續(xù)下去幫助到別人就好了。
我真的希望這項功能可以遷移到手機端,成為兒童安全模式的必備功能,因為現(xiàn)在的小孩更多是使用手機去獲取資訊,鑒黃技術(shù)在手機端能起到更多的作用。同時,越來越多的手機擁有AI芯片,如果能在手機底層使用圖像識別技術(shù)將大大提高整個識別速度,體驗會更佳。
明年我會持續(xù)迭代優(yōu)化整個項目,除了增加數(shù)據(jù)優(yōu)化模型外,我還會嘗試加入文字內(nèi)容識別和黃圖鏈接索引,也會考慮增加暴力、毒品、賭博等內(nèi)容識別,希望能更全面地保障兒童的上網(wǎng)體驗。如果有朋友愿意加入這個開源項目,請隨時聯(lián)系我。
2018年就要過去了,為了打破事業(yè)上的瓶頸我付出了不少的努力,同時收獲也蠻多的,希望明年自己會變得更好。最后衷心地祝福每位讀者圣誕節(jié)快樂,明年又是開心順利的一年:-)
#專欄作家#
無線翡翠臺,微信公眾號:薛志榮,人人都是產(chǎn)品經(jīng)理專欄作家。全棧開發(fā)者,專注于交互設(shè)計和人工智能設(shè)計。
本文原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理。未經(jīng)許可,禁止轉(zhuǎn)載。
題圖來自 Unsplash,基于CC0協(xié)議。
您好,很偶然的看到您的這篇文章。十分高興能看到類似的文章,雖然我不是開發(fā)從業(yè)者,但也算是互聯(lián)網(wǎng)從業(yè)者吧,因為目前在做的就是CPM這一塊的廣告投放,而廣告投放中,圖片,標(biāo)題等是十分重要的,同樣的兩段標(biāo)題,換一張圖片可能會帶來突破性的點擊量與轉(zhuǎn)化,或許您可以從投放人員的角度和思維去考慮產(chǎn)品優(yōu)化,希望能夠幫助到您。
AI的應(yīng)用場景,我認(rèn)為想法很好 ??
嘗試即獲得,敢想敢做
想學(xué)人工智能,但公司不是這方面業(yè)務(wù)的,學(xué)了不用就吸收不了,不學(xué)呢,又沒有類似的崗位可以競爭。