NO IMAGE

有人稱為資料擴充,不過更多按原意翻譯為:資料增強(補充:資料增廣更準確)

資料增強的方法種類

一些常見方法,如裁剪/縮放/彩色變換/翻轉等,可參考:https://www.cnblogs.com/zhonghuasong/p/7256498.html ,海康威視也有一些資料增強的處理文件,對“裁剪”這種方法的使用更積極一些:https://zhuanlan.zhihu.com/p/23249000 ,這兩篇blog都是相類似的方法,更多是對資料增強方法上的一些考慮。但是在資料增強這一環節,大牛更保守一些,他們使用了有限的變換方法: http://blog.csdn.net/Dachao_Xu/article/details/50203785 。這篇blog中提到,一篇論文中用很大的比例去裁剪,而不做隨機裁剪,以及增加噪聲兩種方法;另外一篇只用到了水平翻轉。
論文 Some improvements on deep convolutional neural network based image classification 是對典型網路中用到的方法給出的總結,給出了三種資料增強的方法:裁剪/翻轉/顏色亮度變化。

一些操作層面的增強方法

可以參考blog: http://blog.csdn.net/l_xyy/article/details/71516071 ,使用現有工具來做這些事情。CSDN的blog中很多人提到使用Keras來做這件事,其實pytorch也有很多的增強方法整合,http://pytorch.org/tutorials/beginner/data_loading_tutorial.html#compose-transforms 。caffe也有相關的方法:http://blog.csdn.net/langb2014/article/details/51050213 。去讀它們的程式碼(在blog中有部分程式碼)也是在給定大小(比如在caffe中,變數名為crop_size,表示框的大小)然後隨機在剩下的區域隨機產生高和寬的偏移量:h_off & w_off。

對於crop的總結

crop方法在以上方法中有提到具體的做法,第1/3/5連結中用到的方法都是給定size的random crop。海康威視中提到random crop可能會偏離框選的主要內容,如一隻羊的ground truth,隨機產生的框可能只有草地。‘海’於是使用一個簡單網路得到框選區“類別的資訊概率分佈”來避免主要資訊被crop掉的情況。在上面提到的論文也是固定到了244×244,或者256×N或N*256的框隨機選擇。

SSD中的資料增強

在SSD – SSD: Single Shot MultiBox Detector 網路中,有提到:The data augmentation strategy described in Sec. 2.2 helps to improve the performance dramatically, especially on small datasets such as PASCAL VOC. The random crops generated by the strategy can be thought of as a ”zoom in” operation and can generate many larger training examples. To implement a ”zoom out” operation that creates more small training examples, we first randomly place an image on a canvas of 16× of the original image size filled with mean values before we do any random crop operation.
在SSD中作者也提到裁剪相當與zoom in放大效果,可以使網路對尺度更加不敏感,因此可以識別小的物體。通過將原圖縮小放到一個畫布上再去裁剪達到縮小的效果。在原文中的Fig.6提到了在資料增強之後SSD網路確實對小物體識別能力有很大提升。

而上面提到的Sec. 2.2提出的方法是隨機取樣,所採區塊佔原圖的大小 [0.1, 1],且長寬比取值區間為 [0.5,2]( aspect ratio is between 1/2 and 2)。最後加上一個限制條件,原ground truth的中心需要在隨機patch內(We keep the overlapped part of the ground truth box if the center of it is in the sampled patch)。等裁剪結束,影象將被縮放到固定大小,然後有一定概率(0.5)翻轉。

等SSD 提出的技巧用完之後,又用到了上面那篇論文的技巧。所有的結果集合到一塊去得到資料增強(in addition to applying some photo-metric distortions similar to those described in [14])。不過有不解的地方是怎麼處理框選區域目標的主要資訊不在random patch內怎麼辦?前面用到的隨機選取方法都是將size固定到很大的一個範圍,以防止出現這個問題。這篇文章提到的資料增強方法很是奔放。而且也沒有太多提到‘海’所遇到的問題(隨機框脫離了目標主體),其實我也一直糾結這個問題

具體實現

首先先給出一個帶標註資料的旋轉處理的blog:http://blog.csdn.net/u014540717/article/details/53301195
然後想辦法讀取訓練資料集的方法。其中xml的解析方法:http://www.runoob.com/python/python-xml.html ,用來讀取PASCAL資料的標註資料資訊。
然後隨機產生左上角點,再隨機產生一個小數,計算剩下空間(左上點到圖片長寬最大值)能產生的隨機框的長寬,用這些資料去匹配SSD中給出的幾個限制條件:
1.長寬比。2.ground truth中心點。3.計算jaccard overlap比例,留做後用(感覺這是解決怎麼避免隨機框裁剪出ground truth不重要部分的關鍵)
然後調整上面解析得到的標註資訊。