First Commit
Signed-off-by: Giancarlo Panichi <giancarlo.panichi@isti.cnr.it>
This commit is contained in:
commit
49d36d3732
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<projectDescription>
|
||||
<name>simpleimageclassifier</name>
|
||||
<comment></comment>
|
||||
<projects>
|
||||
</projects>
|
||||
<buildSpec>
|
||||
<buildCommand>
|
||||
<name>org.python.pydev.PyDevBuilder</name>
|
||||
<arguments>
|
||||
</arguments>
|
||||
</buildCommand>
|
||||
</buildSpec>
|
||||
<natures>
|
||||
<nature>org.python.pydev.pythonNature</nature>
|
||||
</natures>
|
||||
</projectDescription>
|
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<?eclipse-pydev version="1.0"?><pydev_project>
|
||||
<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
|
||||
<path>/${PROJECT_DIR_NAME}</path>
|
||||
</pydev_pathproperty>
|
||||
<pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python interpreter</pydev_property>
|
||||
<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
|
||||
</pydev_project>
|
|
@ -0,0 +1,4 @@
|
|||
eclipse.preferences.version=1
|
||||
encoding//src/simpleimageclassifier/simpleimageclassifier.py=utf-8
|
||||
encoding/<project>=UTF-8
|
||||
encoding/setup.py=utf-8
|
|
@ -0,0 +1,37 @@
|
|||
# Base
|
||||
FROM ubuntu:20.04
|
||||
|
||||
RUN apt-get update
|
||||
RUN apt-get upgrade -y
|
||||
RUN apt-get install -y python3 python3-pip wget
|
||||
|
||||
|
||||
# Istall deps
|
||||
COPY ./requirements.txt /
|
||||
RUN pip3 install -r requirements.txt
|
||||
|
||||
RUN pip3 install torch==1.10.1+cpu torchvision==0.11.2+cpu torchaudio==0.10.1+cpu -f https://download.pytorch.org/whl/cpu/torch_stable.html
|
||||
RUN pip3 install detectron2 -f \
|
||||
https://dl.fbaipublicfiles.com/detectron2/wheels/cpu/torch1.10/index.html
|
||||
|
||||
# Install dist package sortapp
|
||||
COPY ./dist/simpleimageclassifier-1.0.0.tar.gz /
|
||||
|
||||
RUN pip3 install simpleimageclassifier-1.0.0.tar.gz
|
||||
|
||||
COPY canegatto.jpg /
|
||||
#
|
||||
#RUN rm sortapp-1.0.0.tar.gz
|
||||
#RUN rm requirements.txt
|
||||
#RUN rm -r /root/.cache
|
||||
|
||||
### Alternative ###
|
||||
# Create a working directory and Bundle app source
|
||||
# WORKDIR /simpleimageclassifier
|
||||
# COPY src/simpleimageclassifier /simpleimageclassifier
|
||||
|
||||
# Copy all subfolder
|
||||
#ADD . /
|
||||
|
||||
# Autorun
|
||||
# CMD [ "python3", "./simpleimageclassifier.py" ]
|
|
@ -0,0 +1,26 @@
|
|||
# Acknowledgments
|
||||
|
||||
The projects leading to this software have received funding from a series of European Union programmes including:
|
||||
|
||||
- the Sixth Framework Programme for Research and Technological Development
|
||||
- [DILIGENT](https://cordis.europa.eu/project/id/004260) (grant no. 004260).
|
||||
- the Seventh Framework Programme for research, technological development and demonstration
|
||||
- [D4Science](https://cordis.europa.eu/project/id/212488) (grant no. 212488);
|
||||
- [D4Science-II](https://cordis.europa.eu/project/id/239019) (grant no.239019);
|
||||
- [ENVRI](https://cordis.europa.eu/project/id/283465) (grant no. 283465);
|
||||
- [iMarine](https://cordis.europa.eu/project/id/283644) (grant no. 283644);
|
||||
- [EUBrazilOpenBio](https://cordis.europa.eu/project/id/288754) (grant no. 288754).
|
||||
- the H2020 research and innovation programme
|
||||
- [SoBigData](https://cordis.europa.eu/project/id/654024) (grant no. 654024);
|
||||
- [PARTHENOS](https://cordis.europa.eu/project/id/654119) (grant no. 654119);
|
||||
- [EGI-Engage](https://cordis.europa.eu/project/id/654142) (grant no. 654142);
|
||||
- [ENVRI PLUS](https://cordis.europa.eu/project/id/654182) (grant no. 654182);
|
||||
- [BlueBRIDGE](https://cordis.europa.eu/project/id/675680) (grant no. 675680);
|
||||
- [PerformFISH](https://cordis.europa.eu/project/id/727610) (grant no. 727610);
|
||||
- [AGINFRA PLUS](https://cordis.europa.eu/project/id/731001) (grant no. 731001);
|
||||
- [DESIRA](https://cordis.europa.eu/project/id/818194) (grant no. 818194);
|
||||
- [ARIADNEplus](https://cordis.europa.eu/project/id/823914) (grant no. 823914);
|
||||
- [RISIS 2](https://cordis.europa.eu/project/id/824091) (grant no. 824091);
|
||||
- [EOSC-Pillar](https://cordis.europa.eu/project/id/857650) (grant no. 857650);
|
||||
- [Blue Cloud](https://cordis.europa.eu/project/id/862409) (grant no. 862409);
|
||||
- [SoBigData-PlusPlus](https://cordis.europa.eu/project/id/871042) (grant no. 871042);
|
|
@ -0,0 +1,311 @@
|
|||
# European Union Public Licence V. 1.1
|
||||
|
||||
|
||||
EUPL © the European Community 2007
|
||||
|
||||
|
||||
This European Union Public Licence (the “EUPL”) applies to the Work or Software
|
||||
(as defined below) which is provided under the terms of this Licence. Any use of
|
||||
the Work, other than as authorised under this Licence is prohibited (to the
|
||||
extent such use is covered by a right of the copyright holder of the Work).
|
||||
|
||||
The Original Work is provided under the terms of this Licence when the Licensor
|
||||
(as defined below) has placed the following notice immediately following the
|
||||
copyright notice for the Original Work:
|
||||
|
||||
Licensed under the EUPL V.1.1
|
||||
|
||||
or has expressed by any other mean his willingness to license under the EUPL.
|
||||
|
||||
|
||||
|
||||
## 1. Definitions
|
||||
|
||||
In this Licence, the following terms have the following meaning:
|
||||
|
||||
- The Licence: this Licence.
|
||||
|
||||
- The Original Work or the Software: the software distributed and/or
|
||||
communicated by the Licensor under this Licence, available as Source Code and
|
||||
also as Executable Code as the case may be.
|
||||
|
||||
- Derivative Works: the works or software that could be created by the Licensee,
|
||||
based upon the Original Work or modifications thereof. This Licence does not
|
||||
define the extent of modification or dependence on the Original Work required
|
||||
in order to classify a work as a Derivative Work; this extent is determined by
|
||||
copyright law applicable in the country mentioned in Article 15.
|
||||
|
||||
- The Work: the Original Work and/or its Derivative Works.
|
||||
|
||||
- The Source Code: the human-readable form of the Work which is the most
|
||||
convenient for people to study and modify.
|
||||
|
||||
- The Executable Code: any code which has generally been compiled and which is
|
||||
meant to be interpreted by a computer as a program.
|
||||
|
||||
- The Licensor: the natural or legal person that distributes and/or communicates
|
||||
the Work under the Licence.
|
||||
|
||||
- Contributor(s): any natural or legal person who modifies the Work under the
|
||||
Licence, or otherwise contributes to the creation of a Derivative Work.
|
||||
|
||||
- The Licensee or “You”: any natural or legal person who makes any usage of the
|
||||
Software under the terms of the Licence.
|
||||
|
||||
- Distribution and/or Communication: any act of selling, giving, lending,
|
||||
renting, distributing, communicating, transmitting, or otherwise making
|
||||
available, on-line or off-line, copies of the Work or providing access to its
|
||||
essential functionalities at the disposal of any other natural or legal
|
||||
person.
|
||||
|
||||
|
||||
|
||||
## 2. Scope of the rights granted by the Licence
|
||||
|
||||
The Licensor hereby grants You a world-wide, royalty-free, non-exclusive,
|
||||
sub-licensable licence to do the following, for the duration of copyright vested
|
||||
in the Original Work:
|
||||
|
||||
- use the Work in any circumstance and for all usage, reproduce the Work, modify
|
||||
- the Original Work, and make Derivative Works based upon the Work, communicate
|
||||
- to the public, including the right to make available or display the Work or
|
||||
- copies thereof to the public and perform publicly, as the case may be, the
|
||||
- Work, distribute the Work or copies thereof, lend and rent the Work or copies
|
||||
- thereof, sub-license rights in the Work or copies thereof.
|
||||
|
||||
Those rights can be exercised on any media, supports and formats, whether now
|
||||
known or later invented, as far as the applicable law permits so.
|
||||
|
||||
In the countries where moral rights apply, the Licensor waives his right to
|
||||
exercise his moral right to the extent allowed by law in order to make effective
|
||||
the licence of the economic rights here above listed.
|
||||
|
||||
The Licensor grants to the Licensee royalty-free, non exclusive usage rights to
|
||||
any patents held by the Licensor, to the extent necessary to make use of the
|
||||
rights granted on the Work under this Licence.
|
||||
|
||||
|
||||
|
||||
## 3. Communication of the Source Code
|
||||
|
||||
The Licensor may provide the Work either in its Source Code form, or as
|
||||
Executable Code. If the Work is provided as Executable Code, the Licensor
|
||||
provides in addition a machine-readable copy of the Source Code of the Work
|
||||
along with each copy of the Work that the Licensor distributes or indicates, in
|
||||
a notice following the copyright notice attached to the Work, a repository where
|
||||
the Source Code is easily and freely accessible for as long as the Licensor
|
||||
continues to distribute and/or communicate the Work.
|
||||
|
||||
|
||||
|
||||
## 4. Limitations on copyright
|
||||
|
||||
Nothing in this Licence is intended to deprive the Licensee of the benefits from
|
||||
any exception or limitation to the exclusive rights of the rights owners in the
|
||||
Original Work or Software, of the exhaustion of those rights or of other
|
||||
applicable limitations thereto.
|
||||
|
||||
|
||||
|
||||
## 5. Obligations of the Licensee
|
||||
|
||||
The grant of the rights mentioned above is subject to some restrictions and
|
||||
obligations imposed on the Licensee. Those obligations are the following:
|
||||
|
||||
Attribution right: the Licensee shall keep intact all copyright, patent or
|
||||
trademarks notices and all notices that refer to the Licence and to the
|
||||
disclaimer of warranties. The Licensee must include a copy of such notices and a
|
||||
copy of the Licence with every copy of the Work he/she distributes and/or
|
||||
communicates. The Licensee must cause any Derivative Work to carry prominent
|
||||
notices stating that the Work has been modified and the date of modification.
|
||||
|
||||
Copyleft clause: If the Licensee distributes and/or communicates copies of the
|
||||
Original Works or Derivative Works based upon the Original Work, this
|
||||
Distribution and/or Communication will be done under the terms of this Licence
|
||||
or of a later version of this Licence unless the Original Work is expressly
|
||||
distributed only under this version of the Licence. The Licensee (becoming
|
||||
Licensor) cannot offer or impose any additional terms or conditions on the Work
|
||||
or Derivative Work that alter or restrict the terms of the Licence.
|
||||
|
||||
Compatibility clause: If the Licensee Distributes and/or Communicates Derivative
|
||||
Works or copies thereof based upon both the Original Work and another work
|
||||
licensed under a Compatible Licence, this Distribution and/or Communication can
|
||||
be done under the terms of this Compatible Licence. For the sake of this clause,
|
||||
“Compatible Licence” refers to the licences listed in the appendix attached to
|
||||
this Licence. Should the Licensee’s obligations under the Compatible Licence
|
||||
conflict with his/her obligations under this Licence, the obligations of the
|
||||
Compatible Licence shall prevail.
|
||||
|
||||
Provision of Source Code: When distributing and/or communicating copies of the
|
||||
Work, the Licensee will provide a machine-readable copy of the Source Code or
|
||||
indicate a repository where this Source will be easily and freely available for
|
||||
as long as the Licensee continues to distribute and/or communicate the Work.
|
||||
|
||||
Legal Protection: This Licence does not grant permission to use the trade names,
|
||||
trademarks, service marks, or names of the Licensor, except as required for
|
||||
reasonable and customary use in describing the origin of the Work and
|
||||
reproducing the content of the copyright notice.
|
||||
|
||||
|
||||
|
||||
## 6. Chain of Authorship
|
||||
|
||||
The original Licensor warrants that the copyright in the Original Work granted
|
||||
hereunder is owned by him/her or licensed to him/her and that he/she has the
|
||||
power and authority to grant the Licence.
|
||||
|
||||
Each Contributor warrants that the copyright in the modifications he/she brings
|
||||
to the Work are owned by him/her or licensed to him/her and that he/she has the
|
||||
power and authority to grant the Licence.
|
||||
|
||||
Each time You accept the Licence, the original Licensor and subsequent
|
||||
Contributors grant You a licence to their contributions to the Work, under the
|
||||
terms of this Licence.
|
||||
|
||||
|
||||
|
||||
## 7. Disclaimer of Warranty
|
||||
|
||||
The Work is a work in progress, which is continuously improved by numerous
|
||||
contributors. It is not a finished work and may therefore contain defects or
|
||||
“bugs” inherent to this type of software development.
|
||||
|
||||
For the above reason, the Work is provided under the Licence on an “as is” basis
|
||||
and without warranties of any kind concerning the Work, including without
|
||||
limitation merchantability, fitness for a particular purpose, absence of defects
|
||||
or errors, accuracy, non-infringement of intellectual property rights other than
|
||||
copyright as stated in Article 6 of this Licence.
|
||||
|
||||
This disclaimer of warranty is an essential part of the Licence and a condition
|
||||
for the grant of any rights to the Work.
|
||||
|
||||
|
||||
|
||||
## 8. Disclaimer of Liability
|
||||
|
||||
Except in the cases of wilful misconduct or damages directly caused to natural
|
||||
persons, the Licensor will in no event be liable for any direct or indirect,
|
||||
material or moral, damages of any kind, arising out of the Licence or of the use
|
||||
of the Work, including without limitation, damages for loss of goodwill, work
|
||||
stoppage, computer failure or malfunction, loss of data or any commercial
|
||||
damage, even if the Licensor has been advised of the possibility of such
|
||||
damage. However, the Licensor will be liable under statutory product liability
|
||||
laws as far such laws apply to the Work.
|
||||
|
||||
|
||||
|
||||
## 9. Additional agreements
|
||||
|
||||
While distributing the Original Work or Derivative Works, You may choose to
|
||||
conclude an additional agreement to offer, and charge a fee for, acceptance of
|
||||
support, warranty, indemnity, or other liability obligations and/or services
|
||||
consistent with this Licence. However, in accepting such obligations, You may
|
||||
act only on your own behalf and on your sole responsibility, not on behalf of
|
||||
the original Licensor or any other Contributor, and only if You agree to
|
||||
indemnify, defend, and hold each Contributor harmless for any liability incurred
|
||||
by, or claims asserted against such Contributor by the fact You have accepted
|
||||
any such warranty or additional liability.
|
||||
|
||||
|
||||
|
||||
## 10. Acceptance of the Licence
|
||||
|
||||
The provisions of this Licence can be accepted by clicking on an icon “I agree”
|
||||
placed under the bottom of a window displaying the text of this Licence or by
|
||||
affirming consent in any other similar way, in accordance with the rules of
|
||||
applicable law. Clicking on that icon indicates your clear and irrevocable
|
||||
acceptance of this Licence and all of its terms and conditions.
|
||||
|
||||
Similarly, you irrevocably accept this Licence and all of its terms and
|
||||
conditions by exercising any rights granted to You by Article 2 of this Licence,
|
||||
such as the use of the Work, the creation by You of a Derivative Work or the
|
||||
Distribution and/or Communication by You of the Work or copies thereof.
|
||||
|
||||
|
||||
|
||||
## 11. Information to the public
|
||||
|
||||
In case of any Distribution and/or Communication of the Work by means of
|
||||
electronic communication by You (for example, by offering to download the Work
|
||||
from a remote location) the distribution channel or media (for example, a
|
||||
website) must at least provide to the public the information requested by the
|
||||
applicable law regarding the Licensor, the Licence and the way it may be
|
||||
accessible, concluded, stored and reproduced by the Licensee.
|
||||
|
||||
|
||||
|
||||
## 12. Termination of the Licence
|
||||
|
||||
The Licence and the rights granted hereunder will terminate automatically upon
|
||||
any breach by the Licensee of the terms of the Licence.
|
||||
|
||||
Such a termination will not terminate the licences of any person who has
|
||||
received the Work from the Licensee under the Licence, provided such persons
|
||||
remain in full compliance with the Licence.
|
||||
|
||||
|
||||
|
||||
## 13. Miscellaneous
|
||||
|
||||
Without prejudice of Article 9 above, the Licence represents the complete
|
||||
agreement between the Parties as to the Work licensed hereunder.
|
||||
|
||||
If any provision of the Licence is invalid or unenforceable under applicable
|
||||
law, this will not affect the validity or enforceability of the Licence as a
|
||||
whole. Such provision will be construed and/or reformed so as necessary to make
|
||||
it valid and enforceable.
|
||||
|
||||
The European Commission may publish other linguistic versions and/or new
|
||||
versions of this Licence, so far this is required and reasonable, without
|
||||
reducing the scope of the rights granted by the Licence. New versions of the
|
||||
Licence will be published with a unique version number.
|
||||
|
||||
All linguistic versions of this Licence, approved by the European Commission,
|
||||
have identical value. Parties can take advantage of the linguistic version of
|
||||
their choice.
|
||||
|
||||
|
||||
|
||||
## 14. Jurisdiction
|
||||
|
||||
Any litigation resulting from the interpretation of this License, arising
|
||||
between the European Commission, as a Licensor, and any Licensee, will be
|
||||
subject to the jurisdiction of the Court of Justice of the European Communities,
|
||||
as laid down in article 238 of the Treaty establishing the European Community.
|
||||
|
||||
Any litigation arising between Parties, other than the European Commission, and
|
||||
resulting from the interpretation of this License, will be subject to the
|
||||
exclusive jurisdiction of the competent court where the Licensor resides or
|
||||
conducts its primary business.
|
||||
|
||||
|
||||
|
||||
## 15. Applicable Law
|
||||
|
||||
This Licence shall be governed by the law of the European Union country where
|
||||
the Licensor resides or has his registered office.
|
||||
|
||||
This licence shall be governed by the Belgian law if:
|
||||
|
||||
- a litigation arises between the European Commission, as a Licensor, and any
|
||||
- Licensee; the Licensor, other than the European Commission, has no residence
|
||||
- or registered office inside a European Union country.
|
||||
|
||||
|
||||
|
||||
## Appendix
|
||||
|
||||
|
||||
|
||||
“Compatible Licences” according to article 5 EUPL are:
|
||||
|
||||
|
||||
- GNU General Public License (GNU GPL) v. 2
|
||||
|
||||
- Open Software License (OSL) v. 2.1, v. 3.0
|
||||
|
||||
- Common Public License v. 1.0
|
||||
|
||||
- Eclipse Public License v. 1.0
|
||||
|
||||
- Cecill v. 2.0
|
|
@ -0,0 +1,3 @@
|
|||
include README.md
|
||||
include LICENSE.md
|
||||
recursive-include src/simpleimageclassifier/ *
|
|
@ -0,0 +1,96 @@
|
|||
# SimpleImageClassifier
|
||||
|
||||
SimpleImageClassifier is a simple example that allows you to classify a image jpg in input.
|
||||
This example is based on [Detectron2](https://gitub.com/facebookresearch/detectron2 ) that is a Facebook AI Research's.
|
||||
Starting from this example, you can first create an installable package via pip3 and then a docker image in which it is installed the created package.
|
||||
The package declares the simpleimageclassifier command as entrypoint.
|
||||
So once the package is installed you can use this command at command line.
|
||||
Also, you can run it as a module, for example:
|
||||
|
||||
```
|
||||
$ cd src
|
||||
$ python3 -m simpleimageclassifier --config-file simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --input ../canegatto.jpg --output canegatto_out.jpg --opts MODEL.DEVICE cpu MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
|
||||
|
||||
```
|
||||
The image created in this way can be executed in a container with the following command using an jpg file placed in it:
|
||||
|
||||
```
|
||||
docker run -i -t --rm --name simpleimageclassifier-cont simpleimageclassifier simpleimageclassifier --config-file /usr/local/lib/python3.8/dist-packages/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --input <image.jpg> --output <image_out.jpg> --opts MODEL.DEVICE cpu MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
|
||||
```
|
||||
You can also run it directly from the container shell:
|
||||
|
||||
```
|
||||
$ docker run -i -t --rm --name simpleimageclassifier-cont simpleimageclassifier bash
|
||||
|
||||
root@7f371ac6f420:/# simpleimageclassifier --config-file /usr/local/lib/python3.8/dist-packages/detectron2/model_zoo/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --input canegatto.jpg --output canegatto_out.jpg --opts MODEL.DEVICE cpu MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
|
||||
|
||||
```
|
||||
Note the model set by --config-file can be take from detectron2 local lib in this case.
|
||||
|
||||
|
||||
To be able to create an image from this application you need to have Docker and Docker-Compose installed on your machine and the relative python packages, see:
|
||||
[Docker](https://docs.docker.com/engine/),
|
||||
[Docker-Compose](https://docs.docker.com/compose/install/) and
|
||||
[Docker Package for Python](https://pypi.org/project/docker/).
|
||||
|
||||
## Useful Commands
|
||||
|
||||
### Create Distribution Package
|
||||
```
|
||||
python3 setup.py sdist --formats=gztar
|
||||
```
|
||||
### Create Docker Image
|
||||
```
|
||||
docker build -t simpleimageclassifier .
|
||||
```
|
||||
|
||||
### Save Docker Image in file
|
||||
```
|
||||
docker save simpleimageclassifier | gzip > simpleimageclassifier.tar.gz
|
||||
```
|
||||
|
||||
### Publish Docker Image on DockerHub
|
||||
Re-tagging an existing local image:
|
||||
|
||||
```
|
||||
docker tag simpleimageclassifier <hub-user>/<repo-name>[:<tag>]
|
||||
```
|
||||
|
||||
Login in DockerHub(use your Docker ID):
|
||||
|
||||
```
|
||||
docker login
|
||||
```
|
||||
|
||||
Now you can push this repository to the registry designated by its name or tag:
|
||||
|
||||
```
|
||||
docker push <hub-user>/<repo-name>:<tag>
|
||||
```
|
||||
|
||||
Then logout for security:
|
||||
|
||||
```
|
||||
docker logout
|
||||
```
|
||||
|
||||
|
||||
## Authors
|
||||
|
||||
* **Giancarlo Panichi** ([ORCID](http://orcid.org/0000-0001-8375-6644)) - [ISTI-CNR Infrascience Group](http://nemis.isti.cnr.it/groups/infrascience)
|
||||
|
||||
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the EUPL V.1.1 License - see the [LICENSE.md](LICENSE.md) file for details.
|
||||
|
||||
|
||||
## About the gCube Framework
|
||||
This software is part of the [gCubeFramework](https://www.gcube-system.org/ "gCubeFramework"): an
|
||||
open-source software toolkit used for building and operating Hybrid Data
|
||||
Infrastructures enabling the dynamic deployment of Virtual Research Environments
|
||||
by favouring the realisation of reuse oriented policies.
|
||||
|
||||
The projects leading to this software have received funding from a series of European Union programmes see [FUNDING.md](FUNDING.md)
|
||||
|
Binary file not shown.
After Width: | Height: | Size: 43 KiB |
Binary file not shown.
|
@ -0,0 +1,9 @@
|
|||
###### Requirements without Version Specifiers ######
|
||||
requests
|
||||
setuptools
|
||||
matplotlib
|
||||
opencv-python
|
||||
opencv-python-headless
|
||||
|
||||
###### Requirements with Version Specifiers ######
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
python3
|
||||
|
||||
Token
|
||||
xxxx-xxxx-xxxx-xxxx-xxxx
|
||||
|
||||
python3 simpleimageclassifier.py --config-file ./configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --input canegatto.jpg --output canegatto_out.jpg --opts MODEL.DEVICE cpu MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
|
|
@ -0,0 +1,42 @@
|
|||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
#
|
||||
# @author: Giancarlo Panichi
|
||||
#
|
||||
# Created on 2022/07/20
|
||||
#
|
||||
# find_packages
|
||||
import setuptools
|
||||
|
||||
with open("README.md", "r") as freadme:
|
||||
l_description = freadme.read()
|
||||
|
||||
with open("LICENSE.md", "r") as flicense:
|
||||
license_description = flicense.read()
|
||||
|
||||
|
||||
setuptools.setup(
|
||||
name="simpleimageclassifier",
|
||||
version="1.0.0",
|
||||
author="Giancarlo Panichi",
|
||||
author_email="giancarlo.panichi@isti.cnr.it",
|
||||
description="A simple application to do image classification.",
|
||||
long_description=l_description,
|
||||
long_description_content_type="text/markdown",
|
||||
license=license_description,
|
||||
url="https://code-repo.d4science.org/gCubeSystem/simpleimageclassifier",
|
||||
package_dir={"": "src"},
|
||||
packages=setuptools.find_namespace_packages(where="src"),
|
||||
package_data={"": ["*"]},
|
||||
include_package_data=True,
|
||||
entry_points={
|
||||
"console_scripts": ["simpleimageclassifier=simpleimageclassifier.simpleimageclassifier:simpleimageclassifier"]
|
||||
},
|
||||
classifiers=[
|
||||
"Programming Language :: Python :: 3",
|
||||
"License :: European Union Public Licence :: 1.1",
|
||||
"Operating System :: OS Independent",
|
||||
],
|
||||
platforms=["Linux"],
|
||||
python_requires='>=3.8',
|
||||
)
|
Binary file not shown.
After Width: | Height: | Size: 37 KiB |
|
@ -0,0 +1,414 @@
|
|||
Metadata-Version: 2.1
|
||||
Name: simpleimageclassifier
|
||||
Version: 1.0.0
|
||||
Summary: A simple application to do image classification.
|
||||
Home-page: https://code-repo.d4science.org/gCubeSystem/simpleimageclassifier
|
||||
Author: Giancarlo Panichi
|
||||
Author-email: giancarlo.panichi@isti.cnr.it
|
||||
License: # European Union Public Licence V. 1.1
|
||||
|
||||
|
||||
EUPL © the European Community 2007
|
||||
|
||||
|
||||
This European Union Public Licence (the “EUPL”) applies to the Work or Software
|
||||
(as defined below) which is provided under the terms of this Licence. Any use of
|
||||
the Work, other than as authorised under this Licence is prohibited (to the
|
||||
extent such use is covered by a right of the copyright holder of the Work).
|
||||
|
||||
The Original Work is provided under the terms of this Licence when the Licensor
|
||||
(as defined below) has placed the following notice immediately following the
|
||||
copyright notice for the Original Work:
|
||||
|
||||
Licensed under the EUPL V.1.1
|
||||
|
||||
or has expressed by any other mean his willingness to license under the EUPL.
|
||||
|
||||
|
||||
|
||||
## 1. Definitions
|
||||
|
||||
In this Licence, the following terms have the following meaning:
|
||||
|
||||
- The Licence: this Licence.
|
||||
|
||||
- The Original Work or the Software: the software distributed and/or
|
||||
communicated by the Licensor under this Licence, available as Source Code and
|
||||
also as Executable Code as the case may be.
|
||||
|
||||
- Derivative Works: the works or software that could be created by the Licensee,
|
||||
based upon the Original Work or modifications thereof. This Licence does not
|
||||
define the extent of modification or dependence on the Original Work required
|
||||
in order to classify a work as a Derivative Work; this extent is determined by
|
||||
copyright law applicable in the country mentioned in Article 15.
|
||||
|
||||
- The Work: the Original Work and/or its Derivative Works.
|
||||
|
||||
- The Source Code: the human-readable form of the Work which is the most
|
||||
convenient for people to study and modify.
|
||||
|
||||
- The Executable Code: any code which has generally been compiled and which is
|
||||
meant to be interpreted by a computer as a program.
|
||||
|
||||
- The Licensor: the natural or legal person that distributes and/or communicates
|
||||
the Work under the Licence.
|
||||
|
||||
- Contributor(s): any natural or legal person who modifies the Work under the
|
||||
Licence, or otherwise contributes to the creation of a Derivative Work.
|
||||
|
||||
- The Licensee or “You”: any natural or legal person who makes any usage of the
|
||||
Software under the terms of the Licence.
|
||||
|
||||
- Distribution and/or Communication: any act of selling, giving, lending,
|
||||
renting, distributing, communicating, transmitting, or otherwise making
|
||||
available, on-line or off-line, copies of the Work or providing access to its
|
||||
essential functionalities at the disposal of any other natural or legal
|
||||
person.
|
||||
|
||||
|
||||
|
||||
## 2. Scope of the rights granted by the Licence
|
||||
|
||||
The Licensor hereby grants You a world-wide, royalty-free, non-exclusive,
|
||||
sub-licensable licence to do the following, for the duration of copyright vested
|
||||
in the Original Work:
|
||||
|
||||
- use the Work in any circumstance and for all usage, reproduce the Work, modify
|
||||
- the Original Work, and make Derivative Works based upon the Work, communicate
|
||||
- to the public, including the right to make available or display the Work or
|
||||
- copies thereof to the public and perform publicly, as the case may be, the
|
||||
- Work, distribute the Work or copies thereof, lend and rent the Work or copies
|
||||
- thereof, sub-license rights in the Work or copies thereof.
|
||||
|
||||
Those rights can be exercised on any media, supports and formats, whether now
|
||||
known or later invented, as far as the applicable law permits so.
|
||||
|
||||
In the countries where moral rights apply, the Licensor waives his right to
|
||||
exercise his moral right to the extent allowed by law in order to make effective
|
||||
the licence of the economic rights here above listed.
|
||||
|
||||
The Licensor grants to the Licensee royalty-free, non exclusive usage rights to
|
||||
any patents held by the Licensor, to the extent necessary to make use of the
|
||||
rights granted on the Work under this Licence.
|
||||
|
||||
|
||||
|
||||
## 3. Communication of the Source Code
|
||||
|
||||
The Licensor may provide the Work either in its Source Code form, or as
|
||||
Executable Code. If the Work is provided as Executable Code, the Licensor
|
||||
provides in addition a machine-readable copy of the Source Code of the Work
|
||||
along with each copy of the Work that the Licensor distributes or indicates, in
|
||||
a notice following the copyright notice attached to the Work, a repository where
|
||||
the Source Code is easily and freely accessible for as long as the Licensor
|
||||
continues to distribute and/or communicate the Work.
|
||||
|
||||
|
||||
|
||||
## 4. Limitations on copyright
|
||||
|
||||
Nothing in this Licence is intended to deprive the Licensee of the benefits from
|
||||
any exception or limitation to the exclusive rights of the rights owners in the
|
||||
Original Work or Software, of the exhaustion of those rights or of other
|
||||
applicable limitations thereto.
|
||||
|
||||
|
||||
|
||||
## 5. Obligations of the Licensee
|
||||
|
||||
The grant of the rights mentioned above is subject to some restrictions and
|
||||
obligations imposed on the Licensee. Those obligations are the following:
|
||||
|
||||
Attribution right: the Licensee shall keep intact all copyright, patent or
|
||||
trademarks notices and all notices that refer to the Licence and to the
|
||||
disclaimer of warranties. The Licensee must include a copy of such notices and a
|
||||
copy of the Licence with every copy of the Work he/she distributes and/or
|
||||
communicates. The Licensee must cause any Derivative Work to carry prominent
|
||||
notices stating that the Work has been modified and the date of modification.
|
||||
|
||||
Copyleft clause: If the Licensee distributes and/or communicates copies of the
|
||||
Original Works or Derivative Works based upon the Original Work, this
|
||||
Distribution and/or Communication will be done under the terms of this Licence
|
||||
or of a later version of this Licence unless the Original Work is expressly
|
||||
distributed only under this version of the Licence. The Licensee (becoming
|
||||
Licensor) cannot offer or impose any additional terms or conditions on the Work
|
||||
or Derivative Work that alter or restrict the terms of the Licence.
|
||||
|
||||
Compatibility clause: If the Licensee Distributes and/or Communicates Derivative
|
||||
Works or copies thereof based upon both the Original Work and another work
|
||||
licensed under a Compatible Licence, this Distribution and/or Communication can
|
||||
be done under the terms of this Compatible Licence. For the sake of this clause,
|
||||
“Compatible Licence” refers to the licences listed in the appendix attached to
|
||||
this Licence. Should the Licensee’s obligations under the Compatible Licence
|
||||
conflict with his/her obligations under this Licence, the obligations of the
|
||||
Compatible Licence shall prevail.
|
||||
|
||||
Provision of Source Code: When distributing and/or communicating copies of the
|
||||
Work, the Licensee will provide a machine-readable copy of the Source Code or
|
||||
indicate a repository where this Source will be easily and freely available for
|
||||
as long as the Licensee continues to distribute and/or communicate the Work.
|
||||
|
||||
Legal Protection: This Licence does not grant permission to use the trade names,
|
||||
trademarks, service marks, or names of the Licensor, except as required for
|
||||
reasonable and customary use in describing the origin of the Work and
|
||||
reproducing the content of the copyright notice.
|
||||
|
||||
|
||||
|
||||
## 6. Chain of Authorship
|
||||
|
||||
The original Licensor warrants that the copyright in the Original Work granted
|
||||
hereunder is owned by him/her or licensed to him/her and that he/she has the
|
||||
power and authority to grant the Licence.
|
||||
|
||||
Each Contributor warrants that the copyright in the modifications he/she brings
|
||||
to the Work are owned by him/her or licensed to him/her and that he/she has the
|
||||
power and authority to grant the Licence.
|
||||
|
||||
Each time You accept the Licence, the original Licensor and subsequent
|
||||
Contributors grant You a licence to their contributions to the Work, under the
|
||||
terms of this Licence.
|
||||
|
||||
|
||||
|
||||
## 7. Disclaimer of Warranty
|
||||
|
||||
The Work is a work in progress, which is continuously improved by numerous
|
||||
contributors. It is not a finished work and may therefore contain defects or
|
||||
“bugs” inherent to this type of software development.
|
||||
|
||||
For the above reason, the Work is provided under the Licence on an “as is” basis
|
||||
and without warranties of any kind concerning the Work, including without
|
||||
limitation merchantability, fitness for a particular purpose, absence of defects
|
||||
or errors, accuracy, non-infringement of intellectual property rights other than
|
||||
copyright as stated in Article 6 of this Licence.
|
||||
|
||||
This disclaimer of warranty is an essential part of the Licence and a condition
|
||||
for the grant of any rights to the Work.
|
||||
|
||||
|
||||
|
||||
## 8. Disclaimer of Liability
|
||||
|
||||
Except in the cases of wilful misconduct or damages directly caused to natural
|
||||
persons, the Licensor will in no event be liable for any direct or indirect,
|
||||
material or moral, damages of any kind, arising out of the Licence or of the use
|
||||
of the Work, including without limitation, damages for loss of goodwill, work
|
||||
stoppage, computer failure or malfunction, loss of data or any commercial
|
||||
damage, even if the Licensor has been advised of the possibility of such
|
||||
damage. However, the Licensor will be liable under statutory product liability
|
||||
laws as far such laws apply to the Work.
|
||||
|
||||
|
||||
|
||||
## 9. Additional agreements
|
||||
|
||||
While distributing the Original Work or Derivative Works, You may choose to
|
||||
conclude an additional agreement to offer, and charge a fee for, acceptance of
|
||||
support, warranty, indemnity, or other liability obligations and/or services
|
||||
consistent with this Licence. However, in accepting such obligations, You may
|
||||
act only on your own behalf and on your sole responsibility, not on behalf of
|
||||
the original Licensor or any other Contributor, and only if You agree to
|
||||
indemnify, defend, and hold each Contributor harmless for any liability incurred
|
||||
by, or claims asserted against such Contributor by the fact You have accepted
|
||||
any such warranty or additional liability.
|
||||
|
||||
|
||||
|
||||
## 10. Acceptance of the Licence
|
||||
|
||||
The provisions of this Licence can be accepted by clicking on an icon “I agree”
|
||||
placed under the bottom of a window displaying the text of this Licence or by
|
||||
affirming consent in any other similar way, in accordance with the rules of
|
||||
applicable law. Clicking on that icon indicates your clear and irrevocable
|
||||
acceptance of this Licence and all of its terms and conditions.
|
||||
|
||||
Similarly, you irrevocably accept this Licence and all of its terms and
|
||||
conditions by exercising any rights granted to You by Article 2 of this Licence,
|
||||
such as the use of the Work, the creation by You of a Derivative Work or the
|
||||
Distribution and/or Communication by You of the Work or copies thereof.
|
||||
|
||||
|
||||
|
||||
## 11. Information to the public
|
||||
|
||||
In case of any Distribution and/or Communication of the Work by means of
|
||||
electronic communication by You (for example, by offering to download the Work
|
||||
from a remote location) the distribution channel or media (for example, a
|
||||
website) must at least provide to the public the information requested by the
|
||||
applicable law regarding the Licensor, the Licence and the way it may be
|
||||
accessible, concluded, stored and reproduced by the Licensee.
|
||||
|
||||
|
||||
|
||||
## 12. Termination of the Licence
|
||||
|
||||
The Licence and the rights granted hereunder will terminate automatically upon
|
||||
any breach by the Licensee of the terms of the Licence.
|
||||
|
||||
Such a termination will not terminate the licences of any person who has
|
||||
received the Work from the Licensee under the Licence, provided such persons
|
||||
remain in full compliance with the Licence.
|
||||
|
||||
|
||||
|
||||
## 13. Miscellaneous
|
||||
|
||||
Without prejudice of Article 9 above, the Licence represents the complete
|
||||
agreement between the Parties as to the Work licensed hereunder.
|
||||
|
||||
If any provision of the Licence is invalid or unenforceable under applicable
|
||||
law, this will not affect the validity or enforceability of the Licence as a
|
||||
whole. Such provision will be construed and/or reformed so as necessary to make
|
||||
it valid and enforceable.
|
||||
|
||||
The European Commission may publish other linguistic versions and/or new
|
||||
versions of this Licence, so far this is required and reasonable, without
|
||||
reducing the scope of the rights granted by the Licence. New versions of the
|
||||
Licence will be published with a unique version number.
|
||||
|
||||
All linguistic versions of this Licence, approved by the European Commission,
|
||||
have identical value. Parties can take advantage of the linguistic version of
|
||||
their choice.
|
||||
|
||||
|
||||
|
||||
## 14. Jurisdiction
|
||||
|
||||
Any litigation resulting from the interpretation of this License, arising
|
||||
between the European Commission, as a Licensor, and any Licensee, will be
|
||||
subject to the jurisdiction of the Court of Justice of the European Communities,
|
||||
as laid down in article 238 of the Treaty establishing the European Community.
|
||||
|
||||
Any litigation arising between Parties, other than the European Commission, and
|
||||
resulting from the interpretation of this License, will be subject to the
|
||||
exclusive jurisdiction of the competent court where the Licensor resides or
|
||||
conducts its primary business.
|
||||
|
||||
|
||||
|
||||
## 15. Applicable Law
|
||||
|
||||
This Licence shall be governed by the law of the European Union country where
|
||||
the Licensor resides or has his registered office.
|
||||
|
||||
This licence shall be governed by the Belgian law if:
|
||||
|
||||
- a litigation arises between the European Commission, as a Licensor, and any
|
||||
- Licensee; the Licensor, other than the European Commission, has no residence
|
||||
- or registered office inside a European Union country.
|
||||
|
||||
|
||||
|
||||
## Appendix
|
||||
|
||||
|
||||
|
||||
“Compatible Licences” according to article 5 EUPL are:
|
||||
|
||||
|
||||
- GNU General Public License (GNU GPL) v. 2
|
||||
|
||||
- Open Software License (OSL) v. 2.1, v. 3.0
|
||||
|
||||
- Common Public License v. 1.0
|
||||
|
||||
- Eclipse Public License v. 1.0
|
||||
|
||||
- Cecill v. 2.0
|
||||
|
||||
Platform: Linux
|
||||
Classifier: Programming Language :: Python :: 3
|
||||
Classifier: License :: European Union Public Licence :: 1.1
|
||||
Classifier: Operating System :: OS Independent
|
||||
Requires-Python: >=3.8
|
||||
Description-Content-Type: text/markdown
|
||||
License-File: LICENSE.md
|
||||
|
||||
# SimpleImageClassifier
|
||||
|
||||
SimpleImageClassifier is a simple example that allows you to clissify a image jpg in input.
|
||||
Starting from this example, you can first create an installable package via pip3 and then a docker image in which it is installed the created package.
|
||||
The package declares the simpleimageclassifier command as entrypoint.
|
||||
So once the package is installed you can use this command at command line to run the example:
|
||||
|
||||
```
|
||||
simpleimageclassifier --config-file configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --input <image.jpg> --output <image_out.jpg> --opts MODEL.DEVICE cpu MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
|
||||
|
||||
|
||||
```
|
||||
|
||||
The image created in this way can be executed in a container with the following command:
|
||||
|
||||
```
|
||||
docker run -i -t --rm --name simpleimageclassifier-cont simpleimageclassifier simpleimageclassifier --config-file configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml --input <image.jpg> --output <image_out.jpg> --opts MODEL.DEVICE cpu MODEL.WEIGHTS detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl
|
||||
```
|
||||
|
||||
To be able to create an image from this application you need to have Docker and Docker-Compose installed on your machine and the relative python packages, see:
|
||||
[Docker](https://docs.docker.com/engine/),
|
||||
[Docker-Compose](https://docs.docker.com/compose/install/) and
|
||||
[Docker Package for Python](https://pypi.org/project/docker/).
|
||||
|
||||
## Useful Commands
|
||||
|
||||
### Create Distribution Package
|
||||
```
|
||||
python3 setup.py sdist --formats=gztar
|
||||
```
|
||||
### Create Docker Image
|
||||
```
|
||||
docker build -t simpleimageclassifier .
|
||||
```
|
||||
|
||||
### Save Docker Image in file
|
||||
```
|
||||
docker save simpleimageclassifier | gzip > simpleimageclassifier.tar.gz
|
||||
```
|
||||
|
||||
### Publish Docker Image on DockerHub
|
||||
Re-tagging an existing local image:
|
||||
|
||||
```
|
||||
docker tag simpleimageclassifier <hub-user>/<repo-name>[:<tag>]
|
||||
```
|
||||
|
||||
Login in DockerHub(use your Docker ID):
|
||||
|
||||
```
|
||||
docker login
|
||||
```
|
||||
|
||||
Now you can push this repository to the registry designated by its name or tag:
|
||||
|
||||
```
|
||||
docker push <hub-user>/<repo-name>:<tag>
|
||||
```
|
||||
|
||||
Then logout for security:
|
||||
|
||||
```
|
||||
docker logout
|
||||
```
|
||||
|
||||
|
||||
## Authors
|
||||
|
||||
* **Giancarlo Panichi** ([ORCID](http://orcid.org/0000-0001-8375-6644)) - [ISTI-CNR Infrascience Group](http://nemis.isti.cnr.it/groups/infrascience)
|
||||
|
||||
|
||||
|
||||
## License
|
||||
|
||||
This project is licensed under the EUPL V.1.1 License - see the [LICENSE.md](LICENSE.md) file for details.
|
||||
|
||||
|
||||
## About the gCube Framework
|
||||
This software is part of the [gCubeFramework](https://www.gcube-system.org/ "gCubeFramework"): an
|
||||
open-source software toolkit used for building and operating Hybrid Data
|
||||
Infrastructures enabling the dynamic deployment of Virtual Research Environments
|
||||
by favouring the realisation of reuse oriented policies.
|
||||
|
||||
The projects leading to this software have received funding from a series of European Union programmes see [FUNDING.md](FUNDING.md)
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,146 @@
|
|||
LICENSE.md
|
||||
MANIFEST.in
|
||||
README.md
|
||||
setup.py
|
||||
src/simpleimageclassifier/__init__.py
|
||||
src/simpleimageclassifier/__main__.py
|
||||
src/simpleimageclassifier/predictor.py
|
||||
src/simpleimageclassifier/simpleimageclassifier.py
|
||||
src/simpleimageclassifier.egg-info/PKG-INFO
|
||||
src/simpleimageclassifier.egg-info/SOURCES.txt
|
||||
src/simpleimageclassifier.egg-info/dependency_links.txt
|
||||
src/simpleimageclassifier.egg-info/entry_points.txt
|
||||
src/simpleimageclassifier.egg-info/top_level.txt
|
||||
src/simpleimageclassifier/configs/Base-RCNN-C4.yaml
|
||||
src/simpleimageclassifier/configs/Base-RCNN-DilatedC5.yaml
|
||||
src/simpleimageclassifier/configs/Base-RCNN-FPN.yaml
|
||||
src/simpleimageclassifier/configs/Base-RetinaNet.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/fast_rcnn_R_50_FPN_1x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_101_C4_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_101_DC5_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_101_FPN_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_50_C4_1x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_50_C4_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_50_DC5_1x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_50_DC5_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_50_FPN_1x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/faster_rcnn_X_101_32x8d_FPN_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/fcos_R_50_FPN_1x.py
|
||||
src/simpleimageclassifier/configs/COCO-Detection/retinanet_R_101_FPN_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/retinanet_R_50_FPN_1x.py
|
||||
src/simpleimageclassifier/configs/COCO-Detection/retinanet_R_50_FPN_1x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/retinanet_R_50_FPN_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/rpn_R_50_C4_1x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Detection/rpn_R_50_FPN_1x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_101_C4_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_101_DC5_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_101_FPN_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_C4_1x.py
|
||||
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_C4_1x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_C4_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_DC5_1x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_DC5_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.py
|
||||
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_1x_giou.yaml
|
||||
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_X_101_32x8d_FPN_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_regnetx_4gf_dds_fpn_1x.py
|
||||
src/simpleimageclassifier/configs/COCO-InstanceSegmentation/mask_rcnn_regnety_4gf_dds_fpn_1x.py
|
||||
src/simpleimageclassifier/configs/COCO-Keypoints/Base-Keypoint-RCNN-FPN.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Keypoints/keypoint_rcnn_R_101_FPN_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Keypoints/keypoint_rcnn_R_50_FPN_1x.py
|
||||
src/simpleimageclassifier/configs/COCO-Keypoints/keypoint_rcnn_R_50_FPN_1x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Keypoints/keypoint_rcnn_R_50_FPN_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-Keypoints/keypoint_rcnn_X_101_32x8d_FPN_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-PanopticSegmentation/Base-Panoptic-FPN.yaml
|
||||
src/simpleimageclassifier/configs/COCO-PanopticSegmentation/panoptic_fpn_R_101_3x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-PanopticSegmentation/panoptic_fpn_R_50_1x.py
|
||||
src/simpleimageclassifier/configs/COCO-PanopticSegmentation/panoptic_fpn_R_50_1x.yaml
|
||||
src/simpleimageclassifier/configs/COCO-PanopticSegmentation/panoptic_fpn_R_50_3x.yaml
|
||||
src/simpleimageclassifier/configs/Cityscapes/mask_rcnn_R_50_FPN.yaml
|
||||
src/simpleimageclassifier/configs/Detectron1-Comparisons/README.md
|
||||
src/simpleimageclassifier/configs/Detectron1-Comparisons/faster_rcnn_R_50_FPN_noaug_1x.yaml
|
||||
src/simpleimageclassifier/configs/Detectron1-Comparisons/keypoint_rcnn_R_50_FPN_1x.yaml
|
||||
src/simpleimageclassifier/configs/Detectron1-Comparisons/mask_rcnn_R_50_FPN_noaug_1x.yaml
|
||||
src/simpleimageclassifier/configs/LVISv0.5-InstanceSegmentation/mask_rcnn_R_101_FPN_1x.yaml
|
||||
src/simpleimageclassifier/configs/LVISv0.5-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml
|
||||
src/simpleimageclassifier/configs/LVISv0.5-InstanceSegmentation/mask_rcnn_X_101_32x8d_FPN_1x.yaml
|
||||
src/simpleimageclassifier/configs/LVISv1-InstanceSegmentation/mask_rcnn_R_101_FPN_1x.yaml
|
||||
src/simpleimageclassifier/configs/LVISv1-InstanceSegmentation/mask_rcnn_R_50_FPN_1x.yaml
|
||||
src/simpleimageclassifier/configs/LVISv1-InstanceSegmentation/mask_rcnn_X_101_32x8d_FPN_1x.yaml
|
||||
src/simpleimageclassifier/configs/Misc/cascade_mask_rcnn_R_50_FPN_1x.yaml
|
||||
src/simpleimageclassifier/configs/Misc/cascade_mask_rcnn_R_50_FPN_3x.yaml
|
||||
src/simpleimageclassifier/configs/Misc/cascade_mask_rcnn_X_152_32x8d_FPN_IN5k_gn_dconv.yaml
|
||||
src/simpleimageclassifier/configs/Misc/mask_rcnn_R_50_FPN_1x_cls_agnostic.yaml
|
||||
src/simpleimageclassifier/configs/Misc/mask_rcnn_R_50_FPN_1x_dconv_c3-c5.yaml
|
||||
src/simpleimageclassifier/configs/Misc/mask_rcnn_R_50_FPN_3x_dconv_c3-c5.yaml
|
||||
src/simpleimageclassifier/configs/Misc/mask_rcnn_R_50_FPN_3x_gn.yaml
|
||||
src/simpleimageclassifier/configs/Misc/mask_rcnn_R_50_FPN_3x_syncbn.yaml
|
||||
src/simpleimageclassifier/configs/Misc/mmdet_mask_rcnn_R_50_FPN_1x.py
|
||||
src/simpleimageclassifier/configs/Misc/panoptic_fpn_R_101_dconv_cascade_gn_3x.yaml
|
||||
src/simpleimageclassifier/configs/Misc/scratch_mask_rcnn_R_50_FPN_3x_gn.yaml
|
||||
src/simpleimageclassifier/configs/Misc/scratch_mask_rcnn_R_50_FPN_9x_gn.yaml
|
||||
src/simpleimageclassifier/configs/Misc/scratch_mask_rcnn_R_50_FPN_9x_syncbn.yaml
|
||||
src/simpleimageclassifier/configs/Misc/semantic_R_50_FPN_1x.yaml
|
||||
src/simpleimageclassifier/configs/Misc/torchvision_imagenet_R_50.py
|
||||
src/simpleimageclassifier/configs/PascalVOC-Detection/faster_rcnn_R_50_C4.yaml
|
||||
src/simpleimageclassifier/configs/PascalVOC-Detection/faster_rcnn_R_50_FPN.yaml
|
||||
src/simpleimageclassifier/configs/common/README.md
|
||||
src/simpleimageclassifier/configs/common/coco_schedule.py
|
||||
src/simpleimageclassifier/configs/common/optim.py
|
||||
src/simpleimageclassifier/configs/common/train.py
|
||||
src/simpleimageclassifier/configs/common/data/coco.py
|
||||
src/simpleimageclassifier/configs/common/data/coco_keypoint.py
|
||||
src/simpleimageclassifier/configs/common/data/coco_panoptic_separated.py
|
||||
src/simpleimageclassifier/configs/common/data/constants.py
|
||||
src/simpleimageclassifier/configs/common/models/cascade_rcnn.py
|
||||
src/simpleimageclassifier/configs/common/models/fcos.py
|
||||
src/simpleimageclassifier/configs/common/models/keypoint_rcnn_fpn.py
|
||||
src/simpleimageclassifier/configs/common/models/mask_rcnn_c4.py
|
||||
src/simpleimageclassifier/configs/common/models/mask_rcnn_fpn.py
|
||||
src/simpleimageclassifier/configs/common/models/mask_rcnn_vitdet.py
|
||||
src/simpleimageclassifier/configs/common/models/panoptic_fpn.py
|
||||
src/simpleimageclassifier/configs/common/models/retinanet.py
|
||||
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_R_101_FPN_100ep_LSJ.py
|
||||
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_R_101_FPN_200ep_LSJ.py
|
||||
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_R_101_FPN_400ep_LSJ.py
|
||||
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_R_50_FPN_100ep_LSJ.py
|
||||
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_R_50_FPN_200ep_LSJ.py
|
||||
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_R_50_FPN_400ep_LSJ.py
|
||||
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_R_50_FPN_50ep_LSJ.py
|
||||
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_regnetx_4gf_dds_FPN_100ep_LSJ.py
|
||||
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_regnetx_4gf_dds_FPN_200ep_LSJ.py
|
||||
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_regnetx_4gf_dds_FPN_400ep_LSJ.py
|
||||
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_regnety_4gf_dds_FPN_100ep_LSJ.py
|
||||
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_regnety_4gf_dds_FPN_200ep_LSJ.py
|
||||
src/simpleimageclassifier/configs/new_baselines/mask_rcnn_regnety_4gf_dds_FPN_400ep_LSJ.py
|
||||
src/simpleimageclassifier/configs/quick_schedules/README.md
|
||||
src/simpleimageclassifier/configs/quick_schedules/cascade_mask_rcnn_R_50_FPN_inference_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/cascade_mask_rcnn_R_50_FPN_instant_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/fast_rcnn_R_50_FPN_inference_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/fast_rcnn_R_50_FPN_instant_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/keypoint_rcnn_R_50_FPN_inference_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/keypoint_rcnn_R_50_FPN_instant_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/keypoint_rcnn_R_50_FPN_normalized_training_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/keypoint_rcnn_R_50_FPN_training_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_C4_GCV_instant_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_C4_inference_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_C4_instant_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_C4_training_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_DC5_inference_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_FPN_inference_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_FPN_instant_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_FPN_pred_boxes_training_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/mask_rcnn_R_50_FPN_training_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/panoptic_fpn_R_50_inference_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/panoptic_fpn_R_50_instant_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/panoptic_fpn_R_50_training_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/retinanet_R_50_FPN_inference_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/retinanet_R_50_FPN_instant_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/rpn_R_50_FPN_inference_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/rpn_R_50_FPN_instant_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/semantic_R_50_FPN_inference_acc_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/semantic_R_50_FPN_instant_test.yaml
|
||||
src/simpleimageclassifier/configs/quick_schedules/semantic_R_50_FPN_training_acc_test.yaml
|
|
@ -0,0 +1 @@
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
[console_scripts]
|
||||
simpleimageclassifier = simpleimageclassifier.simpleimageclassifier:simpleimageclassifier
|
||||
|
|
@ -0,0 +1 @@
|
|||
simpleimageclassifier
|
|
@ -0,0 +1,2 @@
|
|||
print("__init__.py")
|
||||
print(__package__)
|
|
@ -0,0 +1,6 @@
|
|||
print(__name__)
|
||||
print(__package__)
|
||||
from .simpleimageclassifier import simpleimageclassifier
|
||||
|
||||
if __name__ == '__main__':
|
||||
simpleimageclassifier()
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,18 @@
|
|||
MODEL:
|
||||
META_ARCHITECTURE: "GeneralizedRCNN"
|
||||
RPN:
|
||||
PRE_NMS_TOPK_TEST: 6000
|
||||
POST_NMS_TOPK_TEST: 1000
|
||||
ROI_HEADS:
|
||||
NAME: "Res5ROIHeads"
|
||||
DATASETS:
|
||||
TRAIN: ("coco_2017_train",)
|
||||
TEST: ("coco_2017_val",)
|
||||
SOLVER:
|
||||
IMS_PER_BATCH: 16
|
||||
BASE_LR: 0.02
|
||||
STEPS: (60000, 80000)
|
||||
MAX_ITER: 90000
|
||||
INPUT:
|
||||
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||
VERSION: 2
|
|
@ -0,0 +1,31 @@
|
|||
MODEL:
|
||||
META_ARCHITECTURE: "GeneralizedRCNN"
|
||||
RESNETS:
|
||||
OUT_FEATURES: ["res5"]
|
||||
RES5_DILATION: 2
|
||||
RPN:
|
||||
IN_FEATURES: ["res5"]
|
||||
PRE_NMS_TOPK_TEST: 6000
|
||||
POST_NMS_TOPK_TEST: 1000
|
||||
ROI_HEADS:
|
||||
NAME: "StandardROIHeads"
|
||||
IN_FEATURES: ["res5"]
|
||||
ROI_BOX_HEAD:
|
||||
NAME: "FastRCNNConvFCHead"
|
||||
NUM_FC: 2
|
||||
POOLER_RESOLUTION: 7
|
||||
ROI_MASK_HEAD:
|
||||
NAME: "MaskRCNNConvUpsampleHead"
|
||||
NUM_CONV: 4
|
||||
POOLER_RESOLUTION: 14
|
||||
DATASETS:
|
||||
TRAIN: ("coco_2017_train",)
|
||||
TEST: ("coco_2017_val",)
|
||||
SOLVER:
|
||||
IMS_PER_BATCH: 16
|
||||
BASE_LR: 0.02
|
||||
STEPS: (60000, 80000)
|
||||
MAX_ITER: 90000
|
||||
INPUT:
|
||||
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||
VERSION: 2
|
|
@ -0,0 +1,42 @@
|
|||
MODEL:
|
||||
META_ARCHITECTURE: "GeneralizedRCNN"
|
||||
BACKBONE:
|
||||
NAME: "build_resnet_fpn_backbone"
|
||||
RESNETS:
|
||||
OUT_FEATURES: ["res2", "res3", "res4", "res5"]
|
||||
FPN:
|
||||
IN_FEATURES: ["res2", "res3", "res4", "res5"]
|
||||
ANCHOR_GENERATOR:
|
||||
SIZES: [[32], [64], [128], [256], [512]] # One size for each in feature map
|
||||
ASPECT_RATIOS: [[0.5, 1.0, 2.0]] # Three aspect ratios (same for all in feature maps)
|
||||
RPN:
|
||||
IN_FEATURES: ["p2", "p3", "p4", "p5", "p6"]
|
||||
PRE_NMS_TOPK_TRAIN: 2000 # Per FPN level
|
||||
PRE_NMS_TOPK_TEST: 1000 # Per FPN level
|
||||
# Detectron1 uses 2000 proposals per-batch,
|
||||
# (See "modeling/rpn/rpn_outputs.py" for details of this legacy issue)
|
||||
# which is approximately 1000 proposals per-image since the default batch size for FPN is 2.
|
||||
POST_NMS_TOPK_TRAIN: 1000
|
||||
POST_NMS_TOPK_TEST: 1000
|
||||
ROI_HEADS:
|
||||
NAME: "StandardROIHeads"
|
||||
IN_FEATURES: ["p2", "p3", "p4", "p5"]
|
||||
ROI_BOX_HEAD:
|
||||
NAME: "FastRCNNConvFCHead"
|
||||
NUM_FC: 2
|
||||
POOLER_RESOLUTION: 7
|
||||
ROI_MASK_HEAD:
|
||||
NAME: "MaskRCNNConvUpsampleHead"
|
||||
NUM_CONV: 4
|
||||
POOLER_RESOLUTION: 14
|
||||
DATASETS:
|
||||
TRAIN: ("coco_2017_train",)
|
||||
TEST: ("coco_2017_val",)
|
||||
SOLVER:
|
||||
IMS_PER_BATCH: 16
|
||||
BASE_LR: 0.02
|
||||
STEPS: (60000, 80000)
|
||||
MAX_ITER: 90000
|
||||
INPUT:
|
||||
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||
VERSION: 2
|
|
@ -0,0 +1,25 @@
|
|||
MODEL:
|
||||
META_ARCHITECTURE: "RetinaNet"
|
||||
BACKBONE:
|
||||
NAME: "build_retinanet_resnet_fpn_backbone"
|
||||
RESNETS:
|
||||
OUT_FEATURES: ["res3", "res4", "res5"]
|
||||
ANCHOR_GENERATOR:
|
||||
SIZES: !!python/object/apply:eval ["[[x, x * 2**(1.0/3), x * 2**(2.0/3) ] for x in [32, 64, 128, 256, 512 ]]"]
|
||||
FPN:
|
||||
IN_FEATURES: ["res3", "res4", "res5"]
|
||||
RETINANET:
|
||||
IOU_THRESHOLDS: [0.4, 0.5]
|
||||
IOU_LABELS: [0, -1, 1]
|
||||
SMOOTH_L1_LOSS_BETA: 0.0
|
||||
DATASETS:
|
||||
TRAIN: ("coco_2017_train",)
|
||||
TEST: ("coco_2017_val",)
|
||||
SOLVER:
|
||||
IMS_PER_BATCH: 16
|
||||
BASE_LR: 0.01 # Note that RetinaNet uses a different default learning rate
|
||||
STEPS: (60000, 80000)
|
||||
MAX_ITER: 90000
|
||||
INPUT:
|
||||
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||
VERSION: 2
|
|
@ -0,0 +1,17 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: False
|
||||
LOAD_PROPOSALS: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
PROPOSAL_GENERATOR:
|
||||
NAME: "PrecomputedProposals"
|
||||
DATASETS:
|
||||
TRAIN: ("coco_2017_train",)
|
||||
PROPOSAL_FILES_TRAIN: ("detectron2://COCO-Detection/rpn_R_50_FPN_1x/137258492/coco_2017_train_box_proposals_21bc3a.pkl", )
|
||||
TEST: ("coco_2017_val",)
|
||||
PROPOSAL_FILES_TEST: ("detectron2://COCO-Detection/rpn_R_50_FPN_1x/137258492/coco_2017_val_box_proposals_ee0dad.pkl", )
|
||||
DATALOADER:
|
||||
# proposals are part of the dataset_dicts, and take a lot of RAM
|
||||
NUM_WORKERS: 2
|
|
@ -0,0 +1,9 @@
|
|||
_BASE_: "../Base-RCNN-C4.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||
MASK_ON: False
|
||||
RESNETS:
|
||||
DEPTH: 101
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,9 @@
|
|||
_BASE_: "../Base-RCNN-DilatedC5.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||
MASK_ON: False
|
||||
RESNETS:
|
||||
DEPTH: 101
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,9 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||
MASK_ON: False
|
||||
RESNETS:
|
||||
DEPTH: 101
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,6 @@
|
|||
_BASE_: "../Base-RCNN-C4.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: False
|
||||
RESNETS:
|
||||
DEPTH: 50
|
|
@ -0,0 +1,9 @@
|
|||
_BASE_: "../Base-RCNN-C4.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: False
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,6 @@
|
|||
_BASE_: "../Base-RCNN-DilatedC5.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: False
|
||||
RESNETS:
|
||||
DEPTH: 50
|
|
@ -0,0 +1,9 @@
|
|||
_BASE_: "../Base-RCNN-DilatedC5.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: False
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,6 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: False
|
||||
RESNETS:
|
||||
DEPTH: 50
|
|
@ -0,0 +1,9 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: False
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,13 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
MASK_ON: False
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/FAIR/X-101-32x8d.pkl"
|
||||
PIXEL_STD: [57.375, 57.120, 58.395]
|
||||
RESNETS:
|
||||
STRIDE_IN_1X1: False # this is a C2 model
|
||||
NUM_GROUPS: 32
|
||||
WIDTH_PER_GROUP: 8
|
||||
DEPTH: 101
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,11 @@
|
|||
from ..common.optim import SGD as optimizer
|
||||
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||
from ..common.data.coco import dataloader
|
||||
from ..common.models.fcos import model
|
||||
from ..common.train import train
|
||||
|
||||
dataloader.train.mapper.use_instance_mask = False
|
||||
optimizer.lr = 0.01
|
||||
|
||||
model.backbone.bottom_up.freeze_at = 2
|
||||
train.init_checkpoint = "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
|
@ -0,0 +1,8 @@
|
|||
_BASE_: "../Base-RetinaNet.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||
RESNETS:
|
||||
DEPTH: 101
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,11 @@
|
|||
from ..common.optim import SGD as optimizer
|
||||
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||
from ..common.data.coco import dataloader
|
||||
from ..common.models.retinanet import model
|
||||
from ..common.train import train
|
||||
|
||||
dataloader.train.mapper.use_instance_mask = False
|
||||
model.backbone.bottom_up.freeze_at = 2
|
||||
optimizer.lr = 0.01
|
||||
|
||||
train.init_checkpoint = "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
|
@ -0,0 +1,5 @@
|
|||
_BASE_: "../Base-RetinaNet.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
RESNETS:
|
||||
DEPTH: 50
|
|
@ -0,0 +1,8 @@
|
|||
_BASE_: "../Base-RetinaNet.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,10 @@
|
|||
_BASE_: "../Base-RCNN-C4.yaml"
|
||||
MODEL:
|
||||
META_ARCHITECTURE: "ProposalNetwork"
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: False
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
RPN:
|
||||
PRE_NMS_TOPK_TEST: 12000
|
||||
POST_NMS_TOPK_TEST: 2000
|
|
@ -0,0 +1,9 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
META_ARCHITECTURE: "ProposalNetwork"
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: False
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
RPN:
|
||||
POST_NMS_TOPK_TEST: 2000
|
|
@ -0,0 +1,9 @@
|
|||
_BASE_: "../Base-RCNN-C4.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 101
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,9 @@
|
|||
_BASE_: "../Base-RCNN-DilatedC5.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 101
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,9 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 101
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,8 @@
|
|||
from ..common.train import train
|
||||
from ..common.optim import SGD as optimizer
|
||||
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||
from ..common.data.coco import dataloader
|
||||
from ..common.models.mask_rcnn_c4 import model
|
||||
|
||||
model.backbone.freeze_at = 2
|
||||
train.init_checkpoint = "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
|
@ -0,0 +1,6 @@
|
|||
_BASE_: "../Base-RCNN-C4.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
|
@ -0,0 +1,9 @@
|
|||
_BASE_: "../Base-RCNN-C4.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,6 @@
|
|||
_BASE_: "../Base-RCNN-DilatedC5.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
|
@ -0,0 +1,9 @@
|
|||
_BASE_: "../Base-RCNN-DilatedC5.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,8 @@
|
|||
from ..common.optim import SGD as optimizer
|
||||
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||
from ..common.data.coco import dataloader
|
||||
from ..common.models.mask_rcnn_fpn import model
|
||||
from ..common.train import train
|
||||
|
||||
model.backbone.bottom_up.freeze_at = 2
|
||||
train.init_checkpoint = "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
|
@ -0,0 +1,6 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
|
@ -0,0 +1,12 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
RPN:
|
||||
BBOX_REG_LOSS_TYPE: "giou"
|
||||
BBOX_REG_LOSS_WEIGHT: 2.0
|
||||
ROI_BOX_HEAD:
|
||||
BBOX_REG_LOSS_TYPE: "giou"
|
||||
BBOX_REG_LOSS_WEIGHT: 10.0
|
|
@ -0,0 +1,9 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,13 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
MASK_ON: True
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/FAIR/X-101-32x8d.pkl"
|
||||
PIXEL_STD: [57.375, 57.120, 58.395]
|
||||
RESNETS:
|
||||
STRIDE_IN_1X1: False # this is a C2 model
|
||||
NUM_GROUPS: 32
|
||||
WIDTH_PER_GROUP: 8
|
||||
DEPTH: 101
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,34 @@
|
|||
from ..common.optim import SGD as optimizer
|
||||
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||
from ..common.data.coco import dataloader
|
||||
from ..common.models.mask_rcnn_fpn import model
|
||||
from ..common.train import train
|
||||
|
||||
from detectron2.config import LazyCall as L
|
||||
from detectron2.modeling.backbone import RegNet
|
||||
from detectron2.modeling.backbone.regnet import SimpleStem, ResBottleneckBlock
|
||||
|
||||
|
||||
# Replace default ResNet with RegNetX-4GF from the DDS paper. Config source:
|
||||
# https://github.com/facebookresearch/pycls/blob/2c152a6e5d913e898cca4f0a758f41e6b976714d/configs/dds_baselines/regnetx/RegNetX-4.0GF_dds_8gpu.yaml#L4-L9 # noqa
|
||||
model.backbone.bottom_up = L(RegNet)(
|
||||
stem_class=SimpleStem,
|
||||
stem_width=32,
|
||||
block_class=ResBottleneckBlock,
|
||||
depth=23,
|
||||
w_a=38.65,
|
||||
w_0=96,
|
||||
w_m=2.43,
|
||||
group_width=40,
|
||||
freeze_at=2,
|
||||
norm="FrozenBN",
|
||||
out_features=["s1", "s2", "s3", "s4"],
|
||||
)
|
||||
model.pixel_std = [57.375, 57.120, 58.395]
|
||||
|
||||
optimizer.weight_decay = 5e-5
|
||||
train.init_checkpoint = (
|
||||
"https://dl.fbaipublicfiles.com/pycls/dds_baselines/160906383/RegNetX-4.0GF_dds_8gpu.pyth"
|
||||
)
|
||||
# RegNets benefit from enabling cudnn benchmark mode
|
||||
train.cudnn_benchmark = True
|
|
@ -0,0 +1,35 @@
|
|||
from ..common.optim import SGD as optimizer
|
||||
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||
from ..common.data.coco import dataloader
|
||||
from ..common.models.mask_rcnn_fpn import model
|
||||
from ..common.train import train
|
||||
|
||||
from detectron2.config import LazyCall as L
|
||||
from detectron2.modeling.backbone import RegNet
|
||||
from detectron2.modeling.backbone.regnet import SimpleStem, ResBottleneckBlock
|
||||
|
||||
|
||||
# Replace default ResNet with RegNetY-4GF from the DDS paper. Config source:
|
||||
# https://github.com/facebookresearch/pycls/blob/2c152a6e5d913e898cca4f0a758f41e6b976714d/configs/dds_baselines/regnety/RegNetY-4.0GF_dds_8gpu.yaml#L4-L10 # noqa
|
||||
model.backbone.bottom_up = L(RegNet)(
|
||||
stem_class=SimpleStem,
|
||||
stem_width=32,
|
||||
block_class=ResBottleneckBlock,
|
||||
depth=22,
|
||||
w_a=31.41,
|
||||
w_0=96,
|
||||
w_m=2.24,
|
||||
group_width=64,
|
||||
se_ratio=0.25,
|
||||
freeze_at=2,
|
||||
norm="FrozenBN",
|
||||
out_features=["s1", "s2", "s3", "s4"],
|
||||
)
|
||||
model.pixel_std = [57.375, 57.120, 58.395]
|
||||
|
||||
optimizer.weight_decay = 5e-5
|
||||
train.init_checkpoint = (
|
||||
"https://dl.fbaipublicfiles.com/pycls/dds_baselines/160906838/RegNetY-4.0GF_dds_8gpu.pyth"
|
||||
)
|
||||
# RegNets benefit from enabling cudnn benchmark mode
|
||||
train.cudnn_benchmark = True
|
|
@ -0,0 +1,15 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
KEYPOINT_ON: True
|
||||
ROI_HEADS:
|
||||
NUM_CLASSES: 1
|
||||
ROI_BOX_HEAD:
|
||||
SMOOTH_L1_BETA: 0.5 # Keypoint AP degrades (though box AP improves) when using plain L1 loss
|
||||
RPN:
|
||||
# Detectron1 uses 2000 proposals per-batch, but this option is per-image in detectron2.
|
||||
# 1000 proposals per-image is found to hurt box AP.
|
||||
# Therefore we increase it to 1500 per-image.
|
||||
POST_NMS_TOPK_TRAIN: 1500
|
||||
DATASETS:
|
||||
TRAIN: ("keypoints_coco_2017_train",)
|
||||
TEST: ("keypoints_coco_2017_val",)
|
|
@ -0,0 +1,8 @@
|
|||
_BASE_: "Base-Keypoint-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||
RESNETS:
|
||||
DEPTH: 101
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,8 @@
|
|||
from ..common.optim import SGD as optimizer
|
||||
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||
from ..common.data.coco_keypoint import dataloader
|
||||
from ..common.models.keypoint_rcnn_fpn import model
|
||||
from ..common.train import train
|
||||
|
||||
model.backbone.bottom_up.freeze_at = 2
|
||||
train.init_checkpoint = "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
|
@ -0,0 +1,5 @@
|
|||
_BASE_: "Base-Keypoint-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
RESNETS:
|
||||
DEPTH: 50
|
|
@ -0,0 +1,8 @@
|
|||
_BASE_: "Base-Keypoint-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,12 @@
|
|||
_BASE_: "Base-Keypoint-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/FAIR/X-101-32x8d.pkl"
|
||||
PIXEL_STD: [57.375, 57.120, 58.395]
|
||||
RESNETS:
|
||||
STRIDE_IN_1X1: False # this is a C2 model
|
||||
NUM_GROUPS: 32
|
||||
WIDTH_PER_GROUP: 8
|
||||
DEPTH: 101
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,11 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
META_ARCHITECTURE: "PanopticFPN"
|
||||
MASK_ON: True
|
||||
SEM_SEG_HEAD:
|
||||
LOSS_WEIGHT: 0.5
|
||||
DATASETS:
|
||||
TRAIN: ("coco_2017_train_panoptic_separated",)
|
||||
TEST: ("coco_2017_val_panoptic_separated",)
|
||||
DATALOADER:
|
||||
FILTER_EMPTY_ANNOTATIONS: False
|
|
@ -0,0 +1,8 @@
|
|||
_BASE_: "Base-Panoptic-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||
RESNETS:
|
||||
DEPTH: 101
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,8 @@
|
|||
from ..common.optim import SGD as optimizer
|
||||
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||
from ..common.data.coco_panoptic_separated import dataloader
|
||||
from ..common.models.panoptic_fpn import model
|
||||
from ..common.train import train
|
||||
|
||||
model.backbone.bottom_up.freeze_at = 2
|
||||
train.init_checkpoint = "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
|
@ -0,0 +1,5 @@
|
|||
_BASE_: "Base-Panoptic-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
RESNETS:
|
||||
DEPTH: 50
|
|
@ -0,0 +1,8 @@
|
|||
_BASE_: "Base-Panoptic-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,27 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
# WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
# For better, more stable performance initialize from COCO
|
||||
WEIGHTS: "detectron2://COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x/137849600/model_final_f10217.pkl"
|
||||
MASK_ON: True
|
||||
ROI_HEADS:
|
||||
NUM_CLASSES: 8
|
||||
# This is similar to the setting used in Mask R-CNN paper, Appendix A
|
||||
# But there are some differences, e.g., we did not initialize the output
|
||||
# layer using the corresponding classes from COCO
|
||||
INPUT:
|
||||
MIN_SIZE_TRAIN: (800, 832, 864, 896, 928, 960, 992, 1024)
|
||||
MIN_SIZE_TRAIN_SAMPLING: "choice"
|
||||
MIN_SIZE_TEST: 1024
|
||||
MAX_SIZE_TRAIN: 2048
|
||||
MAX_SIZE_TEST: 2048
|
||||
DATASETS:
|
||||
TRAIN: ("cityscapes_fine_instance_seg_train",)
|
||||
TEST: ("cityscapes_fine_instance_seg_val",)
|
||||
SOLVER:
|
||||
BASE_LR: 0.01
|
||||
STEPS: (18000,)
|
||||
MAX_ITER: 24000
|
||||
IMS_PER_BATCH: 8
|
||||
TEST:
|
||||
EVAL_PERIOD: 8000
|
|
@ -0,0 +1,84 @@
|
|||
|
||||
Detectron2 model zoo's experimental settings and a few implementation details are different from Detectron.
|
||||
|
||||
The differences in implementation details are shared in
|
||||
[Compatibility with Other Libraries](../../docs/notes/compatibility.md).
|
||||
|
||||
The differences in model zoo's experimental settings include:
|
||||
* Use scale augmentation during training. This improves AP with lower training cost.
|
||||
* Use L1 loss instead of smooth L1 loss for simplicity. This sometimes improves box AP but may
|
||||
affect other AP.
|
||||
* Use `POOLER_SAMPLING_RATIO=0` instead of 2. This does not significantly affect AP.
|
||||
* Use `ROIAlignV2`. This does not significantly affect AP.
|
||||
|
||||
In this directory, we provide a few configs that __do not__ have the above changes.
|
||||
They mimic Detectron's behavior as close as possible,
|
||||
and provide a fair comparison of accuracy and speed against Detectron.
|
||||
|
||||
<!--
|
||||
./gen_html_table.py --config 'Detectron1-Comparisons/*.yaml' --name "Faster R-CNN" "Keypoint R-CNN" "Mask R-CNN" --fields lr_sched train_speed inference_speed mem box_AP mask_AP keypoint_AP --base-dir ../../../configs/Detectron1-Comparisons
|
||||
-->
|
||||
|
||||
|
||||
<table><tbody>
|
||||
<!-- START TABLE -->
|
||||
<!-- TABLE HEADER -->
|
||||
<th valign="bottom">Name</th>
|
||||
<th valign="bottom">lr<br/>sched</th>
|
||||
<th valign="bottom">train<br/>time<br/>(s/iter)</th>
|
||||
<th valign="bottom">inference<br/>time<br/>(s/im)</th>
|
||||
<th valign="bottom">train<br/>mem<br/>(GB)</th>
|
||||
<th valign="bottom">box<br/>AP</th>
|
||||
<th valign="bottom">mask<br/>AP</th>
|
||||
<th valign="bottom">kp.<br/>AP</th>
|
||||
<th valign="bottom">model id</th>
|
||||
<th valign="bottom">download</th>
|
||||
<!-- TABLE BODY -->
|
||||
<!-- ROW: faster_rcnn_R_50_FPN_noaug_1x -->
|
||||
<tr><td align="left"><a href="faster_rcnn_R_50_FPN_noaug_1x.yaml">Faster R-CNN</a></td>
|
||||
<td align="center">1x</td>
|
||||
<td align="center">0.219</td>
|
||||
<td align="center">0.038</td>
|
||||
<td align="center">3.1</td>
|
||||
<td align="center">36.9</td>
|
||||
<td align="center"></td>
|
||||
<td align="center"></td>
|
||||
<td align="center">137781054</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/detectron2/Detectron1-Comparisons/faster_rcnn_R_50_FPN_noaug_1x/137781054/model_final_7ab50c.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/detectron2/Detectron1-Comparisons/faster_rcnn_R_50_FPN_noaug_1x/137781054/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
<!-- ROW: keypoint_rcnn_R_50_FPN_1x -->
|
||||
<tr><td align="left"><a href="keypoint_rcnn_R_50_FPN_1x.yaml">Keypoint R-CNN</a></td>
|
||||
<td align="center">1x</td>
|
||||
<td align="center">0.313</td>
|
||||
<td align="center">0.071</td>
|
||||
<td align="center">5.0</td>
|
||||
<td align="center">53.1</td>
|
||||
<td align="center"></td>
|
||||
<td align="center">64.2</td>
|
||||
<td align="center">137781195</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/detectron2/Detectron1-Comparisons/keypoint_rcnn_R_50_FPN_1x/137781195/model_final_cce136.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/detectron2/Detectron1-Comparisons/keypoint_rcnn_R_50_FPN_1x/137781195/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
<!-- ROW: mask_rcnn_R_50_FPN_noaug_1x -->
|
||||
<tr><td align="left"><a href="mask_rcnn_R_50_FPN_noaug_1x.yaml">Mask R-CNN</a></td>
|
||||
<td align="center">1x</td>
|
||||
<td align="center">0.273</td>
|
||||
<td align="center">0.043</td>
|
||||
<td align="center">3.4</td>
|
||||
<td align="center">37.8</td>
|
||||
<td align="center">34.9</td>
|
||||
<td align="center"></td>
|
||||
<td align="center">137781281</td>
|
||||
<td align="center"><a href="https://dl.fbaipublicfiles.com/detectron2/Detectron1-Comparisons/mask_rcnn_R_50_FPN_noaug_1x/137781281/model_final_62ca52.pkl">model</a> | <a href="https://dl.fbaipublicfiles.com/detectron2/Detectron1-Comparisons/mask_rcnn_R_50_FPN_noaug_1x/137781281/metrics.json">metrics</a></td>
|
||||
</tr>
|
||||
</tbody></table>
|
||||
|
||||
## Comparisons:
|
||||
|
||||
* Faster R-CNN: Detectron's AP is 36.7, similar to ours.
|
||||
* Keypoint R-CNN: Detectron's AP is box 53.6, keypoint 64.2. Fixing a Detectron's
|
||||
[bug](https://github.com/facebookresearch/Detectron/issues/459) lead to a drop in box AP, and can be
|
||||
compensated back by some parameter tuning.
|
||||
* Mask R-CNN: Detectron's AP is box 37.7, mask 33.9. We're 1 AP better in mask AP, due to more correct implementation.
|
||||
See [this article](https://ppwwyyxx.com/blog/2021/Where-are-Pixels/) for details.
|
||||
|
||||
For speed comparison, see [benchmarks](https://detectron2.readthedocs.io/notes/benchmarks.html).
|
|
@ -0,0 +1,17 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: False
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
# Detectron1 uses smooth L1 loss with some magic beta values.
|
||||
# The defaults are changed to L1 loss in Detectron2.
|
||||
RPN:
|
||||
SMOOTH_L1_BETA: 0.1111
|
||||
ROI_BOX_HEAD:
|
||||
SMOOTH_L1_BETA: 1.0
|
||||
POOLER_SAMPLING_RATIO: 2
|
||||
POOLER_TYPE: "ROIAlign"
|
||||
INPUT:
|
||||
# no scale augmentation
|
||||
MIN_SIZE_TRAIN: (800, )
|
|
@ -0,0 +1,27 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
KEYPOINT_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
ROI_HEADS:
|
||||
NUM_CLASSES: 1
|
||||
ROI_KEYPOINT_HEAD:
|
||||
POOLER_RESOLUTION: 14
|
||||
POOLER_SAMPLING_RATIO: 2
|
||||
POOLER_TYPE: "ROIAlign"
|
||||
# Detectron1 uses smooth L1 loss with some magic beta values.
|
||||
# The defaults are changed to L1 loss in Detectron2.
|
||||
ROI_BOX_HEAD:
|
||||
SMOOTH_L1_BETA: 1.0
|
||||
POOLER_SAMPLING_RATIO: 2
|
||||
POOLER_TYPE: "ROIAlign"
|
||||
RPN:
|
||||
SMOOTH_L1_BETA: 0.1111
|
||||
# Detectron1 uses 2000 proposals per-batch, but this option is per-image in detectron2
|
||||
# 1000 proposals per-image is found to hurt box AP.
|
||||
# Therefore we increase it to 1500 per-image.
|
||||
POST_NMS_TOPK_TRAIN: 1500
|
||||
DATASETS:
|
||||
TRAIN: ("keypoints_coco_2017_train",)
|
||||
TEST: ("keypoints_coco_2017_val",)
|
|
@ -0,0 +1,20 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
# Detectron1 uses smooth L1 loss with some magic beta values.
|
||||
# The defaults are changed to L1 loss in Detectron2.
|
||||
RPN:
|
||||
SMOOTH_L1_BETA: 0.1111
|
||||
ROI_BOX_HEAD:
|
||||
SMOOTH_L1_BETA: 1.0
|
||||
POOLER_SAMPLING_RATIO: 2
|
||||
POOLER_TYPE: "ROIAlign"
|
||||
ROI_MASK_HEAD:
|
||||
POOLER_SAMPLING_RATIO: 2
|
||||
POOLER_TYPE: "ROIAlign"
|
||||
INPUT:
|
||||
# no scale augmentation
|
||||
MIN_SIZE_TRAIN: (800, )
|
|
@ -0,0 +1,19 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 101
|
||||
ROI_HEADS:
|
||||
NUM_CLASSES: 1230
|
||||
SCORE_THRESH_TEST: 0.0001
|
||||
INPUT:
|
||||
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||
DATASETS:
|
||||
TRAIN: ("lvis_v0.5_train",)
|
||||
TEST: ("lvis_v0.5_val",)
|
||||
TEST:
|
||||
DETECTIONS_PER_IMAGE: 300 # LVIS allows up to 300
|
||||
DATALOADER:
|
||||
SAMPLER_TRAIN: "RepeatFactorTrainingSampler"
|
||||
REPEAT_THRESHOLD: 0.001
|
|
@ -0,0 +1,19 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
ROI_HEADS:
|
||||
NUM_CLASSES: 1230
|
||||
SCORE_THRESH_TEST: 0.0001
|
||||
INPUT:
|
||||
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||
DATASETS:
|
||||
TRAIN: ("lvis_v0.5_train",)
|
||||
TEST: ("lvis_v0.5_val",)
|
||||
TEST:
|
||||
DETECTIONS_PER_IMAGE: 300 # LVIS allows up to 300
|
||||
DATALOADER:
|
||||
SAMPLER_TRAIN: "RepeatFactorTrainingSampler"
|
||||
REPEAT_THRESHOLD: 0.001
|
|
@ -0,0 +1,23 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/FAIR/X-101-32x8d.pkl"
|
||||
PIXEL_STD: [57.375, 57.120, 58.395]
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
STRIDE_IN_1X1: False # this is a C2 model
|
||||
NUM_GROUPS: 32
|
||||
WIDTH_PER_GROUP: 8
|
||||
DEPTH: 101
|
||||
ROI_HEADS:
|
||||
NUM_CLASSES: 1230
|
||||
SCORE_THRESH_TEST: 0.0001
|
||||
INPUT:
|
||||
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||
DATASETS:
|
||||
TRAIN: ("lvis_v0.5_train",)
|
||||
TEST: ("lvis_v0.5_val",)
|
||||
TEST:
|
||||
DETECTIONS_PER_IMAGE: 300 # LVIS allows up to 300
|
||||
DATALOADER:
|
||||
SAMPLER_TRAIN: "RepeatFactorTrainingSampler"
|
||||
REPEAT_THRESHOLD: 0.001
|
|
@ -0,0 +1,22 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-101.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 101
|
||||
ROI_HEADS:
|
||||
NUM_CLASSES: 1203
|
||||
SCORE_THRESH_TEST: 0.0001
|
||||
INPUT:
|
||||
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||
DATASETS:
|
||||
TRAIN: ("lvis_v1_train",)
|
||||
TEST: ("lvis_v1_val",)
|
||||
TEST:
|
||||
DETECTIONS_PER_IMAGE: 300 # LVIS allows up to 300
|
||||
SOLVER:
|
||||
STEPS: (120000, 160000)
|
||||
MAX_ITER: 180000 # 180000 * 16 / 100000 ~ 28.8 epochs
|
||||
DATALOADER:
|
||||
SAMPLER_TRAIN: "RepeatFactorTrainingSampler"
|
||||
REPEAT_THRESHOLD: 0.001
|
|
@ -0,0 +1,22 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
ROI_HEADS:
|
||||
NUM_CLASSES: 1203
|
||||
SCORE_THRESH_TEST: 0.0001
|
||||
INPUT:
|
||||
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||
DATASETS:
|
||||
TRAIN: ("lvis_v1_train",)
|
||||
TEST: ("lvis_v1_val",)
|
||||
TEST:
|
||||
DETECTIONS_PER_IMAGE: 300 # LVIS allows up to 300
|
||||
SOLVER:
|
||||
STEPS: (120000, 160000)
|
||||
MAX_ITER: 180000 # 180000 * 16 / 100000 ~ 28.8 epochs
|
||||
DATALOADER:
|
||||
SAMPLER_TRAIN: "RepeatFactorTrainingSampler"
|
||||
REPEAT_THRESHOLD: 0.001
|
|
@ -0,0 +1,26 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/FAIR/X-101-32x8d.pkl"
|
||||
PIXEL_STD: [57.375, 57.120, 58.395]
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
STRIDE_IN_1X1: False # this is a C2 model
|
||||
NUM_GROUPS: 32
|
||||
WIDTH_PER_GROUP: 8
|
||||
DEPTH: 101
|
||||
ROI_HEADS:
|
||||
NUM_CLASSES: 1203
|
||||
SCORE_THRESH_TEST: 0.0001
|
||||
INPUT:
|
||||
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
||||
DATASETS:
|
||||
TRAIN: ("lvis_v1_train",)
|
||||
TEST: ("lvis_v1_val",)
|
||||
SOLVER:
|
||||
STEPS: (120000, 160000)
|
||||
MAX_ITER: 180000 # 180000 * 16 / 100000 ~ 28.8 epochs
|
||||
TEST:
|
||||
DETECTIONS_PER_IMAGE: 300 # LVIS allows up to 300
|
||||
DATALOADER:
|
||||
SAMPLER_TRAIN: "RepeatFactorTrainingSampler"
|
||||
REPEAT_THRESHOLD: 0.001
|
|
@ -0,0 +1,12 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
ROI_HEADS:
|
||||
NAME: CascadeROIHeads
|
||||
ROI_BOX_HEAD:
|
||||
CLS_AGNOSTIC_BBOX_REG: True
|
||||
RPN:
|
||||
POST_NMS_TOPK_TRAIN: 2000
|
|
@ -0,0 +1,15 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
ROI_HEADS:
|
||||
NAME: CascadeROIHeads
|
||||
ROI_BOX_HEAD:
|
||||
CLS_AGNOSTIC_BBOX_REG: True
|
||||
RPN:
|
||||
POST_NMS_TOPK_TRAIN: 2000
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,36 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
MASK_ON: True
|
||||
WEIGHTS: "catalog://ImageNetPretrained/FAIR/X-152-32x8d-IN5k"
|
||||
RESNETS:
|
||||
STRIDE_IN_1X1: False # this is a C2 model
|
||||
NUM_GROUPS: 32
|
||||
WIDTH_PER_GROUP: 8
|
||||
DEPTH: 152
|
||||
DEFORM_ON_PER_STAGE: [False, True, True, True]
|
||||
ROI_HEADS:
|
||||
NAME: "CascadeROIHeads"
|
||||
ROI_BOX_HEAD:
|
||||
NAME: "FastRCNNConvFCHead"
|
||||
NUM_CONV: 4
|
||||
NUM_FC: 1
|
||||
NORM: "GN"
|
||||
CLS_AGNOSTIC_BBOX_REG: True
|
||||
ROI_MASK_HEAD:
|
||||
NUM_CONV: 8
|
||||
NORM: "GN"
|
||||
RPN:
|
||||
POST_NMS_TOPK_TRAIN: 2000
|
||||
SOLVER:
|
||||
IMS_PER_BATCH: 128
|
||||
STEPS: (35000, 45000)
|
||||
MAX_ITER: 50000
|
||||
BASE_LR: 0.16
|
||||
INPUT:
|
||||
MIN_SIZE_TRAIN: (640, 864)
|
||||
MIN_SIZE_TRAIN_SAMPLING: "range"
|
||||
MAX_SIZE_TRAIN: 1440
|
||||
CROP:
|
||||
ENABLED: True
|
||||
TEST:
|
||||
EVAL_PERIOD: 2500
|
|
@ -0,0 +1,10 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
ROI_BOX_HEAD:
|
||||
CLS_AGNOSTIC_BBOX_REG: True
|
||||
ROI_MASK_HEAD:
|
||||
CLS_AGNOSTIC_MASK: True
|
|
@ -0,0 +1,8 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
DEFORM_ON_PER_STAGE: [False, True, True, True] # on Res3,Res4,Res5
|
||||
DEFORM_MODULATED: False
|
|
@ -0,0 +1,11 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
DEFORM_ON_PER_STAGE: [False, True, True, True] # on Res3,Res4,Res5
|
||||
DEFORM_MODULATED: False
|
||||
SOLVER:
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,21 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "catalog://ImageNetPretrained/FAIR/R-50-GN"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
NORM: "GN"
|
||||
STRIDE_IN_1X1: False
|
||||
FPN:
|
||||
NORM: "GN"
|
||||
ROI_BOX_HEAD:
|
||||
NAME: "FastRCNNConvFCHead"
|
||||
NUM_CONV: 4
|
||||
NUM_FC: 1
|
||||
NORM: "GN"
|
||||
ROI_MASK_HEAD:
|
||||
NORM: "GN"
|
||||
SOLVER:
|
||||
# 3x schedule
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
|
@ -0,0 +1,24 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
NORM: "SyncBN"
|
||||
STRIDE_IN_1X1: True
|
||||
FPN:
|
||||
NORM: "SyncBN"
|
||||
ROI_BOX_HEAD:
|
||||
NAME: "FastRCNNConvFCHead"
|
||||
NUM_CONV: 4
|
||||
NUM_FC: 1
|
||||
NORM: "SyncBN"
|
||||
ROI_MASK_HEAD:
|
||||
NORM: "SyncBN"
|
||||
SOLVER:
|
||||
# 3x schedule
|
||||
STEPS: (210000, 250000)
|
||||
MAX_ITER: 270000
|
||||
TEST:
|
||||
PRECISE_BN:
|
||||
ENABLED: True
|
|
@ -0,0 +1,152 @@
|
|||
# An example config to train a mmdetection model using detectron2.
|
||||
|
||||
from ..common.data.coco import dataloader
|
||||
from ..common.coco_schedule import lr_multiplier_1x as lr_multiplier
|
||||
from ..common.optim import SGD as optimizer
|
||||
from ..common.train import train
|
||||
from ..common.data.constants import constants
|
||||
|
||||
from detectron2.modeling.mmdet_wrapper import MMDetDetector
|
||||
from detectron2.config import LazyCall as L
|
||||
|
||||
model = L(MMDetDetector)(
|
||||
detector=dict(
|
||||
type="MaskRCNN",
|
||||
pretrained="torchvision://resnet50",
|
||||
backbone=dict(
|
||||
type="ResNet",
|
||||
depth=50,
|
||||
num_stages=4,
|
||||
out_indices=(0, 1, 2, 3),
|
||||
frozen_stages=1,
|
||||
norm_cfg=dict(type="BN", requires_grad=True),
|
||||
norm_eval=True,
|
||||
style="pytorch",
|
||||
),
|
||||
neck=dict(type="FPN", in_channels=[256, 512, 1024, 2048], out_channels=256, num_outs=5),
|
||||
rpn_head=dict(
|
||||
type="RPNHead",
|
||||
in_channels=256,
|
||||
feat_channels=256,
|
||||
anchor_generator=dict(
|
||||
type="AnchorGenerator",
|
||||
scales=[8],
|
||||
ratios=[0.5, 1.0, 2.0],
|
||||
strides=[4, 8, 16, 32, 64],
|
||||
),
|
||||
bbox_coder=dict(
|
||||
type="DeltaXYWHBBoxCoder",
|
||||
target_means=[0.0, 0.0, 0.0, 0.0],
|
||||
target_stds=[1.0, 1.0, 1.0, 1.0],
|
||||
),
|
||||
loss_cls=dict(type="CrossEntropyLoss", use_sigmoid=True, loss_weight=1.0),
|
||||
loss_bbox=dict(type="L1Loss", loss_weight=1.0),
|
||||
),
|
||||
roi_head=dict(
|
||||
type="StandardRoIHead",
|
||||
bbox_roi_extractor=dict(
|
||||
type="SingleRoIExtractor",
|
||||
roi_layer=dict(type="RoIAlign", output_size=7, sampling_ratio=0),
|
||||
out_channels=256,
|
||||
featmap_strides=[4, 8, 16, 32],
|
||||
),
|
||||
bbox_head=dict(
|
||||
type="Shared2FCBBoxHead",
|
||||
in_channels=256,
|
||||
fc_out_channels=1024,
|
||||
roi_feat_size=7,
|
||||
num_classes=80,
|
||||
bbox_coder=dict(
|
||||
type="DeltaXYWHBBoxCoder",
|
||||
target_means=[0.0, 0.0, 0.0, 0.0],
|
||||
target_stds=[0.1, 0.1, 0.2, 0.2],
|
||||
),
|
||||
reg_class_agnostic=False,
|
||||
loss_cls=dict(type="CrossEntropyLoss", use_sigmoid=False, loss_weight=1.0),
|
||||
loss_bbox=dict(type="L1Loss", loss_weight=1.0),
|
||||
),
|
||||
mask_roi_extractor=dict(
|
||||
type="SingleRoIExtractor",
|
||||
roi_layer=dict(type="RoIAlign", output_size=14, sampling_ratio=0),
|
||||
out_channels=256,
|
||||
featmap_strides=[4, 8, 16, 32],
|
||||
),
|
||||
mask_head=dict(
|
||||
type="FCNMaskHead",
|
||||
num_convs=4,
|
||||
in_channels=256,
|
||||
conv_out_channels=256,
|
||||
num_classes=80,
|
||||
loss_mask=dict(type="CrossEntropyLoss", use_mask=True, loss_weight=1.0),
|
||||
),
|
||||
),
|
||||
# model training and testing settings
|
||||
train_cfg=dict(
|
||||
rpn=dict(
|
||||
assigner=dict(
|
||||
type="MaxIoUAssigner",
|
||||
pos_iou_thr=0.7,
|
||||
neg_iou_thr=0.3,
|
||||
min_pos_iou=0.3,
|
||||
match_low_quality=True,
|
||||
ignore_iof_thr=-1,
|
||||
),
|
||||
sampler=dict(
|
||||
type="RandomSampler",
|
||||
num=256,
|
||||
pos_fraction=0.5,
|
||||
neg_pos_ub=-1,
|
||||
add_gt_as_proposals=False,
|
||||
),
|
||||
allowed_border=-1,
|
||||
pos_weight=-1,
|
||||
debug=False,
|
||||
),
|
||||
rpn_proposal=dict(
|
||||
nms_pre=2000,
|
||||
max_per_img=1000,
|
||||
nms=dict(type="nms", iou_threshold=0.7),
|
||||
min_bbox_size=0,
|
||||
),
|
||||
rcnn=dict(
|
||||
assigner=dict(
|
||||
type="MaxIoUAssigner",
|
||||
pos_iou_thr=0.5,
|
||||
neg_iou_thr=0.5,
|
||||
min_pos_iou=0.5,
|
||||
match_low_quality=True,
|
||||
ignore_iof_thr=-1,
|
||||
),
|
||||
sampler=dict(
|
||||
type="RandomSampler",
|
||||
num=512,
|
||||
pos_fraction=0.25,
|
||||
neg_pos_ub=-1,
|
||||
add_gt_as_proposals=True,
|
||||
),
|
||||
mask_size=28,
|
||||
pos_weight=-1,
|
||||
debug=False,
|
||||
),
|
||||
),
|
||||
test_cfg=dict(
|
||||
rpn=dict(
|
||||
nms_pre=1000,
|
||||
max_per_img=1000,
|
||||
nms=dict(type="nms", iou_threshold=0.7),
|
||||
min_bbox_size=0,
|
||||
),
|
||||
rcnn=dict(
|
||||
score_thr=0.05,
|
||||
nms=dict(type="nms", iou_threshold=0.5),
|
||||
max_per_img=100,
|
||||
mask_thr_binary=0.5,
|
||||
),
|
||||
),
|
||||
),
|
||||
pixel_mean=constants.imagenet_rgb256_mean,
|
||||
pixel_std=constants.imagenet_rgb256_std,
|
||||
)
|
||||
|
||||
dataloader.train.mapper.image_format = "RGB" # torchvision pretrained model
|
||||
train.init_checkpoint = None # pretrained model is loaded inside backbone
|
|
@ -0,0 +1,26 @@
|
|||
# A large PanopticFPN for demo purposes.
|
||||
# Use GN on backbone to support semantic seg.
|
||||
# Use Cascade + Deform Conv to improve localization.
|
||||
_BASE_: "../COCO-PanopticSegmentation/Base-Panoptic-FPN.yaml"
|
||||
MODEL:
|
||||
WEIGHTS: "catalog://ImageNetPretrained/FAIR/R-101-GN"
|
||||
RESNETS:
|
||||
DEPTH: 101
|
||||
NORM: "GN"
|
||||
DEFORM_ON_PER_STAGE: [False, True, True, True]
|
||||
STRIDE_IN_1X1: False
|
||||
FPN:
|
||||
NORM: "GN"
|
||||
ROI_HEADS:
|
||||
NAME: CascadeROIHeads
|
||||
ROI_BOX_HEAD:
|
||||
CLS_AGNOSTIC_BBOX_REG: True
|
||||
ROI_MASK_HEAD:
|
||||
NORM: "GN"
|
||||
RPN:
|
||||
POST_NMS_TOPK_TRAIN: 2000
|
||||
SOLVER:
|
||||
STEPS: (105000, 125000)
|
||||
MAX_ITER: 135000
|
||||
IMS_PER_BATCH: 32
|
||||
BASE_LR: 0.04
|
|
@ -0,0 +1,13 @@
|
|||
_BASE_: "mask_rcnn_R_50_FPN_3x_gn.yaml"
|
||||
MODEL:
|
||||
# Train from random initialization.
|
||||
WEIGHTS: ""
|
||||
# It makes sense to divide by STD when training from scratch
|
||||
# But it seems to make no difference on the results and C2's models didn't do this.
|
||||
# So we keep things consistent with C2.
|
||||
# PIXEL_STD: [57.375, 57.12, 58.395]
|
||||
MASK_ON: True
|
||||
BACKBONE:
|
||||
FREEZE_AT: 0
|
||||
# NOTE: Please refer to Rethinking ImageNet Pre-training https://arxiv.org/abs/1811.08883
|
||||
# to learn what you need for training from scratch.
|
|
@ -0,0 +1,19 @@
|
|||
_BASE_: "mask_rcnn_R_50_FPN_3x_gn.yaml"
|
||||
MODEL:
|
||||
PIXEL_STD: [57.375, 57.12, 58.395]
|
||||
WEIGHTS: ""
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
STRIDE_IN_1X1: False
|
||||
BACKBONE:
|
||||
FREEZE_AT: 0
|
||||
SOLVER:
|
||||
# 9x schedule
|
||||
IMS_PER_BATCH: 64 # 4x the standard
|
||||
STEPS: (187500, 197500) # last 60/4==15k and last 20/4==5k
|
||||
MAX_ITER: 202500 # 90k * 9 / 4
|
||||
BASE_LR: 0.08
|
||||
TEST:
|
||||
EVAL_PERIOD: 2500
|
||||
# NOTE: Please refer to Rethinking ImageNet Pre-training https://arxiv.org/abs/1811.08883
|
||||
# to learn what you need for training from scratch.
|
|
@ -0,0 +1,19 @@
|
|||
_BASE_: "mask_rcnn_R_50_FPN_3x_syncbn.yaml"
|
||||
MODEL:
|
||||
PIXEL_STD: [57.375, 57.12, 58.395]
|
||||
WEIGHTS: ""
|
||||
MASK_ON: True
|
||||
RESNETS:
|
||||
STRIDE_IN_1X1: False
|
||||
BACKBONE:
|
||||
FREEZE_AT: 0
|
||||
SOLVER:
|
||||
# 9x schedule
|
||||
IMS_PER_BATCH: 64 # 4x the standard
|
||||
STEPS: (187500, 197500) # last 60/4==15k and last 20/4==5k
|
||||
MAX_ITER: 202500 # 90k * 9 / 4
|
||||
BASE_LR: 0.08
|
||||
TEST:
|
||||
EVAL_PERIOD: 2500
|
||||
# NOTE: Please refer to Rethinking ImageNet Pre-training https://arxiv.org/abs/1811.08883
|
||||
# to learn what you need for training from scratch.
|
|
@ -0,0 +1,11 @@
|
|||
_BASE_: "../Base-RCNN-FPN.yaml"
|
||||
MODEL:
|
||||
META_ARCHITECTURE: "SemanticSegmentor"
|
||||
WEIGHTS: "detectron2://ImageNetPretrained/MSRA/R-50.pkl"
|
||||
RESNETS:
|
||||
DEPTH: 50
|
||||
DATASETS:
|
||||
TRAIN: ("coco_2017_train_panoptic_stuffonly",)
|
||||
TEST: ("coco_2017_val_panoptic_stuffonly",)
|
||||
INPUT:
|
||||
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800)
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue