用其他數(shù)據(jù)集訓練KittiSeg

在win10上配置成功KittiSeg后仰禀,隨便從網(wǎng)上download了一張圖片測試一下效果,結果發(fā)現(xiàn)不work
隨意數(shù)據(jù)上的結果:




kitti數(shù)據(jù)上的結果:



估計是kitti數(shù)據(jù)集太小了单料,模型過擬合较锡,所以泛化性能低

打算自己訓練一個model,用百度road_seg的數(shù)據(jù)集。用的是seg_3的數(shù)據(jù)
對數(shù)據(jù)進行修改队伟,把label變成2分類問題

import numpy as np

import cv2

#test for one image
#img = cv2.imread('Label/Record057/Camera 6/171206_042426425_Camera_6_bin.png')
#print(img.shape)      
#img[np.where((img!=[49,49,49]).all(axis = 2))] = [255,0,0]
#img[np.where((img==[49,49,49]).all(axis = 2))] = [255,0,255]
#cv2.imwrite('a.png',img)
#image = scipy.misc.imresize(img,0.6)
#print(image.shape)

files = [line for line in open('all2.txt')]
file = files[1000:]
num = 0
for path in file:
    path = path[:-1] #這里要去掉最后的/n腔稀,這也是一個字符盆昙,不然返回空
    img = cv2.imread(path)
    print(img.shape)    
    img[np.where((img!=[49,49,49]).all(axis = 2))] = [255,0,0]
    img[np.where((img==[49,49,49]).all(axis = 2))] = [255,0,255]
    cv2.imwrite(path,img)
    print(num)
    num=num+1
    

制作并劃分train.txt val.txt
a.先制作all.txt
分別讀取圖片和label,分成兩個txt(all1.txt all2.txt),再把兩個txt合并焊虏。

import os
import glob as gb
#import cv2
all_file = 'all2.txt'
with open (all_file, 'w') as a:
        #for root, dirs,files in os.walk('ColorImage'):
        for root, dirs,files in os.walk('Label'):
            if len(dirs)  == 0:
                for i in range(len(files)):
                    if files[i][-3:] =='png':
                        file_path = root+'/'+files[i]
                        a.writelines(file_path+'\n')

合并兩個txt文件淡喜,此時發(fā)現(xiàn)圖片30331,label30350,兩者不一致炕淮,所以要對兩個txt做比較拆火,去除不匹配的。

#這種是按行來比較涂圆,同行之間才比較们镜,所以不符合自己想要的
之前每行后面都加了/n換行,在這里润歉,也算一個字符模狭,所以要去掉
#with open('all.txt','w') as a:
#    with open('all1.txt','r') as a1, open('all2.txt') as a2:
#        for line1, line2 in zip(a1,a2):
#            #print(line1[10:-5],line2[5:-9])
#            if line1[10:-5]==line2[5:-9]:
#                print('o')
#                a.writelines(line1[:-1]+' '+line2[:-1]+'\n')

with open('all.txt','w') as a:
    with open('all1.txt','r') as a1, open('all2.txt') as a2:
        lines1 = [line for line in a1]
        lines2 = [line for line in a2]
        for line1 in lines1:
            #print(line1+'a')
            for line2 in lines2:
                if line1[10:-5]==line2[5:-9]:
                    
                    a.writelines(line1[:-1]+' '+line2[:-1]+'\n')
            #print(line1[10:-5],line2[5:-9])

隨機劃分成訓練集驗證集 由于數(shù)據(jù)量太大,自己想要先驗證一下算法踩衩,所以嚼鹉,就先用1000樣本,900訓練驱富,100驗證锚赤。

from random import shuffle
def make_val_split():
    """
    Splits the Images in train and test.
    Assumes a File all.txt in data_folder.
    """

    all_file = "alls.txt"
    train_file = "trains.txt"
    test_file = "vals.txt"
    test_num = 100

    
    files = [line for line in open(all_file)]

    shuffle(files)

    train = files[:-test_num]
    test = files[-test_num:]

    #train_file = os.path.join(data_folder, train_file)
    #test_file = os.path.join(data_folder, test_file)

    with open(train_file, 'w') as file:
        for label in train:
            file.write(label)

    with open(test_file, 'w') as file:
        for label in test:
            file.write(label)
def main():
    make_val_split()

if __name__ == '__main__':
    main()

運行train.py遇到的問題:
報錯1

    image_file, gt_image_file = file.split(" ")
ValueError: too many values to unpack (expected 2)

查看了一下自己的trains.txt 發(fā)現(xiàn) ColorImage\Record008\Camera 5/171206_030617006_Camera_5.jpg Label\Record008\Camera 5/171206_030617006_Camera_5_bin.png 確實每行都有三個空格
所以需要對代碼進行修改
對kitti_seg_input.py的114行進行修改,修改后如下

  #image_file, gt_image_file = file.split(" ")
   image_file1,image_file2,gt_image_file1,gt_image_file2 = file.split(" ")
   image_file = image_file1+" "+image_file2
   gt_image_file = gt_image_file1+" "+gt_image_file2

