yolo train
git clone https://github.com/puzzledqs/BBox-Label-Tool.git
- convert.py
import os from os import walk, getcwd from PIL import Image classes = ["targa"] def convert(size, box): dw = 1./size[0] dh = 1./size[1] x = (box[0] + box[1])/2.0 y = (box[2] + box[3])/2.0 w = box[1] - box[0] h = box[3] - box[2] x = x*dw w = w*dw y = y*dh h = h*dh return (x,y,w,h) """-------------------------------------------------------------------""" """ Configure Paths""" mypath = "Labels/001/" outpath = "Labels/output/" cls = "001" wd = getcwd() list_file = open('%s/%s_list.txt'%(wd, cls), 'w') """ Get input text file list """ txt_name_list = [] for (dirpath, dirnames, filenames) in walk(mypath): print(filenames) txt_name_list.extend(filenames) break print(txt_name_list) """ Process """ for txt_name in txt_name_list: # txt_file = open("Labels/stop_sign/001.txt", "r") """ Open input text files """ txt_path = mypath + txt_name print("Input:" + txt_path) txt_file = open(txt_path, "r") lines = txt_file.read().split('\r\n') #for ubuntu, use "\r\n" instead of "\n" """ Open output text files """ txt_outpath = outpath + txt_name print("Output:" + txt_outpath) txt_outfile = open(txt_outpath, "w") """ Convert the data to YOLO format """ ct = 0 for line in lines: #print('lenth of line is: ') #print(len(line)) #print('\n') if(len(line) >= 2): ct = ct + 1 print(line + "\n") elems = line.split(' ') print(elems) cls_id = elems[0].split('\n')[0] xmin = elems[0].split('\n')[1] xmax = elems[2] ymin = elems[1] ymax = elems[3][:-1] # img_path = str('%s/Images/%s/%s.JPEG'%(wd, cls, os.path.splitext(txt_name)[0])) #t = magic.from_file(img_path) #wh= re.search('(\d+) x (\d+)', t).groups() im=Image.open(img_path) w= int(im.size[0]) h= int(im.size[1]) #w = int(xmax) - int(xmin) #h = int(ymax) - int(ymin) # print(xmin) print(w, h) b = (float(xmin), float(xmax), float(ymin), float(ymax)) bb = convert((w,h), b) print(bb) txt_outfile.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n') """ Save those images with bb into list""" if(ct != 0): list_file.write('%s/images/%s/%s.JPEG\n'%(wd, cls, os.path.splitext(txt_name)[0])) list_file.close()
Train.txt Text.txt
- process.py
import glob, os # Current directory current_dir = os.path.dirname(os.path.abspath(__file__)) # Directory where the data will reside, relative to 'darknet.exe' path_data = '*IMAGE DIRECTORY*' # Percentage of images to be used for the test set percentage_test = 10; # Create and/or truncate train.txt and test.txt file_train = open('train.txt', 'w') file_test = open('test.txt', 'w') # Populate train.txt and test.txt counter = 1 index_test = round(100 / percentage_test) for pathAndFilename in glob.iglob(os.path.join(current_dir, "*.JPEG")): title, ext = os.path.splitext(os.path.basename(pathAndFilename)) if counter == index_test: counter = 1 file_test.write(path_data + title + '.JPEG' + "\n") else: file_train.write(path_data + title + '.JPEG' + "\n") counter = counter + 1
Put images inside BBox-Label-Tool/Images/001/ convert to JPEG and delete old images
mogrify -format JPEG *.jpg rm *.jpg
Go to main folder and run python main.py
python main.py
Write 001 inside Image Dir box and load
Create a label for each image
After that, exit and create a new directory inside Label
mkdir output
Run convert.py
python convert.py
Now create test.txt and train.txt with process.py
python process.py
├── Images (input) │ ├── 001 │ │ ├── 20180319_113309.JPEG │ └── targa ├── Labels (output) │ ├── 001 │ │ ├── 20180319_113309.txt │ └── output │ ├── 20180319_113309.txt
Darknet
git clone https://github.com/pjreddie/darknet cd darknet make
Copy train.txt and test.txt inside darknet/cfg/
Create 3 files: obj.data obj.names obj.cfg
classes= *NUMBER CLASSES* train = *TRAIN DIRECTORY+ valid = *TEST DIRECTORY* names = obj.names backup = *BACKUP FOLDER*
*CLASS NAME*
Copy yolov2-tiny.cfg and change [region]:classes to classes = *NUMBER CLASSES* filters = (*NUMBER CLASSES* +5)*5