Code Monkey home page Code Monkey logo

ccnet's Introduction

CCNet Document

中文文档

About Model

The model backbone is CSP-Darknet, the feature extraction network is PANet, and the detection head network is Decoupled head.

We provide the following network structures

  1. net.py include SPPF, SpaceToDepth, MobileViT
  2. net_old.py include SPPF, MobileViT
  3. net_deploy.py include SPPF, FocusReplaceConv

What improvements have we made to the overall network?

  1. We replaced the SPP of layer5 of CSP-Darknet with SPPF, and added MobileViT after SPPF (Our implementation based on Apple's paper: 《MobileViT: Light-weight, General-purpose, and Mobile-friendly Vision Transformer》)
  2. In the backbone network, we set a (1: 1: 3: 1) ratio for Bottleneck in the last 4 CSPLayer, references: 《A ConvNet for the 2020s》
  3. We added a three-layer CBAM attention mechanism between the backbone network and the feature extraction network
  4. We adjusted the downsample structure of the overall network and used a new downsampling method to reduce the loss of granularity, references: No More Strided Convolutions or Pooling: A New CNN Building Block for Low-Resolution Images and Small Objects

Coming Soon

  • Enhance the recognition of small target objects
  • Add COCO format training files
  • Development of the TensorRT version

How to Train and Evaluate

  1. Put the dataset into datasets and create a new folder for it (all paths do not use Chinese), you need to use VOC format (JPEGImages, Annotations)
  2. About generating datasets, modify voc_classes, file_dir in tools/annotations.py, right-click to run
  3. Regarding training, modify the parameters in if __name__ == "__main__" in tools/train.py, right-click to run the training
  4. For training datasets, enter tensorboard --logdir=results in the console, open the browser (do not use Google, there will be bugs It is the error of the cookie), enter localhost:6006 to view;
  5. About evaluation, modify the parameters in if __name__ == "__main__" in tools/eval.py, right-click to run the evaluation

How to Communicate with Servers such as Springboot

  1. In the tools/socket2springboot.py file, we use sockets for communication. The default port of the project is 12345. Before deploying to the server, please install the corresponding working environment of the project (Anaconda, Miniconda, etc.). Set the working environment to be enabled by default. For example, take Miniconda as an example, use the sudo vim .bashrc command to open the .bashrc file, add conda activate XXX (your Pytorch environment) in the last line, save it and use source .bashrc command to complete the configuration

  2. The project provides a script file, which runs as bash socket2springboot.sh

  3. Use the nohup python tools/socket2springboot.py command in the current working environment to run. We can save the python output log using the nohup python -u tools/socket2springboot.py > /your/path/log/socket2springboot.log 2>&1 & command. If you need to restart or shut down the service, use the htop command to find the running program and kill it

  4. When the test runs successfully, we use the ps -def | grep "socket2springboot.py" command to view the pid of the current program. When it can be found, run python test/method_test.py to send the test Json data stream

  5. The data stream uses the Json format, and the format from the client to the server is as follows:

    {
        "model_name": "Net", 
        "model_path": "/your/modle/path/your_model_name.pth",
        "dataset": "NEUDET",
        "input_shape": [224, 224],
        "conf_thres": 0.5,
        "nms_thres": 0.6,
        "image_path": ["/your/image/path/image1.jpg",
                       "/your/image/path/image2.jpg",
                       "/your/image/path/image3.jpg"]
    }
  6. When the data is sent, we use the vim log/socket2springboot.log command to open the log file, and the Json data stream returned by the server will be recorded in the file

  7. The data stream is returned from the server to the client in the following format:

    {
        "image": [
            {"image_path": "/your/image/path/image1.jpg", "image_id": 0}, 
            {"image_path": "/your/image/path/image2.jpg", "image_id": 1}, 
            {"image_path": "/your/image/path/image3.jpg", "image_id": 2}], 
        "annotations": [
            {"image_id": 0, "box": [117.38097, 32.385307, 133.57707, 62.68074], "predicted_class": "class1", "conf": 0.66143817}, 
            {"image_id": 0, "box": [33.51411, 6.4222217, 48.198418, 34.87923], "predicted_class": "class1", "conf": 0.64585626}, 
            {"image_id": 0, "box": [112.736916, 146.3184, 133.77809, 198.33405], "predicted_class": "class1", "conf": 0.63799584}, 
            {"image_id": 0, "box": [114.86066, 73.44805, 142.24493, 114.508995], "predicted_class": "class1", "conf": 0.61806077}, 
            {"image_id": 1, "box": [108.89356, -5.1439524, 180.93867, 138.25955], "predicted_class": "class2", "conf": 0.7961505}, 
            {"image_id": 1, "box": [92.11259, 127.67179, 183.05533, 199.58357], "predicted_class": "class2", "conf": 0.7741741}, 
            {"image_id": 1, "box": [10.045683, 65.02976, 73.03552, 122.30415], "predicted_class": "class2", "conf": 0.72269356}, 
            {"image_id": 2, "box": [32.543327, 38.372814, 145.7598, 195.50223], "predicted_class": "class3", "conf": 0.7584684}]
    }
    

ccnet's People

Contributors

chairc avatar edwardtj avatar

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.