Skip to content
Snippets Groups Projects
Commit 43549842 authored by fresleven's avatar fresleven
Browse files

YOLOv5 model mAP = 1.33

parent 4f03478b
No related branches found
No related tags found
No related merge requests found
%% Cell type:code id:ff555f6b tags:
``` python
import glob
from tqdm import tqdm
import pandas as pd
import torch
from PIL import Image
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import pillow_heif
import os
import pickle
```
%% Cell type:code id:fd6db132 tags:
``` python
labels_path = "/raid/projects/akhot2/group-01-phys371-sp2023/data/trap_labels.xlsx"
labels_path = "../data/trap_labels.xlsx"
df = pd.read_excel(labels_path)
df.head()
```
%% Output
/raid/projects/akhot2/conda/envs/akhot2/lib/python3.9/site-packages/openpyxl/worksheet/header_footer.py:48: UserWarning: Cannot parse header or footer so it will be ignored
warn("""Cannot parse header or footer so it will be ignored""")
Grand Acc # Weekly Acc# Sample collection period Sticky trap pair (rep) \
0 2 2 1 1
1 4 4 1 2
2 6 6 1 3
3 8 8 1 4
4 10 10 1 5
2022 Julian Date Month 2022 Set up Date 2022 Data Collect. Date \
0 NaN NaN 2022-07-08 2022-07-19
1 NaN NaN 2022-07-08 2022-07-19
2 NaN NaN 2022-07-08 2022-07-19
3 NaN NaN 2022-07-08 2022-07-19
4 NaN NaN 2022-07-08 2022-07-19
Coll. intrvl (d) Coll. hour ... NCR/trap /day WCR/trap /day \
0 11.0 11.35 ... 0.0 0.0
1 11.0 11.35 ... 0.0 0.0
2 11.0 11.35 ... 0.0 0.0
3 11.0 11.35 ... 0.0 0.0
4 11.0 11.35 ... 0.0 0.0
Total CRW /trap /day NCR/trap top /day WCR/trap top/day \
0 0.0 0.0 0.0
1 0.0 0.0 0.0
2 0.0 0.0 0.0
3 0.0 0.0 0.0
4 0.0 0.0 0.0
Total CRW /trap top/day Proportion NCR on top Proportion WCR on top \
0 0.0 NaN NaN
1 0.0 NaN NaN
2 0.0 NaN NaN
3 0.0 NaN NaN
4 0.0 NaN NaN
Proportion All CRW on top Notes
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
[5 rows x 43 columns]
%% Cell type:code id:7097a875 tags:
``` python
df.columns
```
%% Output
Index(['Grand Acc #', 'Weekly Acc#', 'Sample collection period',
'Sticky trap pair (rep)', '2022 Julian Date', 'Month',
'2022 Set up Date', '2022 Data Collect. Date', 'Coll. intrvl (d)',
'Coll. hour', 'Trap visitor', 'Drone pilot', 'On farm location',
'Site Abrv.', 'trap angle', 'trap orient'n', 'Trap #',
'Sticky Trap Name', 'T-top side NCR', 'bottom side NCR',
'T-top side WCR', 'bottom side WCR', 'WCR mal', 'WCR fem',
'T-top side "other"', 'Bottom side "other"', 'T-top side total CRW',
'bottom side total CRW', 'Trap Total NCR', 'Trap Total WCR',
'Trap Total CRW', 'Proportion NCR in total CRW',
'Proportion WCR in total CRW', 'NCR/trap /day', 'WCR/trap /day',
'Total CRW /trap /day', 'NCR/trap top /day', 'WCR/trap top/day',
'Total CRW /trap top/day', 'Proportion NCR on top',
'Proportion WCR on top', 'Proportion All CRW on top', 'Notes'],
dtype='object')
%% Cell type:code id:24d3874e tags:
``` python
df_angled = df[df["trap orient'n"] == "Angled "]
df_angled["2022 Data Collect. Date"].astype(str)
df_angled = df[df["trap orient'n"] == "Angled "].astype(str)
df_angled[["trap orient'n", "2022 Data Collect. Date", "Sticky Trap Name", "T-top side WCR"]]
```
%% Output
trap orient'n 2022 Data Collect. Date Sticky Trap Name T-top side WCR
0 Angled 2022-07-19 U2 0
1 Angled 2022-07-19 U4 0
2 Angled 2022-07-19 U6 0
3 Angled 2022-07-19 U8 0
4 Angled 2022-07-19 U10 0
.. ... ... ... ...
603 Angled NaT M24 NaN
604 Angled NaT M26 NaN
605 Angled NaT M28 NaN
606 Angled NaT M30 NaN
607 Angled NaT M32 NaN
603 Angled NaT M24 nan
604 Angled NaT M26 nan
605 Angled NaT M28 nan
606 Angled NaT M30 nan
607 Angled NaT M32 nan
[320 rows x 4 columns]
%% Cell type:code id:0ccf1183 tags:
``` python
folders = ["buchhloz", "faivre", "moore", "underwood"]
transform = transforms.Compose([
transforms.PILToTensor()
])
images = []
total_beetles = 0
for folder_name in folders:
dates = []
for date in glob.glob(r"/raid/projects/akhot2/group-01-phys371-sp2023/data/" + folder_name + "/*"):
dates.append(date)
for date in dates:
for image_file in glob.glob(date + "/*"):
print(image_file.split("/")[-1])
f_name = image_file.split("/")[-1]
#continue
if image_file.split(".")[-1].lower() == "heic":
heif_file = pillow_heif.read_heif(image_file)
img = Image.frombytes(
heif_file.mode,
heif_file.size,
heif_file.data,
"raw",
)
img.save(r"/raid/projects/akhot2/group-01-phys371-sp2023/beetles/"+f_name[:-4]+".jpg")
#print("HEIC FILE:")
else:
img = Image.open(image_file)
img.save(r"/raid/projects/akhot2/group-01-phys371-sp2023/beetles/"+f_name)
#print("JPG FILE:")
img_tensor = transform(img)
name = f_name.split("_")[0]
if name[-1].isalpha():
name = name[0:-1]
day = f_name.split("_")[1][0:2]
if day[1].isalpha():
day = "0" + day[0]
if "august" in f_name.lower():
date = "2022-08-" + day
else:
date = "2022-07-" + day
beetle_count = df_angled[(df_angled['2022 Data Collect. Date'] == date) & (df_angled['Sticky Trap Name'] == name)]['T-top side WCR']
row_number = beetle_count.index[0]
#total_beetles += int(beetle_count)
#images.append((img_tensor, int(beetle_count), row_number))
#plt.imshow(img)
#plt.show()
#print(img_tensor.shape)
print(image_file.split("/")[-1])
```
%% Output
B8_15August2022.jpg
B12_15August2022.jpg
B26_15August2022.jpg
B22_15August2022.jpg
B4_15August2022.jpg
B20_15August2022.jpg
B32_15August2022.jpg
B16_15August2022.jpg
B18_15August2022.jpg
B28_15August2022.jpg
B14_15August2022.jpg
B24_15August2022.jpg
B10_15August2022.jpg
B2_15August2022.jpg
B6_15August2022.jpg
B28_25August2022.jpg
B26_25August2022.jpg
B24_25August2022.jpg
B16_25August2022.HEIC
B12_25August2022.HEIC
B2_25August2022.HEIC
B20_25August2022.jpg
B8_25August2022.HEIC
B18_25August2022.jpg
B18c_25August2022.jpg
B32_25August2022.jpg
Buchholz trap 18 8_25_2022 WCR and NCR present_3468.jpg
B4_25August2022.HEIC
B22_25August2022.jpg
B6_25August2022.HEIC
B10_25August2022.HEIC
B30_25August2022.jpg
B14_25August2022.HEIC
B18b_25August2022.jpg
B30b_25August2022.jpg
B14_20July2022.jpg
B8_20July2022.jpg
B32_20July2022.jpg
B28b_20July2022.jpg
B26b_20July2022.jpg
B32b_20July2022.jpg
B16_20JULY2022.jpg
B26_20July2022.jpg
B28 angled sticky-20JUL2022.jpg
B32 angled sticky-20JUL2022.jpg
B30_20July2022.jpg
B2_20July2022.jpg
B4_20July2022.jpg
B10_20July2022.jpg
B28_20July2022.jpg
B12_20July2022.jpg
B6_20July2022.jpg
B2_3AUGUST2022.HEIC
B18_3AUGUST2022.jpeg
B20_3AUGUST2022.jpeg
B4_3AUGUST2022.HEIC
B10_3AUGUST2022.HEIC
B26_3AUGUST2022.jpeg
B8_3AUGUST2022.HEIC
B28_3AUGUST2022.jpeg
B22_3AUGUST2022.jpeg
B14_3AUGUST2022.HEIC
B16_3AUGUST2022.HEIC
B24_3AUGUST2022.jpeg
B12_3AUGUST2022.HEIC
B6_3AUGUST2022.HEIC
B8_26JUL2022.jpg
B14_26JUL2022.jpg
B6_26JUL2022.jpg
B2_26JUL2022.jpg
B4_26JUL2022.jpg
B10_26JUL2022.jpg
B16_26JUL2022.jpg
B12_26JUL2022jpg.jpg
F2_3AUGUST2022.jpg
F28_3AUGUST2022.HEIC
F18_3AUGUST2022.HEIC
F10_3AUGUST2022.jpg
F16_3AUGUST2022.jpg
F6_3AUGUST2022.jpg
F12_3AUGUST2022jpg.jpg
F26_3AUGUST2022.HEIC
F4_3AUGUST2022.jpg
F8_3AUGUST2022.jpg
F20_3AUGUST2022.HEIC
F30_3AUGUST2022.HEIC
F22_3AUGUST2022.HEIC
F32_3AUGUST2022.HEIC
F14_3AUGUST2022.jpg
F24_3AUGUST2022.HEIC
F28_25August2022.HEIC
F2b_25August2022.heic
F16b_25August2022.jpg
F26_25August2022.HEIC
F32_25August2022.HEIC
F16 wide view_25August2022.jpg
F16_25August2022.jpg
F12_25August2022.jpg
F30_25August2022.HEIC
F2_25August2022.jpg
F24_25August2022.HEIC
F20_25August2022.HEIC
F14_25August2022.jpg
F22_25August2022.HEIC
F18_25August2022.HEIC
F14b_25August2022.jpg
Faivre field soybean phenoloyg_25August2022.jpg
F14_20July2022.jpg
F32_20July2022.jpg
F8_20July2022.jpg
F12_20July2022.jpg
F28_20July2022.jpg
F30_20July2022.jpg
F18_20July2022.jpg
F20_20July2022.jpg
F2_20July2022.jpg
F26_20July2022.jpg
F22_20July2022.jpg
F6b_20July2022.jpg
F6_20July2022.jpg
F16_20July2022.jpg
F24_20July2022.jpg
F10_20July2022.jpg
F20_26JUL2022.HEIC
F26_26JUL2022.HEIC
F8_26JUL2022.jpg
F28_26JUL2022.HEIC
F30_26JUL2022.HEIC
F2_26JUL2022.jpg
F24_26JUL2022.HEIC
F18_26JUL2022.HEIC
F10_26JUL2022.jpg
F32_26JUL2022.HEIC
F22_26JUL2022.HEIC
M16_19July2022.jpg
M10_19July2022.jpg
M2_19July2022.jpg
M14_19July2022.jpg
M12_19July2022.jpg
M6_19July2022.jpg
M4_19July2022.jpg
M8_19July2022.jpg
M20_4AUGUST2022..jpg
M18_4AUGUST2022.jpg
M2_4AUGUST2022.HEIC
M22_4AUGUST2022.jpg
M30_4AUGUST2022..jpg
M8_4AUGUST2022.HEIC
M16_4AUGUST2022.HEIC
M10_4AUGUST2022.HEIC
M6_4AUGUST2022.HEIC
M12_4AUGUST2022.HEIC
M26_4AUGUST2022.jpg
M28_4AUGUST2022..jpg
M32_4AUGUST2022..jpg
M24_4AUGUST2022..jpg
M14_4AUGUST2022.HEIC
M14._17AUGUST2022.HEIC
M32_17AUGUST2022.jpg
M24_17AUGUST2022.jpg
M30_17AUGUST2022.jpg
M10_17AUGUST2022.HEIC
M22_17AUGUST2022.jpg
M2_17AUGUST2022.HEIC
M16_17AUGUST2022.HEIC
M26_17AUGUST2022.jpg
M14_17AUGUST2022.HEIC
M12_17AUGUST2022.HEIC
M18_17AUGUST2022.jpg
M28_17AUGUST2022.jpg
M6_17AUGUST2022.HEIC
M32-17AUGUST2022.jpg
M4_17AUGUST2022.HEIC
M8_17AUGUST2022.HEIC
M20_17AUGUST2022.jpg
M12_27JULY2022.jpg
Moore_M_Phenology of soybean_27JULY2022.jpg
M8_27JULY2022.jpg
M26_27JULY2022.jpeg
M16_27JULY2022.jpg
M32_27JULY2022.jpeg
M30_27JULY2022.jpeg
M10_27JULY2022.jpg
M4_27JULY2022.jpg
M14_27JULY2022.jpg
M20_27JULY2022.jpeg
M28_27JULY2022.jpeg
M6_27JULY2022.jpg
M22_27JULY2022.jpeg
M24_27JULY2022.jpeg
M2_27JULY2022.jpg
U30_19JULY2022.jpg
U2_19JULY2022.HEIC
U10_19JULY2022.HEIC
U20_19JULY2022jpg.jpg
U22_19JULY2022.jpg
U16_19JULY2022.HEIC
U24_19JULY2022.jpg
U8_19JULY2022.HEIC
U14_19JULY2022.HEIC
U18_19JULY2022.jpg
U4_19JULY2022.HEIC
U12_19JULY2022.HEIC
U26_19JULY2022.jpg
U6_19JULY2022.HEIC
U32_19JULY2022.jpg
U28_19JULY2022.jpg
U26_5AUGUST2022.jpg
U32_5AUGUST2022jpg.jpg
U10_5August2022(4979).HEIC
U8_5August2022(4980).HEIC
U6_5August2022(4981).HEIC
U16_5August2022(4977).HEIC
U2_5August2022(4983).HEIC
U24_5AUGUST2022.jpg
U20_5AUGUST2022.jpg
U4_5August2022(4982).HEIC
U12_5August2022(4978).HEIC
U18_5AUGUST2022.jpg
U28_5AUGUST2022.jpg
U22_5AUGUST2022.jpg
U30_5AUGUST2022.jpg
U26_27JULY2022.jpg
U20_27JULY2022.jpg
U2_27JULY2022.HEIC
U16_27JULY2022.HEIC
U10_27JULY2022.HEIC
U24_27JULY2022.jpg
U6_27JULY2022.HEIC
U12_27JULY2022.HEIC
U8_27JULY2022.HEIC
U4_27JULY2022.HEIC
U28_27JULY2022.jpg
U32_27JULY2022.jpg
U30_27JULY2022.jpg
U22_27JULY2022jpg.jpg
U18_27JULY2022.jpg
U14_27JULY2022.HEIC
U4_10AUGUST2022.HEIC
U22_10AUGUST2022.jpg
U26_10AUGUST2022.jpg
U24_10AUGUST2022.jpg
U28_10AUGUST2022.jpg
U30_10AUGUST2022.jpg
U10_10AUGUST2022.HEIC
U32_10AUGUST2022.jpg
U18_10AUGUST2022.jpg
U20_10AUGUST2022.jpg
U16_10AUGUST2022.HEIC
U14_10AUGUST2022.HEIC
U2_10AUGUST2022.HEIC
U8_10AUGUST2022.HEIC
U12_10AUGUST2022.HEIC
U6_10AUGUST2022.HEIC
U16_23August2022.HEIC
U12_23August2022.HEIC
U26_23August2022.jpg
U20_23August2022.jpg
U10_23August2022.HEIC
U6_23August2022.HEIC
U4_23August2022.HEIC
U2_23August2022.HEIC
U28_23August2022.jpg
U22_23August2022.jpg
U14_23August2022.HEIC
U18_23August2022.HEIC
U18_23August2022.jpg
U24_23August2022.jpg
U28b_23August2022.jpg
U30_23August2022.jpg
U32_23August2022.jpg
%% Cell type:code id:eaa3da3e tags:
``` python
df_angled[df_angled['2022 Data Collect. Date'] == "2022-08-01"]
```
%% Output
Empty DataFrame
Columns: [Grand Acc #, Weekly Acc#, Sample collection period, Sticky trap pair (rep), 2022 Julian Date, Month, 2022 Set up Date, 2022 Data Collect. Date, Coll. intrvl (d), Coll. hour, Trap visitor, Drone pilot, On farm location, Site Abrv., trap angle, trap orient'n, Trap #, Sticky Trap Name, T-top side NCR, bottom side NCR, T-top side WCR, bottom side WCR, WCR mal, WCR fem, T-top side "other", Bottom side "other", T-top side total CRW, bottom side total CRW, Trap Total NCR, Trap Total WCR, Trap Total CRW, Proportion NCR in total CRW, Proportion WCR in total CRW, NCR/trap /day, WCR/trap /day, Total CRW /trap /day, NCR/trap top /day, WCR/trap top/day, Total CRW /trap top/day, Proportion NCR on top, Proportion WCR on top, Proportion All CRW on top, Notes]
Index: []
[0 rows x 43 columns]
%% Cell type:code id:80679db4 tags:
``` python
total_beetles
```
%% Output
41
%% Cell type:code id:a397557a tags:
``` python
folder = '../data'
if not os.path.exists(folder):
os.mkdir(folder)
with open(folder+"/training-data"+".pkl", "wb") as f:
pickle.dump(images, f)
```
%% Cell type:code id:997ccb7f tags:
``` python
```
......
This diff is collapsed.
import os
import json
import torch
from torchvision.io import read_image
from torch.utils.data import Dataset
from torchvision.transforms import Compose
import torchvideo.transforms as tvt
from tqdm import tqdm
from torchvision.transforms import InterpolationMode
import pickle
import os
class ASLDataset(Dataset):
def __init__(self, file_path, size=256, transforms=None):
with open(file_path, "rb") as f:
data = pickle.load(f)
self.clips = []
self.labels = {}
total_classes = len(data)
current_class = 0
self.frames = frame
self.size = size
if transforms is None:
transforms = Compose([
tvt.NormalizeVideo([0.485, 0.456, 0.406], [0.229, 0.224, 0.225], channel_dim=1),
tvt.ResizeVideo((size,size), interpolation=InterpolationMode.BICUBIC)
])
self.transforms = transforms
for key in data: # for each word
one_hot_version = torch.nn.functional.one_hot(torch.tensor([current_class]), num_classes=total_classes)
self.labels[key] = current_class # one_hot_version # make it the next one_hot
# word -> OHE
current_class += 1
for value in data[key]:
self.clips.append((key, value))
def __len__(self):
return len(self.clips)
def __getitem__(self, idx):
word, video_data = self.clips[idx]
# convert the word to a one hot encoding
label = self.labels[word]
# convert the video data to be the same shape (and load the video)
frame_start, frame_end, video_url = video_data
# get the video path
video_path = "/raid/projects/weustis/data/asl/videos/"+ "_".join(video_url.split('/')[-2:]).split('.')[0] + "/"
# video_path = r"/raid/projects/weustis/data/asl/videos/ASL_2008_01_11_scene26-camera1/"
# load the video
path, dirs, files = next(os.walk(video_path))
frame_count = len(files)
# c, t, h, w
# specified frames and size beforehand
# shorten/length the video
frame_end = int(frame_end)
frame_start = int(frame_start)
t = frame_end - frame_start #time of video
if (t < self.frames): #if shorter
offset = torch.randint(t-self.frames, 0, (1,)) + 1
if (t > self.frames):
offset = torch.randint(t-self.frames, (1,))
else:
offset = 0
frames = ["%06d" % (x,)+".jpg" for x in range(frame_start+offset, frame_start+offset+self.frames)]
r = torch.empty(self.frames, 3, 480, 640)
for idx, p_end in enumerate(frames):
img_data = read_image(video_path + p_end)
r[idx, :, :, :] = img_data
# resize video
r = r.permute([1,0,2,3]).unsqueeze(0)
r = next(self.transforms(r))
return r, label
if __name__ == "__main__":
mydataset = ASLDataset("/raid/projects/weustis/data/asl/dataset.json")
from torch.utils.data import DataLoader
dataloader = DataLoader(mydataset, batch_size=8, shuffle=True, num_workers=40, pin_memory=True, prefetch_factor=1, persistent_workers=True)
for x,y in tqdm(dataloader):
pass
# python dataloader.py
\ No newline at end of file
B
\ No newline at end of file
import glob
from tqdm import tqdm
import pandas as pd
import torch
from PIL import Image
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
import pillow_heif
import os
import pickle
labels_path = "../data/trap_labels.xlsx"
df = pd.read_excel(labels_path)
df_angled = df[df["trap orient'n"] == "Angled "].astype(str)
folders = ["buchhloz", "faivre", "moore", "underwood"]
transform = transforms.Compose([
transforms.PILToTensor()
])
print("Loading images...")
images = []
total_beetles = 0
for folder_name in folders:
dates = []
for date in glob.glob(r"/raid/projects/akhot2/group-01-phys371-sp2023/data/" + folder_name + "/*"):
dates.append(date)
for date in dates:
for image_file in glob.glob(date + "/*"):
#print(image_file.split("/")[-1])
f_name = image_file.split("/")[-1]
#continue
if image_file.split(".")[-1].lower() == "heic":
heif_file = pillow_heif.read_heif(image_file)
img = Image.frombytes(
heif_file.mode,
heif_file.size,
heif_file.data,
"raw",
)
#print("HEIC FILE:")
else:
img = Image.open(image_file)
#print("JPG FILE:")
img_tensor = transform(img)
name = f_name.split("_")[0]
if name[-1].isalpha():
name = name[0:-1]
day = f_name.split("_")[1][0:2]
if day[1].isalpha():
day = "0" + day[0]
if "august" in f_name.lower():
date = "2022-08-" + day
else:
date = "2022-07-" + day
beetle_count = df_angled[(df_angled['2022 Data Collect. Date'] == date) & (df_angled['Sticky Trap Name'] == name)]['T-top side WCR']
row_number = beetle_count.index[0]
#total_beetles += int(beetle_count)
images.append((img_tensor, int(beetle_count), row_number))
#plt.imshow(img)
#plt.show()
#print(img_tensor.shape)
print("Loading images complete!")
folder = '../data'
print("Uploading data to " + folder +"/training-data"+".pkl")
if not os.path.exists(folder):
os.mkdir(folder)
with open(folder+"/training-data"+".pkl", "wb") as f:
pickle.dump(images, f)
\ No newline at end of file
yolov5 @ 226a5e43
Subproject commit 226a5e43cbceff5de43a71c4fb3f3f7478a9bb03
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment