1. 程式人生 > >把標註TXT檔案轉化為VOC的xml檔案

把標註TXT檔案轉化為VOC的xml檔案

我自己的資料集格式為filename lable xmin ymin xmax ymax

1 通過別的模板轉換

VOC資料集的xml格式為:

  1. <annotation>
  2. <folder>VOC2007</folder>
  3. <filename>000002.jpg</filename>    //檔名  
  4. <size>                            //影象尺寸(長寬以及通道數
  5. <width>335</width>
  6. <height>500</height>
  7. <depth
    >
    3</depth>
  8. </size>
  9. <object>        //檢測到的物體
  10. <name>cat</name>    //物體類別
  11. <pose>Unspecified</pose>    //拍攝角度
  12. <truncated>0</truncated>    //是否被截斷(0表示完整
  13. <difficult>0</difficult>    //目標是否難以識別(0表示容易識別)
  14. <bndbox>                    //bounding-box(包含左下角和右上角xy座標)
  15. <xmin>139</xmin>
  16. <ymin>200</ymin>
  17. <xmax>207</xmax>
  18. <ymax>301</ymax>
  19. </bndbox>
  20. </object>
  21. </annotation>

所以我們把它當作模板然後修改成自己的資料集。注意object 可能不止一個。

轉換程式碼:

import copy
from lxml.etree import Element, SubElement, tostring, ElementTree
import 
cv2

# 修改為你自己的路徑 template_file = ‘G:\dataset\WJ-data\anno.xml’ target_dir = ‘G:\dataset\WJ-data\Annotations\image_dir = ‘G:\dataset\train\# 圖片資料夾 train_file = ‘G:\dataset\train.txt’ # 儲存了圖片資訊的txt檔案 with open(train_file) as f: trainfiles = f.readlines() # 標註資料 格式(filename label x_min y_min x_max y_max) file_names = [] tree = ElementTree()

for line in trainfiles: trainFile = line.split() file_name = trainFile[0] print(file_name)

<span style="color:#808080;"><em># 如果沒有重複,則順利進行。這給的資料集一張圖片的多個框沒有寫在一起。

if file_name not in file_names: file_names.append(file_name) lable = trainFile[1] xmin = trainFile[2] ymin = trainFile[3] xmax = trainFile[4] ymax = trainFile[5]

    tree.parse(template_file)
    root = tree.getroot()
    root.find(<span style="color:#008080;"><strong>'filename'</strong></span>).text = file_name

    <span style="color:#808080;"><em># size

sz = root.find(‘size’) im = cv2.imread(image_dir + file_name)#讀取圖片資訊 sz.find(‘height’).text = str(im.shape[0]) sz.find(‘width’).text = str(im.shape[1]) sz.find(‘depth’).text = str(im.shape[2])

    <span style="color:#808080;"><em># object 因為我的資料集都只有一個框

obj = root.find(‘object’)

    obj.find(<span style="color:#008080;"><strong>'name'</strong></span>).text = lable
    bb = obj.find(<span style="color:#008080;"><strong>'bndbox'</strong></span>)
    bb.find(<span style="color:#008080;"><strong>'xmin'</strong></span>).text = xmin
    bb.find(<span style="color:#008080;"><strong>'ymin'</strong></span>).text = ymin
    bb.find(<span style="color:#008080;"><strong>'xmax'</strong></span>).text = xmax
    bb.find(<span style="color:#008080;"><strong>'ymax'</strong></span>).text = ymax
    <span style="color:#808080;"><em># 如果重複,則需要新增object框

else: lable = trainFile[1] xmin = trainFile[2] ymin = trainFile[3] xmax = trainFile[4] ymax = trainFile[5]

    xml_file = file_name.replace(<span style="color:#008080;"><strong>'jpg'</strong></span>, <span style="color:#008080;"><strong>'xml'</strong></span>)
    tree.parse(target_dir + xml_file)<span style="color:#808080;"><em>#如果已經重複

root = tree.getroot()

    obj_ori = root.find(<span style="color:#008080;"><strong>'object'</strong></span>)

    obj = copy.deepcopy(obj_ori)  <span style="color:#808080;"><em># 注意這裡深拷貝

obj.find(‘name’).text = lable bb = obj.find(‘bndbox’) bb.find(‘xmin’).text = xmin bb.find(‘ymin’).text = ymin bb.find(‘xmax’).text = xmax bb.find(‘ymax’).text = ymax root.append(obj)

