-
Notifications
You must be signed in to change notification settings - Fork 2
/
CS2-large.py
292 lines (177 loc) · 81.1 KB
/
CS2-large.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
#!/usr/bin/env python
# coding: utf-8
# # Most of the code is shamefully copied from [theAIGuysCode](https://github.com/theAIGuysCode/YOLOv4-Cloud-Tutorial)
# In[1]:
from google.colab import drive
drive.mount('/content/drive')
# In[2]:
get_ipython().system('ln -s /content/drive/MyDrive /mygdrive')
# In[3]:
get_ipython().system('ls /mygdrive')
# In[4]:
# clone darknet repo
get_ipython().system('git clone https://github.com/AlexeyAB/darknet')
# In[5]:
# change makefile to have GPU and OPENCV enabled
get_ipython().run_line_magic('cd', 'darknet')
get_ipython().system('rm -rf /content/darknet/src/yolo_layer.c')
get_ipython().system('rm -rf /content/darknet/src/network.c')
get_ipython().system('rm -rf /content/darknet/src/network_kernels.cu')
get_ipython().system('cp /mygdrive/CS2/vedai/yolo/yolo_layer.c ./src/')
get_ipython().system('cp /mygdrive/CS2/vedai/yolo/network.c ./src/')
get_ipython().system('cp /mygdrive/CS2/vedai/yolo/network_kernels.cu ./src/')
get_ipython().system("sed -i 's/OPENCV=0/OPENCV=1/' Makefile")
#!sed -i 's/GPU=0/GPU=1/' Makefile
#!sed -i 's/CUDNN=0/CUDNN=1/' Makefile
#!sed -i 's/CUDNN_HALF=0/CUDNN_HALF=1/' Makefile
# In[6]:
# verify CUDA
get_ipython().system('/usr/local/cuda/bin/nvcc --version')
# In[7]:
# make darknet (builds darknet so that you can then use the darknet executable file to run or train object detectors)
get_ipython().system('make')
# In[8]:
# define helper functions
def imShow(path):
import cv2
import matplotlib.pyplot as plt
get_ipython().run_line_magic('matplotlib', 'inline')
image = cv2.imread(path)
height, width = image.shape[:2]
resized_image = cv2.resize(image,(3*width, 3*height), interpolation = cv2.INTER_CUBIC)
fig = plt.gcf()
fig.set_size_inches(18, 10)
plt.axis("off")
plt.imshow(cv2.cvtColor(resized_image, cv2.COLOR_BGR2RGB))
plt.show()
# use this to upload files
def upload():
from google.colab import files
uploaded = files.upload()
for name, data in uploaded.items():
with open(name, 'wb') as f:
f.write(data)
print ('saved file', name)
# use this to download a file
def download(path):
from google.colab import files
files.download(path)
# In[9]:
import os
os.getcwd()
# In[10]:
# this is where my datasets are stored within my Google Drive (I created a yolov4 folder to store all important files for custom training)
get_ipython().system('ls /mygdrive/CS2/vedai/')
# In[11]:
# copy over both datasets into the root directory of the Colab VM (comment out test.zip if you are not using a validation dataset)
get_ipython().system('cp /mygdrive/CS2/vedai/data/sample_train_tiled.zip ../')
get_ipython().system('cp /mygdrive/CS2/vedai/data/sample_cv_tiled.zip ../')
# In[ ]:
# unzip the datasets and their contents so that they are now in /darknet/data/ folder
get_ipython().system('unzip ../sample_cv_tiled.zip -d data/')
get_ipython().system('unzip ../sample_train_tiled.zip -d data/')
get_ipython().system('rm -rf ../sample_cv_tiled.zip')
get_ipython().system('rm -rf ../sample_train_tiled.zip')
# In[ ]:
# download cfg to google drive and change its name
#!cp cfg/yolov4-custom.cfg /mygdrive/CS2/yolo/yolov4-obj.cfg
# In[ ]:
# to download to local machine (change its name to yolov4-obj.cfg once you download)
#download('cfg/yolov4-custom.cfg')
# Now you need to edit the .cfg to fit your needs based on your object detector. Open it up in a code or text editor to do so.
#
# If you downloaded cfg to google drive you can use the built in **Text Editor** by going to your google drive and double clicking on yolov4-obj.cfg and then clicking on the **Open with** drop down and selectin **Text Editor**.
#
# **(Image from previous tutorial so don't mind different file name)**
#
# ![image.png](data:image/png;base64,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)
#
# I recommend having **batch = 64** and **subdivisions = 16** for ultimate results. If you run into any issues then up subdivisions to 32.
#
# Make the rest of the changes to the cfg based on how many classes you are training your detector on.
#
# **Note:**
# I set my **max_batches = 6000**, **steps = 4800, 5400**, I changed the **classes = 1** in the three YOLO layers and **filters = 18** in the three convolutional layers before the YOLO layers.
#
# How to Configure Your Variables:
#
# width = 416
#
# height = 416
# **(these can be any multiple of 32, 416 is standard, you can sometimes improve results by making value larger like 608 but will slow down training)**
#
# max_batches = (# of classes) * 2000
# **(but no less than 6000 so if you are training for 1, 2, or 3 classes it will be 6000, however detector for 5 classes would have max_batches=10000)**
#
# steps = (80% of max_batches), (90% of max_batches)
# **(so if your max_batches = 10000, then steps = 8000, 9000)**
#
# filters = (# of classes + 5) * 3
# **(so if you are training for one class then your filters = 18, but if you are training for 4 classes then your filters = 27)**
#
#
# **Optional:** If you run into memory issues or find the training taking a super long time. In each of the three yolo layers in the cfg, change one line from random = 1 to **random = 0** to speed up training but slightly reduce accuracy of model. Will also help save memory if you run into any memory issues.
#
# In[13]:
# upload the custom .cfg back to cloud VM from Google Drive
get_ipython().system('cp /mygdrive/CS2/vedai/yolo/yolov4-obj.cfg ./cfg')
# In[14]:
# upload the obj.names and obj.data files to cloud VM from Google Drive
get_ipython().system('cp /mygdrive/CS2/vedai/obj.names ./data')
get_ipython().system('cp /mygdrive/CS2/vedai/obj.data ./data')
# In[15]:
get_ipython().system('cp /mygdrive/CS2/vedai/sample_train_tiled.txt ./data')
get_ipython().system('cp /mygdrive/CS2/vedai/sample_cv_tiled.txt ./data')
# In[16]:
# verify that the newly generated train.txt and test.txt can be seen in our darknet/data folder
get_ipython().system('ls data/')
# If you are uncertain whether generating the files worked and want to double check that everything went as planned, double click on **train.txt** on the left side File Explorer and it should look like this.
#
# ![image.png](data:image/png;base64,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)
#
# It will contain one line for each training image path.
# In[ ]:
get_ipython().system('wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.conv.137')
# In[ ]:
# train your custom detector! (uncomment %%capture below if you run into memory issues or your Colab is crashing)
# %%capture
get_ipython().system('./darknet detector train data/obj.data cfg/yolov4-obj.cfg yolov4.conv.137 -dont_show -map')
# **TRICK**: If for some reason you get an error or your Colab goes idle during training, you have not lost your partially trained model and weights! Every 100 iterations a weights file called **yolov4-obj_last.weights** is saved to **mydrive/yolov4/backup/** folder (wherever your backup folder is). This is why we created this folder in our Google drive and not on the cloud VM. If your runtime crashes and your backup folder was in your cloud VM you would lose your weights and your training progress.
#
# We can kick off training from our last saved weights file so that we don't have to restart! WOOHOO! Just run the following command but with your backup location.
# ```
# !./darknet detector train data/obj.data cfg/yolov4-obj.cfg /mydrive/yolov4/backup/yolov4-obj_last.weights -dont_show
# ```
# In[ ]:
# kick off training from where it last saved
get_ipython().system('./darknet detector train data/obj.data cfg/yolov4-obj.cfg /mygdrive/CS2/vedai/yolo/backup/yolov4-obj_last.weights -dont_show -map')
# # Step 6: Checking the Mean Average Precision (mAP) of Your Model
# If you didn't run the training with the '-map- flag added then you can still find out the mAP of your model after training. Run the following command on any of the saved weights from the training to see the mAP value for that specific weight's file. I would suggest to run it on multiple of the saved weights to compare and find the weights with the highest mAP as that is the most accurate one!
#
# **NOTE:** If you think your final weights file has overfitted then it is important to run these mAP commands to see if one of the previously saved weights is a more accurate model for your classes.
# In[17]:
get_ipython().system('./darknet detector map data/obj.data cfg/yolov4-obj.cfg /mygdrive/CS2/vedai/yolo/backup/yolov4-obj_best.weights')
# # Step 7: Run Your Custom Object Detector!!!
# You have done it! You now have a custom object detector to make your very own detections. Time to test it out and have some fun!
# In[28]:
# need to set our custom cfg to test mode
get_ipython().run_line_magic('cd', 'cfg')
get_ipython().system("sed -i 's/batch=64/batch=1/' yolov4-obj.cfg")
get_ipython().system("sed -i 's/subdivisions=16/subdivisions=1/' yolov4-obj.cfg")
get_ipython().run_line_magic('cd', '..')
# In[53]:
def convert_yolo_to_pascal(textfile, size, i, j, scale_h, scale_w):
annotations = pd.read_csv(textfile, sep = " ", names = ["class", "xc", "yc", "yolo_w", "yolo_h", "obj_name", "confidence"])
print(annotations.shape)
annotations["w"] = annotations["yolo_w"]*size
annotations["h"] = annotations["yolo_h"]*size
annotations["x"] = annotations["xc"]*size - annotations["w"]/2 + j*size
annotations["y"] = annotations["yc"]*size - annotations["h"]/2 + i*size
annotations["w"] = np.round_(annotations["w"]/scale_w)
annotations["h"] = np.round_(annotations["h"]/scale_h)
annotations["x"] = np.round_(annotations["x"]/scale_w)
annotations["y"] = np.round_(annotations["y"]/scale_h)
annotations = annotations[["class", "x", "y", "w", "h", "obj_name", "confidence"]]
return annotations
# In[60]:
get_ipython().run_cell_magic('time', '', '\nimport cv2\nimport os\nimport numpy as np\nimport pandas as pd\nimport json\nimport math\nimport time\n\n\n!rm -rf "/content/tiled_images/"\n!mkdir "/content/tiled_images/"\n\nim_name = "00000040.png"\n\nim = cv2.imread("/content/test_image/" + im_name)\n\nh, w, _ = im.shape\nsize = 512\n\ntiled_ims_list = []\n\nfor i in range(h//size):\n for j in range(w//size):\n tiled = im[i*size : (i+1)*size, j*size : (j+1)*size, :]\n tiled_im_name = "/content/tiled_images/" + im_name.split(".")[0] + "_" + str(i) + "_" + str(j) + ".png"\n tiled_ims_list.append(tiled_im_name)\n df = pd.DataFrame(tiled_ims_list)\n df.to_csv("/content/tiled_images.txt", index = False, header = False)\n cv2.imwrite(tiled_im_name, tiled)\n\n\nstart = time.time()\n!./darknet detector test data/obj.data cfg/yolov4-obj.cfg /mygdrive/CS2/vedai/yolo/backup/yolov4-obj_best.weights -ext_output -dont_show -out /content/result.json < /content/tiled_images.txt \nend = time.time()\n\nf = open("/content/result.json", )\nresult = json.load(f)\n\n\nfor res in result:\n #print(res)\n if len(res["objects"]) > 0:\n \n annot_path = res["filename"].replace(".png", ".txt")\n lines = []\n #print(annot_path)\n for obj in res["objects"]:\n line = []\n object_class = obj["class_id"]\n line.append(object_class)\n coords = obj["relative_coordinates"]\n line.extend([coords["center_x"], coords["center_y"], coords["width"], coords["height"], obj["name"], obj["confidence"]])\n lines.append(line)\n #print(lines) \n df = pd.DataFrame(lines)\n df.to_csv(annot_path, sep = " ", index = False, header = False)\n\n\n\nname = os.listdir("/content/test_image")[0]\nim = cv2.imread("/content/test_image/" + name)\n\nh, w, _ = im.shape\nh_new = math.ceil(h/size) * size\nw_new = math.ceil(w/size) * size\nscale_h = h_new/h\nscale_w = w_new/w\n\n\n\ntiled_images = "/content/tiled_images/"\n\n\nannotations = []\ncol_list = []\nfor i in range(math.ceil(h/size)):\n \n row_list = []\n for j in range(math.ceil(w/size)):\n tiled_image_name = tiled_images + name.split(".")[0] + "_" + str(i) + "_" + str(j) + ".png"\n #print(tiled_image_name)\n im_tiled = cv2.imread(tiled_image_name)\n annot_path = tiled_image_name.replace(".png", ".txt")\n if os.path.exists(annot_path):\n annotations.append(convert_yolo_to_pascal(annot_path, size, i, j, scale_h, scale_w))\n row_list.append(im_tiled)\n # Reference: https://www.geeksforgeeks.org/concatenate-images-using-opencv-in-python/\n row_im = cv2.hconcat(row_list)\n col_list.append(row_im)\n\nscaled_image = cv2.vconcat(col_list)\n#print(scaled_image.shape)\nreconstructed_image = cv2.resize(scaled_image, (w, h), interpolation = cv2.INTER_AREA)\n\ncv2.imwrite("reconstructed_" + name + ".png", reconstructed_image)\ndf = pd.concat(annotations, axis = 0)\ndf.to_csv("reconstructed_" + name + ".txt", sep=" ", index = False, header = False) \n#print(df.shape) \n\nfor index, row in df.iterrows():\n cv2.rectangle(reconstructed_image, (int(row["x"]), int(row["y"])), (int(row["x"]+row["w"]) , int(row["y"]+row["h"])), (255, 0, 0), 2)\n cv2.putText(reconstructed_image, row["obj_name"], (int(row["x"])-4, int(row["y"])-4), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA)\ncv2_imshow(reconstructed_image)\n\nprint("time taken for detection", end-start)')