Coder Social home page Coder Social logo

yolov5_in_tf2_keras's Introduction

YOLOv5 in tesnorflow2.x-keras

模型测试

  • 检测效果

()

  • TFLite Android 测试效果:

class [email protected] [email protected]:0.95 precision recall
cat 0.962680 0.672483 0.721003 0.958333
dog 0.934285 0.546893 0.770701 0.923664
total 0.948482 0.609688 0.745852 0.940999

Requirements

pip3 install -r requirements.txt

Get start

  1. 下载数据集
https://www.kaggle.com/datasets/andrewmvd/dog-and-cat-detection/download
或者从releasev1.0下载:
https://github.com/yyccR/yolov5_in_tf2_keras/releases/download/v1.0/JPEGImages.zip

解压数据将images目录修改为JPEGImages, 放到 ./data/cat_dog_face_data下
  1. 训练
python3 train.py
  1. tensorboard
tensorboard --host 0.0.0.0 --logdir ./logs/ --port 8053 --samples_per_plugin=images=40
  1. 查看
http://127.0.0.1:8053
  1. 测试, 修改detect.py里面input_imagemodel_path
python3 detect.py
  1. 评估验证
python3 val.py
  1. 导出TFLite格式
cd ./data
python3 ./h5_to_tfite.py
  1. 导出ONNX格式
cd ./data
python3 ./h5_to_onnx.py

训练自己的数据

  1. labelme打标自己的数据
  2. 打开data/labelme2coco.py脚本, 修改如下地方
input_dir = '这里写labelme打标时保存json标记文件的目录'
output_dir = '这里写要转CoCo格式的目录,建议建一个空目录'
labels = "这里是你打标时所有的类别名, txt文本即可, 每行一个类, 类名无需加引号"
  1. 执行data/labelme2coco.py脚本会在output_dir生成对应的json文件和图片
  2. 修改train.py文件中train_coco_json, val_coco_json, num_class, classes
  3. 开始训练, python3 train.py

yolov5_in_tf2_keras's People

Contributors

yyccr avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

yolov5_in_tf2_keras's Issues

关于类别损失计算的问题

您好,loss这段不是很理解,

yolov5_in_tf2_keras/loss.py

Lines 142 to 152 in 3e6645c

if w_ratio_bool and h_ratio_bool:
grid_xy = np.array(box_xy // (1 / grid_size), np.int32)
# 0,1,2 % 3 = 0,1,2 3,4,5 % 3 = 0,1,2 6,7,8 % 3 = 0,1,2
best_anchor_id = anchor_idx % len(self.anchor_masks[0])
if self.only_best_anchor:
y_true_out[i, grid_xy[0], grid_xy[1], best_anchor_id, :] = \
[box[0], box[1], box[2], box[3], 1, gt_box_class_anchor[i, j, 4]]
else:
y_true_out[i, grid_xy[0], grid_xy[1], :, :] = \
np.array([[box[0], box[1], box[2], box[3], 1, gt_box_class_anchor[i, j, 4]]])

请问targets最后两位应该是置信度1和最佳的anchor索引吗?

yolov5_in_tf2_keras/loss.py

Lines 288 to 293 in 3e6645c

# ----------------- 这里处理target数据 --------------------------
# [batch, grid, grid, anchors, 6(x1, y1, x2, y2, obj, class)]
target = targets[i]
true_box, true_obj, true_cls = tf.split(target, (4, 1, 1), axis=-1)
true_xy = (true_box[..., 0:2] + true_box[..., 2:4]) / 2
true_wh = true_box[..., 2:4] - true_box[..., 0:2]

那这边split出来的true_obj, true_cls应该就是对应的置信度1和最佳的anchor索引吧。
那这个类别损失
class_loss = obj_mask * tf.keras.losses.sparse_categorical_crossentropy(true_cls, pred_cls)

计算的不是最佳anchor索引吗,是跟obj_mask 有关系吗

What is the mAP on COCO17 val ?

Hi @yyccR, thanks for your repo. I want to know if you can reach the same mAP as in original YOLOV5 (Train on COCO17 train and test on COCO17 val)? And do you have plan to release some pretrained checkpoint ?

layers.py

根據ultralytics/yolov5:

https://github.com/ultralytics/yolov5/blob/63ddb6f0d06f6309aa42bababd08c859197a27af/models/common.py#L70-L73

這一段程式:

def call(self, inputs, *args, **kwargs):
x = self.multiheadAttention(self.q(inputs), self.v(inputs), self.k(inputs)) + inputs
x = self.fc1(x)
x = self.fc2(x)
x = x + inputs
return x

是不是應該改寫成:

    def call(self, inputs, *args, **kwargs):
        y = self.multiheadAttention(self.q(inputs), self.v(inputs), self.k(inputs)) + inputs
        x = self.fc1(x)
        x = self.fc2(x)
        x = x +  y
        return x

lebelme2coco处理逻辑有误

我在实际使用您的代码训练自己的数据集时发现,labelme2coco.py 好像缺少对shape_type == "rectangle"时的处理,导致我最后生成的json文件annotations项为空。
以下是labelme2coco.py文件100行到124行代码:
` if shape_type == "polygon":
mask = labelme.utils.shape_to_mask(
img.shape[:2], points, shape_type
)
# cv2.imshow("",np.array(mask, dtype=np.uint8)*255)
# cv2.waitKey(0)

            if group_id is None:
                group_id = uuid.uuid1()

            instance = (label, group_id)
            # print(instance)

            if instance in masks:
                masks[instance] = masks[instance] | mask
            else:
                masks[instance] = mask
            # print(masks[instance].shape)

            if shape_type == "rectangle":
                (x1, y1), (x2, y2) = points
                x1, x2 = sorted([x1, x2])
                y1, y2 = sorted([y1, y2])
                points = [x1, y1, x2, y1, x2, y2, x1, y2]
            if shape_type == "circle": 
            ....

`
代码永远不会执行到shape_type == "rectangle"或shape_type == "circle"。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.