xml_file = file_name.replace(<span style="color:#008080;"><strong>'jpg'</strong></span>, <span style="color:#008080;"><strong>'xml'</strong></span>)
tree.write(target_dir + xml_file, <span style="color:#660099;">encoding</span>=<span style="color:#008080;"><strong>'utf-8'</strong></span>)</pre><p style="font-family:'-apple-system', 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);"><span style="font-size:18px;">2.將xml轉為符合YOLO的txt</span></p><p style="font-family:'-apple-system', 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);"><span style="background-color:rgb(255,255,255);">標註檔案.txt裡的資料格式是這樣的:</span><br></p><p style="font-family:'-apple-system', 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);"><span style="background-color:rgb(255,255,255);"><img src="https://img-blog.csdn.net/2018062520393841?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI5NzYyOTQx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70" alt=""><br></span></p><p style="font-family:'-apple-system', 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);">轉換程式碼如下:</p><pre onclick="hljs.copyCode(event)"><code class="language-cpp hljs"><ol class="hljs-ln" style="width:854px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-meta"># box裡儲存的是ROI感興趣區域的座標(x,y的最大值和最小值)</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"># 返回值為ROI中心點相對於圖片大小的比例座標,和ROI的w、h相對於圖片大小的比例</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-function"><span class="hljs-function">def <span class="hljs-title">convert</span><span class="hljs-params">(size, box)</span>:</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-function">    dw </span>= <span class="hljs-number">1.</span>/(size[<span class="hljs-number">0</span>])</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    dh = <span class="hljs-number">1.</span>/(size[<span class="hljs-number">1</span>])</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    x = (box[<span class="hljs-number">0</span>] + box[<span class="hljs-number">1</span>])/<span class="hljs-number">2.0</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    y = (box[<span class="hljs-number">2</span>] + box[<span class="hljs-number">3</span>])/<span class="hljs-number">2.0</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    w = box[<span class="hljs-number">1</span>] - box[<span class="hljs-number">0</span>]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    h = box[<span class="hljs-number">3</span>] - box[<span class="hljs-number">2</span>]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    x = x*dw</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    w = w*dw</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    y = y*dh</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    h = h*dh</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-keyword">return</span> (x, y, w, h)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="16"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="17"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"># 對於單個xml的處理</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="18"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">def convert_annotation(image_add):</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="19"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    # image_add進來的是帶地址的.jpg</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="20"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    #image_add = os.path.split(image_add,<span class="hljs-string">' '</span>)[<span class="hljs-number">1</span>]  # 擷取檔名</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="21"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    image_name = image_add.split()[<span class="hljs-number">0</span>]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="22"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    print(image_name)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="23"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    image_name = image_name.replace(<span class="hljs-string">'.jpg'</span>, <span class="hljs-string"><span class="hljs-string">'')  # 刪除字尾,現在只有檔名</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="24"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-string">    in_file = open('</span>G:\\dataset\\WJ-data\\Annotations\\<span class="hljs-string">' + image_name + '</span>.xml')  # 圖片對應的xml地址</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="25"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    out_file = open(<span class="hljs-string">'G:\\dataset\\WJ-data\\labels\\%s.txt'</span> % (image_name), <span class="hljs-string">'w'</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="26"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="27"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    tree = ET.parse(in_file)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="28"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    root = tree.getroot()</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="29"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="30"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    size = root.find(<span class="hljs-string">'size'</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="31"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="32"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    w = <span class="hljs-keyword">int</span>(size.find(<span class="hljs-string">'width'</span>).text)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="33"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    h = <span class="hljs-keyword">int</span>(size.find(<span class="hljs-string">'height'</span>).text)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="34"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="35"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    # 在一個XML中每個Object的迭代</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="36"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-keyword">for</span> obj in root.iter(<span class="hljs-string">'object'</span>):</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="37"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        # iter()方法可以遞迴遍歷元素/樹的所有子元素</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="38"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        difficult = obj.find(<span class="hljs-string">'difficult'</span>).text</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="39"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        cls = obj.find(<span class="hljs-string">'name'</span>).text</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="40"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        # 如果訓練標籤中的品種不在程式預定品種,或者difficult = <span class="hljs-number">1</span>,跳過此object</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="41"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        <span class="hljs-keyword">if</span> cls <span class="hljs-keyword">not</span> in classes <span class="hljs-keyword">or</span> <span class="hljs-keyword">int</span>(difficult) == <span class="hljs-number">1</span>:</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="42"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">            <span class="hljs-keyword">continue</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="43"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        cls_id = classes.index(cls)#這裡取索引,避免類別名是中文,之後執行yolo時要在cfg將索引與具體類別配對</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="44"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        xmlbox = obj.find(<span class="hljs-string">'bndbox'</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="45"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="46"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        b = (<span class="hljs-keyword">float</span>(xmlbox.find(<span class="hljs-string">'xmin'</span>).text), <span class="hljs-keyword">float</span>(xmlbox.find(<span class="hljs-string">'xmax'</span>).text), <span class="hljs-keyword">float</span>(</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="47"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">            xmlbox.find(<span class="hljs-string">'ymin'</span>).text), <span class="hljs-keyword">float</span>(xmlbox.find(<span class="hljs-string">'ymax'</span>).text))</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="48"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        bb = convert((w, h), b)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="49"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        out_file.write(str(cls_id) + <span class="hljs-string">" "</span> + <span class="hljs-string">" "</span>.join([str(a) <span class="hljs-keyword">for</span> a in bb]) + <span class="hljs-string">'\n'</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="50"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="51"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="52"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">if</span> <span class="hljs-keyword">not</span> os.path.exists(<span class="hljs-string">'G:\\dataset\\WJ-data\\labels\\'</span>):#不存在資料夾</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="53"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    os.makedirs(<span class="hljs-string">'G:\\dataset\\WJ-data\\labels\\'</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="54"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="55"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">image_adds = open(<span class="hljs-string">"G:\\dataset\\train.txt"</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="56"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">for</span> image_add in image_adds:</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="57"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    image_add = image_add.strip()</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="58"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    convert_annotation(image_add)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="59"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="60"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">print(<span class="hljs-string">"Finished"</span>)</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><p><span style="font-size:18px;">3.構建訓練集與交叉驗證集:</span></p><pre onclick="hljs.copyCode(event)"><code class="language-python hljs"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-string"><span class="hljs-string">"""</span></span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-string">分割訓練集和驗證集</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-string">分別儲存了圖片的路徑</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-string">"""</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">from</span> sklearn.model_selection <span class="hljs-keyword">import</span> train_test_split</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">img_add = <span class="hljs-string">'G:\\dataset\\train.txt'</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">data_set = [x.strip() <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> open(img_add).readlines()]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">train_X, test_X = train_test_split(data_set, test_size=<span class="hljs-number">0.2</span>, random_state=<span class="hljs-number">0</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">print(train_X)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">print(test_X)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">train_file = open(<span class="hljs-string">'G:\\dataset\\WJ-data\\train_file.txt'</span>, <span class="hljs-string">'w'</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> train_X:</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="16"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    x = x.split(<span class="hljs-string">' '</span>)[<span class="hljs-number">0</span>]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="17"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    print(x)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="18"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    train_file.write(<span class="hljs-string">'G:\\dataset\\train'</span>+x+<span class="hljs-string">'\n'</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="19"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="20"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">test_file = open(<span class="hljs-string">'G:\\dataset\\WJ-data\\valid_file.txt'</span>, <span class="hljs-string">'w'</span>)</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="21"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> test_X:</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="22"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    x = x.split(<span class="hljs-string">' '</span>)[<span class="hljs-number">0</span>]</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="23"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    test_file.write(<span class="hljs-string">'G:\\dataset\\train'</span>+x+<span class="hljs-string">'\n'</span>)</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><p><span style="font-size:24px;">4.&nbsp;生成類別名檔案:</span></p><pre onclick="hljs.copyCode(event)"><code class="language-python hljs"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-keyword">with</span> open(<span class="hljs-string">'G:\\dataset\\WJ-data\\obj.names'</span>, <span class="hljs-string">'w'</span>) <span class="hljs-keyword">as</span> f:</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> range(<span class="hljs-number">61</span>):</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">        f.write(str(i)+<span class="hljs-string">'\n'</span>)</div></div></li></ol></code><div class="hljs-button" data-title="複製"></div></pre><p style="font-family:'-apple-system', 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun;background-color:rgb(255,255,255);">參考連結:</p><ol style="list-style:none;color:rgb(51,51,51);font-family:'-apple-system', 'SF UI Text', Arial, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', 'WenQuanYi Micro Hei', sans-serif, SimHei, SimSun;font-size:14px;background-color:rgb(255,255,255);"><li><a href="http://www.cnblogs.com/blog4ljy/p/9195752.html" rel="nofollow" target="_blank">一次將自己的資料集製作成PASCAL VOC格式的慘痛經歷</a></li><li><a href="http://www.yueye.org/2018/convert-your-own-custom-dataset-to-pascal-voc.html" rel="nofollow" target="_blank">轉換</a></li><li><a href="https://blog.csdn.net/u012135425/article/details/80294884" rel="nofollow" target="_blank">YOLOv3訓練自己的資料(GPU版本)</a></li><li><a href="https://blog.csdn.net/shangpapa3/article/details/77483324" rel="nofollow" target="_blank">【YOLO】資料集處理訓練自己的資料集</a><br></li></ol>            </div>
            </div>## 標題