# 會議記錄 ## 4/7 * 思考TimeDistributed的意義 * 用新的資料來測試LSTM * 試試CNN(60)和Dense(16) * 思考這樣(CNN、LSTM)到底算不算好的前處理 * **思考我們的code跟冠傑的code差在哪裡** * 冠: softmax + binary cross entropy * * 如果在seperate當中acc很高,則代表可能分辨不太出來人的差異? ## 4/28 * 不知道神經網路到底學了什麼 ## 5/5 * 想辦法 visualize LSTM * 想辦法找 feature select * sckit-learn裡面好像有 * 從上面的數據可以證明出來bidirectional是有用(正確率可以增加)的 * 因為影片倒著看也是有時序性的,所以現在的資料可以使用bidirectional * offset 不是一個好的變數名稱 * 沒有shuffle會不好的原因是因為只會抽取到最後檔案拿來當testing => 可能後面類別的東西根本沒有被train過 * 因為我們的資料train/test的npy是直接分開來,所以沒有差別 * 新的資料要加在舊的資料,不能直接取代 * 不然會像上面一樣爆炸 * representation LSTM * 目前可進行方向 * 自己想辦法增加一些只有身分的特徵 => 較困難 * 去掉主要特徵 (可以加上GAN或是Encoder或是VGG16) * [書法風格判斷與轉換](https://hackmd.io/FDyy4zJpTpKECF8PhGUQeA?view#C-%E5%AD%97%E8%B7%A1%E7%94%9F%E6%88%90--%E9%A2%A8%E6%A0%BC%E8%BD%89%E6%8F%9B) * 學長的畢業論文 ## 5/19 * 避免網路硬背下來每個人的每個動作特徵 * 只丟部分的動作資料(0.1.4.5)訓練,其他的拿去test * 嘗試兩層encoder * 第一層抽取action的feature * 第二層從action的feature抽取ID的feature * condition by * 先訓練判斷action的classifer * 再使用訓練好的結果,拿來訓練ID的classifier * 讓ID condition by action * 繼續寫完原本的code * 然後再去與單純的模型去做比較,填表 * ![](https://i.imgur.com/FEiQZJE.jpg) * 很讚,但是action classifier可能幫助不大甚至有可能會影響身份辨識的效果,可以想更多feedback * ![](https://i.imgur.com/u1CFjvt.jpg) ## 5/26 * 新模型的發現源自一場錯誤,達達的馬蹄聲,id_discriminator不是歸人,是個過客,在眾人皆以為沒有路可走,萬念俱灰之時,忽有一聲音從遠處而來,初極微,復至數十秒,豁然鼾聲如雷,驚嚇之即發現,有一龐然大物,蓋一允輝也,允輝還在睡,............,想起古人說的柳暗花明,果真誠不欺我。 * 我們萬分開心,這彷彿天上掉下來的禮物,如日月潭下起大雨,台灣買到疫苗,華懷的機率論過了一般,眼前盡是一片的光明。此時,要感謝的人實在是太多了,不如就謝天吧!!! * 有人看錯誤的模型像是棋盤,有人看錯誤的模型像是一匹布,亦有人看錯誤的模型像是綠豆糕,這,就是模型的雅量! * 「你一定又出現bug了!」Disentangling睜大眼睛說,「你怎麼這樣憑空汙我清白……」「什麼清白?我前天親眼見你被說有bug,被老師問。」Disentangling便漲紅了臉,額上的青筋條條綻出,爭辯道,「用keras的模型不能算是code有問題……keras!……套模型的事,能算有bug麼?」接連便是難懂的話,什麼「overfit」,什麼「keras」之類,引得衆人都鬨笑起來:實驗室內外充滿了快活的空氣。 -------- * 現在的結果是很不確定且沒有道理,應該先把現在的結果確認下來 * 怎樣算明確的結果 -> 能夠解釋它 * 如果現在模型跟預期差很多的話,那應該找兩個同學一起看一下code,或者是固定模型換一下確切的資料(mnist) * 如果overfit的話,有人會在fit那邊加上callback * id_classifier和actions_discriminator的目標應該要是相反的 * 前者是要辨識人,後者是要相反,辨識動作 * actions_discriminator要如何設計? * label: 就是放動作label; 然後input要用一組pair還是怎樣??? * 有幾種想法(先提想法,但這個還要再討論) * 1. 丟pair,same actions different person => true , otherwise, same person different actions -> false * 2. 如圖 ![](https://i.imgur.com/JsV8F2D.jpg) * 3. 將1,2結合 ![](https://i.imgur.com/Bwd5DkB.jpg) 或許第2組label: 同個人且不同動作,可以改成不同動作就好 * 4. 跟之前那個id_discriminator一樣,改個label而已 ![](https://i.imgur.com/S0H5V47.jpg) * 原本的那個id_discrinimator可以留下再加上actions_discriminator,就可以是新模型了 概念上是這樣: encoder : 我覺得我抓出來的feature只有包含人身分的特徵 discriminator : 不,你沒有,你看,我還可以辨識動作ㄟ,要不要再改改 encoder : 喔,是喔 discriminator : 對喔 discriminator 要盡量讓encoder出來的feature留下越少動作相關的越好,所以越分不出動作會越好 ## 6/2 * 可以用內積去做比較actions classifier出來的label,在做normalize做到0-1之間 * rabbit的那個模型可以直接用action_classifer 然後一樣做categorical 但是用negative當作負號 ![](https://i.imgur.com/CDQw7kL.png) * **可以差不多準備寫成文件了,7月底前可以投稿** * 巧恩的model的部分: ## 6/8 ## 7/12 * ID classifier的神經元數: 64-64-128-128-256-64 - 比較沒有看過這樣的參數 - 只要有四層的網路就可以處裡亂貼標籤的mnist,顯示他就已經可以硬記了 - classifer的六層好像太多了?? - 在製作auto-encoder的時候,輪流train encoder和decoder的話,那這樣的效果可能會比較差 - 有可能一開始encoder就已經把一些重要的特徵丟掉之類的 * 其實encoder是會受到classifer的影響,因為他總是會有一些feedback * 那如果一次兩個classifier有沒有可能反而讓encoder搞不清楚feedback => 老師: 那就多多觀察看看實驗結果,我覺得是有效果的,可以觀察gradient.loss的大小 * 老師: 有可能encoder怎樣都不會影響到classifier,因為現在這個classifier太強了 * 可以嘗試簡化一下model,可以改善overfit那麼嚴重的狀況 * train 一個decoder去觀察encoder修改的東西 * 老師: 每次都只有3號消失實在是太奇怪了 ## 7/26 * 取正號的時候狀況不好,也有可能是feature太複雜,導致後面的dense分不出來 * 老師: 其實動作跟身分的特徵很難完全分開來,不如把特徵畫出來(sckit-learn裡面有好東西) * 從圖像裡面判斷,如果把動作的feature拿掉後,人的feature可以分開來 => distangling才有用 * 從圖像裡面判斷,如果把動作的feature拿掉後,人的feature其實也分不開 => distangling或許沒有用 * 只從數據結果看的話,其實會很難推測出甚麼東西 * t-SNE(可以參考學長論文) * 今天有再提到猛猛學長的猛猛論文,裡面可參考與筆記如下 * 裡面有30人6種動作,因此一開始可以粗糙的分成180類 * 透過t-SNE動作特徵合併的可能性: 當動作合併之後就有鮮明的30類了 * 小小問題: 需要把6類先一起抓回來嗎,感覺既然都要畫的話就全部畫畫看? * 噢噢你是說6類,那就全部data都放進去畫ㄅ,先看需要丟什麼 * 感覺目標先從把類似學長論文的那張圖畫出來為優先 * 要一邊思考各個可能性,一邊畫圖 * [開會老師介紹t-SNE的網站](https://mropengate.blogspot.com/2019/06/t-sne.html) * ## 8/4 - 應該把train和test的t-SNE畫在同一張圖上才能比較 - 看train和test的吻合程度如何 - 為什麼data會分成兩塊 - 可能可以先畫1000筆,看能不能挑到只有某一塊的data,看到底為什麼data會區分成兩塊 * T-SNE的點要更小.更透明 * 把訓練資料和測試資料畫在同一張圖上面 * 如果兩者畫出來完全沒有什麼差別的話,那也可以解釋分類器的問題 * 也可以看出兩者的關聯性到底高不高 * 如果SVM做出來跟原本的classifier正確率沒有什麼差別,那可能就是encoder的問題? * 如果紅色分成兩大塊,則平均值有可能坐落在黑色 => 導致黑色和紅色可能分不太開(如果是在線性分割一樣 ex. XOR) * 如果有兩塊的話,只有一個單純的SVM可能就無法做線性分割 ((但可以用kernel之類的畫曲線 * 畫圖的先後順序導致圖有點看不清楚(像是我們不知道藍色下面到底有什麼) * 可以randomize之後再畫 * 如果覺得是第一次錄影和第二次錄影的差別,那就想辦法標一下那個label ## 8/16 * 討論為什麼90和60的差別 * 有可能是中間錄製兩個影片有休息 => 老師覺得機率不太大 * 為什麼會有時間的差異? * 嘗試 ## 8/23 ### disentangling 的效用在? **測試方法** 1. 速度01234都去train, 4去test,看同個人在個別速度的分布 * 無disentangling * 有disentangling * 上述的圖,無法真正地顯示出我們用完disentangling 去除掉速度特徵後,是否能幫助我們同個人中的個別速度能夠平均分散 * 所以將使用標準差來看看同個人中的每個個別速度的分散程度 2. 老師說,之前有看過資料寫說disentangling對於沒有看過的資料效果不是那麼的明顯 所以可以嘗試速度0124去train, 3去test,因為34都是跑步,如此算是有看過跑步,所以disentanglin加入後應該效果要比較好,好於無disentangling 3. train被依據身分而被分成不同堆,那一堆中不同的速度(012)是如何分布的 若 尚無disentangling,分布狀況是一區一區不是平均分布的話,那加了disengtangling應該要能幫助分散的比較平均 4. 從1.之無disentangling的tsne結果圖來看,興許速度是個次要的特徵,身分才是主要的特徵,那麼照理來說,辨認速度(若沒用disentangling去掉身分特徵)應該要很困難,也就是說若加了disentangling去掉身分特徵後,辨識速度的效果要好 5. 承上, 若 無disentangling去掉身分的時候,在同一團速度分布裡頭,身分會是一區一區的。那加了disentangling去掉身分特徵後,希望身分會散布在同一團裡面,而不會是一區一區的 6. 分成20塊的話做做看? ## 8/30 ### TSNE - 懷疑t-SNE的話,畫圖時拿掉2個人,只留前2個人 - TSNE沒辦法完善的解釋我們的資料,應該更注重feature的數據而不是feature經過TSNE,老師提出的方法包含但不限於 - trainging之間彼此的mean差值 - 如0123train/4test時,0123在特徵的mean應該要相近 * 當圖片只有兩者會搞混時(如ID的0、3),TSNE只要印出搞混得兩者(ID的0、3)即可 ### 模型 - 可能模型還是太複雜 * 當結果不穩定時(每次結果的變化很大),有可能是網路的參數太大,老師提到改善現有網路的方式/時機包含但不限於 * 減少classifier的參數/層數 * encoder出來時盡量不要使用到flatten,可以使用較多層網路將dimension慢慢下降,或者是直接把dim的提高 * flatten是個神奇的東西,他所做的mapping每次都可以差很多 * 先只看純CNN的結果,當變化量較小之後可以再加disentangling ### 資料 * 想要證明disentangling中間的意義是什麼 * 想要證明可以使他們特徵之間變得比較密集 => 幫助分類 * 現在的實驗有時沒結果,有時有結果,就看你怎麼解讀了 * 資料上的改善,老師提出的方法包含但不限於 * 可以試試看train run test walk * 可以多放一點testing data進入training data,並嘗試不同的比例 * 假設test為3,則可以在training data裡面放入30%的3以便disentangling做generalize的動作 => 確保不會有重疊的資料! * 因為可能我們traing 和testing就是差太多,多到disentangling也沒有什麼救 * 老師這邊舉了彩色mnist跟黑白mnist來解釋training和testing的差別 ### 其他也很重要的東西 - 先不要做一般化的推廣,根據我們的實驗結果解釋後(嘗試一般化) - 就現在的training去解釋 * 可看出ID好像是次要特徵,disentangling是要將主要特徵拿掉比較有意義,之後可以往辨識速度上面前進 * (前提: 去掉動作辨認人) 嘗試將人之間的差異距離拉大???