報錯2:

ResourceExhaustedError (see above for traceback): OOM when allocating tensor with shape[1,64,2701,3367] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc
         [[Node: conv1_2/Conv2D = Conv2D[T=DT_FLOAT, data_format="NCHW", dilations=[1, 1, 1, 1], padding="SAME", strides=[1, 1, 1, 1], use_cudnn_on_gpu=true, _device="/job:localhost/replica:0/task:0/device:GPU:0"](conv1_1/Relu, conv1_2/filter/read)]]
 Allocator (GPU_0_bfc) ran out of memory trying to allocate 2.19GiB. Current allocation summary follows.

根據(jù)https://github.com/tensorflow/models/issues/3393估計可能確實是batchsize的問題褐鸥,但是线脚,自己的batchsize已經(jīng)是1了,gg 內存不夠的話,要么resize圖片浑侥,要么換簡單一點的網(wǎng)絡姊舵,
鑒于自己的圖片較大,有(2710, 3384)寓落,所以先resize一下
根據(jù)https://docs.scipy.org/doc/scipy/reference/generated/scipy.misc.imresize.html 使用scipy.misc.imresize(img,0.8) 把圖像縮小為原來的0.8括丁,0.8還是跑不起來,所以改為0.6

 img = scipy.misc.imread(image_file, mode='RGB')
 image = scipy.misc.imresize(img,0.8)
 # Please update Scipy, if mode='RGB' is not avaible
 gt_img = scp.misc.imread(gt_image_file, mode='RGB')
  gy_image = scipy.misc.imresize(gt_img,0.8)

報錯3:
train中間evaluate的時候報錯

  hypes, sess, tv_graph['image_pl'], tv_graph['inf_out'])
  File "D:\work\KittiSeg-hotfix-python3.5_support\hypes\../evals/kitti_eval.py", line 71, in evaluate
    image_file, gt_file = datum.split(" ")
ValueError: too many values to unpack (expected 2)

對kitti_eval.py進行修改 伶选,和輸入的類似 就ok了

至此史飞,開始訓練過程。

對昨天訓練好的model在自己的數(shù)據(jù)上進行測試仰税,結果發(fā)現(xiàn)mask全白祸憋,也就是說將所有的像素預測為road,排查原因肖卧。將驗證集的圖片輸入亦如此,遂將訓練集圖片輸入掸鹅,還是如此塞帐。說明擬合的時候就出了問題,所以巍沙,應該是標注出了問題葵姥。

在驗證集,訓練集上的結果:

查看.json文件

自己指定的是

"road_color" : [255,0,255],

"background_color" : [255,0,0],

沒有更改句携,和kitti的一樣榔幸,但是聯(lián)想到自己處理出來的數(shù)據(jù)是藍色的,kitti的是紅色的矮嫉,肯定有哪里不對削咆,

查看當時自己改數(shù)據(jù)的代碼


是按照kitti的改的啊,分別用取色器查看了kitti和自己的標定蠢笋,發(fā)現(xiàn)藍色分量和紅色分量的值是反的拨齐,kitti的是紅色分量為255,自己的是藍色分量255昨寞,查了一下瞻惋,opencv讀取圖片是BGR,所以BR兩個分量反了援岩,將.json文件中background_color改為[0,0,255]

重新開始訓練

以后訓練前還是要細細檢查歼狼,這種bug白白浪費了一天時間。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末享怀,一起剝皮案震驚了整個濱河市羽峰,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖限寞,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忍啸,死亡現(xiàn)場離奇詭異,居然都是意外死亡履植,警方通過查閱死者的電腦和手機计雌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玫霎,“玉大人凿滤,你說我怎么就攤上這事∈” “怎么了翁脆?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長鼻种。 經(jīng)常有香客問我反番,道長,這世上最難降的妖魔是什么叉钥? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任罢缸,我火速辦了婚禮,結果婚禮上投队,老公的妹妹穿的比我還像新娘枫疆。我一直安慰自己,他們只是感情好敷鸦,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布息楔。 她就那樣靜靜地躺著,像睡著了一般扒披。 火紅的嫁衣襯著肌膚如雪值依。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天谎碍,我揣著相機與錄音鳞滨,去河邊找鬼。 笑死蟆淀,一個胖子當著我的面吹牛拯啦,可吹牛的內容都是我干的。 我是一名探鬼主播熔任,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼褒链,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了疑苔?” 一聲冷哼從身側響起甫匹,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后兵迅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體抢韭,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年恍箭,在試婚紗的時候發(fā)現(xiàn)自己被綠了刻恭。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡扯夭,死狀恐怖鳍贾,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情交洗,我是刑警寧澤骑科,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站构拳,受9級特大地震影響咆爽,放射性物質發(fā)生泄漏。R本人自食惡果不足惜置森,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一伍掀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暇藏,春花似錦、人聲如沸濒蒋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沪伙。三九已至瓮顽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間围橡,已是汗流浹背暖混。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留翁授,地道東北人拣播。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像收擦,于是被迫代替她去往敵國和親贮配。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內容