import torch
from ultralytics import YOLO
# ------------ 모델 경로 및 파일 수정 시간은 수정하기 --------------
model_path = '../best.pt'
model_generated_time = " 24-06-04, 20:02"
# --------------------------------------------------------------
model = YOLO(model_path)
# 모델의 가중치 확인
model_weights = model.model.state_dict()
torch.set_printoptions(threshold=torch.inf)
idx = 0
while idx < len(model_weights):
name = list(model_weights.keys())[idx]
param = model_weights[name]
if "model." in name:
output_file = f"{name}.txt"
with open(output_file, "w") as f:
f.write("Weights Information:\n")
f.write("# weights ver.2\n\n")
f.write(f"Model Path: {model_path}\n")
f.write(f"Model Generated Time: {model_generated_time}\n\n")
f.write(f"Layer: {name} | Size: {param.size()}\n")
f.write(str(param) + "\n")
idx += 1
다음은 레이어 정보만 가져오는 코드임.
# 레이어 정보만 가져오기
import torch
from ultralytics import YOLO
# 모델 경로 및 파일 수정 시간 설정
model_path = '../best.pt'
model_generated_time = "24-06-04, 20:02"
# YOLO 모델 로드
model = YOLO(model_path)
# 모델의 가중치 확인
model_weights = model.model.state_dict()
# 레이어 정보를 저장할 파일 생성
with open("layers.txt", "w") as f:
f.write("Layer Information:\n")
f.write(f"Model Path: {model_path}\n")
f.write(f"Model Generated Time: {model_generated_time}\n\n")
# 각 레이어 정보를 파일에 기록
with open("layers.txt", "a") as f:
for idx, (name, param) in enumerate(model_weights.items()):
f.write(f"Layer {idx}:\n")
f.write(f"Name: {name}\n")
f.write(f"Size: {param.size()}\n")
from ultralytics import YOLO
# Load a model
model = YOLO("best.pt") # pretrained YOLOv8n model
# Run batched inference on a list of images
results = model(["peaches1.jpg", "peaches2.jpg", "peaches3.jpg", "plum1.jpg", "plum2.jpg"]) # return a list of Results objects
# Process results list
for result in results:
boxes = result.boxes # Boxes object for bounding box outputs
masks = result.masks # Masks object for segmentation masks outputs
keypoints = result.keypoints # Keypoints object for pose outputs
probs = result.probs # Probs object for classification outputs
obb = result.obb # Oriented boxes object for OBB outputs
result.show() # display to screen
result.save(filename="result.jpg") # save to disk
우리가 train 시킨 사과가 없으므로, no detection 이 뜨는 것이 당연하다.
다른 사과 이미지를 한 번 넣어본다.
train 시킨 사과 이미지와 다르면 된다.
학습 데이터가 적어서? detect 되지 않는 문제가 발생한다.
val 데이터를 한 번 넣어본다.
* val 데이터, train 데이터도 제대로 출력되지 않는다(?)
* yolov8n 모델로 돌리면 제대로 나온다.
* 데이터 학습이 제대로 안 되었다는 소리
아무튼 yolov8n 모델로 돌려 보았다.
yolov8n.pt
test 데이터는 더 있는데, 학습되지 않은 자두와 복숭아에 대해서 사과와 구분을 잘 못하는 모습을 보였다.
그래서, 다른 모델을 적용시켜 보기로 했다.
small, medium, large 까지만 사용해 보기로 했다.
yolov8s.pt
small 도 이상하다.
coco dataset 에 복숭아와 자두가 없는게 문제가 큰 것 같다.
yolov8m.pt
yolov8l.pt
train 시키지 않은 항목에 대해서 이미 있는것을 바탕으로 추측하고, 사과와 비슷하게 생겼기 때문에 사과로 인지하는 것 같다. 해당 사진은 '자두' 이다.
커스텀 데이터셋을 다시 train 시킬 필요가 있겠다.
epoch 를 60으로 늘렸다. train 데이터도 제대로 검출이 안 되기 때문.
아니면 항목이 하나밖에 없어서 그럴 수도 있다.
last.pt (epochs=60)
best.pt (epochs=60)
last 와 best 가 동일한 결과를 보였다.
이제 사과 비슷한 모양은 비슷하게 검출되는 것을 확인 가능하다. (best.pt 사용했다.)
Full code 도 첨부하도록 하겠다.
필요한 대로 수정하면서 사용하도록 한다.
# --------------------------------------------------
# from ultralytics import YOLO
# model = YOLO('yolov8n.pt')
# model.train(data="C:/Users/admin/Desktop/github/Apple Finder/data.yaml", epochs=60)
# --------------------------------------------------
# from ultralytics import YOLO
# import torch
# model = torch.load("./best.pt")
# print(model)
#----------------------------------------------------
### image predict
from ultralytics import YOLO
# Load a model
model = YOLO("best.pt") # pretrained YOLOv8n model
# Run batched inference on a list of images
# results = model(["app.jpg"]) # return a list of Results objects
results = model(["apple1.jpg",
"apple2.jpg",
"apple3.jpg",
"peaches1.jpg",
"peaches2.jpg",
"peaches3.jpg",
"plum1.jpg"])
# Process results list
for result in results:
boxes = result.boxes # Boxes object for bounding box outputs
masks = result.masks # Masks object for segmentation masks outputs
keypoints = result.keypoints # Keypoints object for pose outputs
probs = result.probs # Probs object for classification outputs
obb = result.obb # Oriented boxes object for OBB outputs
result.show() # display to screen
result.save(filename="result.jpg") # save to disk
#----------------------------------------------------------